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:
parent
7bb2bf965e
commit
96a4435be1
@ -1,16 +1,19 @@
|
|||||||
#include "drivers/memory/spiflash.h"
|
#include "storage.h"
|
||||||
#include "qspi.h"
|
#include "qspi.h"
|
||||||
|
|
||||||
// This configuration is needed for mboot to be able to write to the external QSPI flash
|
// 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 = {
|
const mp_spiflash_config_t spiflash_config = {
|
||||||
.bus_kind = MP_SPIFLASH_BUS_QSPI,
|
.bus_kind = MP_SPIFLASH_BUS_QSPI,
|
||||||
.bus.u_qspi.data = NULL,
|
.bus.u_qspi.data = NULL,
|
||||||
.bus.u_qspi.proto = &qspi_proto,
|
.bus.u_qspi.proto = &qspi_proto,
|
||||||
.cache = NULL,
|
.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
|
// This init function is needed to memory map the QSPI flash early in the boot process
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ void board_early_init(void);
|
|||||||
|
|
||||||
#define MICROPY_HW_FLASH_LATENCY FLASH_LATENCY_7 // 210-216 MHz needs 7 wait states
|
#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_SIZE_BITS_LOG2 (29)
|
||||||
#define MICROPY_HW_QSPIFLASH_CS (pin_B6)
|
#define MICROPY_HW_QSPIFLASH_CS (pin_B6)
|
||||||
#define MICROPY_HW_QSPIFLASH_SCK (pin_B2)
|
#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_IO2 (pin_E2)
|
||||||
#define MICROPY_HW_QSPIFLASH_IO3 (pin_D13)
|
#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
|
// UART config
|
||||||
#define MICROPY_HW_UART1_TX (pin_A9)
|
#define MICROPY_HW_UART1_TX (pin_A9)
|
||||||
#define MICROPY_HW_UART1_RX (pin_A10)
|
#define MICROPY_HW_UART1_RX (pin_A10)
|
||||||
@ -199,11 +214,9 @@ void board_early_init(void);
|
|||||||
// Bootloader configuration
|
// Bootloader configuration
|
||||||
|
|
||||||
// Give Mboot access to the external QSPI flash
|
// 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_ADDR (0x90000000)
|
||||||
#define MBOOT_SPIFLASH_BYTE_SIZE (512 * 128 * 1024)
|
#define MBOOT_SPIFLASH_BYTE_SIZE (512 * 128 * 1024)
|
||||||
#define MBOOT_SPIFLASH_LAYOUT "/0x90000000/512*128Kg"
|
#define MBOOT_SPIFLASH_LAYOUT "/0x90000000/512*128Kg"
|
||||||
#define MBOOT_SPIFLASH_ERASE_BLOCKS_PER_PAGE (128 / 4) // 128k page, 4k erase block
|
#define MBOOT_SPIFLASH_ERASE_BLOCKS_PER_PAGE (128 / 4) // 128k page, 4k erase block
|
||||||
#define MBOOT_SPIFLASH_CONFIG (&spiflash_config)
|
#define MBOOT_SPIFLASH_CONFIG (&spiflash_config)
|
||||||
#define MBOOT_SPIFLASH_SPIFLASH (&spiflash_instance)
|
#define MBOOT_SPIFLASH_SPIFLASH (&spi_bdev.spiflash)
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
# By default this board is configured to use mboot which must be deployed first
|
# By default this board is configured to use mboot which must be deployed first
|
||||||
USE_MBOOT ?= 1
|
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_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 settings
|
||||||
MCU_SERIES = f7
|
MCU_SERIES = f7
|
||||||
@ -12,9 +14,11 @@ MICROPY_FLOAT_IMPL = double
|
|||||||
AF_FILE = boards/stm32f767_af.csv
|
AF_FILE = boards/stm32f767_af.csv
|
||||||
|
|
||||||
ifeq ($(USE_MBOOT),1)
|
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
|
LD_FILES = boards/STM32F769DISC/f769_qspi.ld
|
||||||
TEXT0_ADDR = 0x08020000
|
TEXT0_ADDR = 0x08020000
|
||||||
TEXT1_ADDR = 0x90000000
|
TEXT1_ADDR = 0x90000000
|
||||||
@ -23,17 +27,19 @@ TEXT1_SECTIONS = .text_qspi
|
|||||||
|
|
||||||
else
|
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
|
LD_FILES = boards/stm32f769.ld boards/common_blifs.ld
|
||||||
TEXT0_ADDR = 0x08020000
|
TEXT0_ADDR = 0x08020000
|
||||||
|
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
|
||||||
# When not using Mboot the ISR text goes first, then the rest after the filesystem
|
# When not using Mboot (and so no ability to load text into QSPI) all the text goes
|
||||||
LD_FILES = boards/stm32f769.ld boards/common_ifs.ld
|
# 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
|
TEXT0_ADDR = 0x08000000
|
||||||
TEXT1_ADDR = 0x08020000
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user