stm32/boards/STM32F769DISC: Add config to use external SPI as filesys.

This board now has the following 3 build configurations:
- mboot + external QSPI in XIP mode + internal filesystem
- mboot + external QSPI with filesystem (the default)
- no mboot + external QSPI with filesystem
This commit is contained in:
Damien George 2020-01-30 14:40:38 +11:00
parent 7bb2bf965e
commit 96a4435be1
3 changed files with 36 additions and 14 deletions

View File

@ -1,16 +1,19 @@
#include "drivers/memory/spiflash.h"
#include "storage.h"
#include "qspi.h"
// This configuration is needed for mboot to be able to write to the external QSPI flash
STATIC mp_spiflash_cache_t spi_bdev_cache;
const mp_spiflash_config_t spiflash_config = {
.bus_kind = MP_SPIFLASH_BUS_QSPI,
.bus.u_qspi.data = NULL,
.bus.u_qspi.proto = &qspi_proto,
.cache = NULL,
.cache = &spi_bdev_cache,
};
mp_spiflash_t spiflash_instance;
spi_bdev_t spi_bdev;
// This init function is needed to memory map the QSPI flash early in the boot process

View File

@ -26,7 +26,7 @@ void board_early_init(void);
#define MICROPY_HW_FLASH_LATENCY FLASH_LATENCY_7 // 210-216 MHz needs 7 wait states
// 512MBit external QSPI flash, to be memory mapped
// 512MBit external QSPI flash, used for either the filesystem or XIP memory mapped
#define MICROPY_HW_QSPIFLASH_SIZE_BITS_LOG2 (29)
#define MICROPY_HW_QSPIFLASH_CS (pin_B6)
#define MICROPY_HW_QSPIFLASH_SCK (pin_B2)
@ -35,6 +35,21 @@ void board_early_init(void);
#define MICROPY_HW_QSPIFLASH_IO2 (pin_E2)
#define MICROPY_HW_QSPIFLASH_IO3 (pin_D13)
// SPI flash, block device config (when used as the filesystem)
extern const struct _mp_spiflash_config_t spiflash_config;
extern struct _spi_bdev_t spi_bdev;
#if !USE_QSPI_XIP
#define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0)
#define MICROPY_HW_BDEV_IOCTL(op, arg) ( \
(op) == BDEV_IOCTL_NUM_BLOCKS ? (64 * 1024 * 1024 / FLASH_BLOCK_SIZE) : \
(op) == BDEV_IOCTL_INIT ? spi_bdev_ioctl(&spi_bdev, (op), (uint32_t)&spiflash_config) : \
spi_bdev_ioctl(&spi_bdev, (op), (arg)) \
)
#define MICROPY_HW_BDEV_READBLOCKS(dest, bl, n) spi_bdev_readblocks(&spi_bdev, (dest), (bl), (n))
#define MICROPY_HW_BDEV_WRITEBLOCKS(src, bl, n) spi_bdev_writeblocks(&spi_bdev, (src), (bl), (n))
#define MICROPY_HW_BDEV_SPIFLASH_EXTENDED (&spi_bdev) // for extended block protocol
#endif
// UART config
#define MICROPY_HW_UART1_TX (pin_A9)
#define MICROPY_HW_UART1_RX (pin_A10)
@ -199,11 +214,9 @@ void board_early_init(void);
// Bootloader configuration
// Give Mboot access to the external QSPI flash
extern const struct _mp_spiflash_config_t spiflash_config;
extern struct _mp_spiflash_t spiflash_instance;
#define MBOOT_SPIFLASH_ADDR (0x90000000)
#define MBOOT_SPIFLASH_BYTE_SIZE (512 * 128 * 1024)
#define MBOOT_SPIFLASH_LAYOUT "/0x90000000/512*128Kg"
#define MBOOT_SPIFLASH_ERASE_BLOCKS_PER_PAGE (128 / 4) // 128k page, 4k erase block
#define MBOOT_SPIFLASH_CONFIG (&spiflash_config)
#define MBOOT_SPIFLASH_SPIFLASH (&spiflash_instance)
#define MBOOT_SPIFLASH_SPIFLASH (&spi_bdev.spiflash)

View File

@ -1,9 +1,11 @@
# By default this board is configured to use mboot which must be deployed first
USE_MBOOT ?= 1
# By default this board puts some code into external QSPI flash set in XIP mode
# By default the filesystem is in external QSPI flash. But by setting the
# following option this board puts some code into external flash set in XIP mode.
# USE_MBOOT must be enabled; see f769_qspi.ld for code that goes in QSPI flash
USE_QSPI ?= 1
USE_QSPI_XIP ?= 0
CFLAGS += -DUSE_QSPI_XIP=$(USE_QSPI_XIP)
# MCU settings
MCU_SERIES = f7
@ -12,9 +14,11 @@ MICROPY_FLOAT_IMPL = double
AF_FILE = boards/stm32f767_af.csv
ifeq ($(USE_MBOOT),1)
ifeq ($(USE_QSPI),1)
ifeq ($(USE_QSPI_XIP),1)
# When using Mboot and QSPI the text is split between internal and external flash
# When using Mboot and QSPI-XIP the text is split between internal and external
# QSPI flash, and the filesystem is in internal flash between the bootloader and
# the main program text.
LD_FILES = boards/STM32F769DISC/f769_qspi.ld
TEXT0_ADDR = 0x08020000
TEXT1_ADDR = 0x90000000
@ -23,17 +27,19 @@ TEXT1_SECTIONS = .text_qspi
else
# When using Mboot but not QSPI all the text goes together after the filesystem
# When using Mboot but not QSPI-XIP all the text goes together after the bootloader
# (at same location as when QSPI-XIP is enabled so the same Mboot can be used for
# either configuration) and the filesystem is in external flash.
LD_FILES = boards/stm32f769.ld boards/common_blifs.ld
TEXT0_ADDR = 0x08020000
endif
else
# When not using Mboot the ISR text goes first, then the rest after the filesystem
LD_FILES = boards/stm32f769.ld boards/common_ifs.ld
# When not using Mboot (and so no ability to load text into QSPI) all the text goes
# together at the start of internal flash, and the filesystem is in external flash.
LD_FILES = boards/stm32f769.ld boards/common_basic.ld
TEXT0_ADDR = 0x08000000
TEXT1_ADDR = 0x08020000
endif