Skip to content

Commit bac791c

Browse files
committed
stm32/boards/LEGO_HUB_NO6: Skip first 1MiB of SPI flash for storage.
The first 1MiB is used by the built-in bootloader and is best left as-is. Signed-off-by: Damien George <[email protected]>
1 parent e3eed26 commit bac791c

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

ports/stm32/boards/LEGO_HUB_NO6/mpconfigboard.h

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define MICROPY_HW_MCU_NAME "STM32F413"
1111

1212
#define MICROPY_HW_HAS_SWITCH (0)
13-
#define MICROPY_HW_HAS_FLASH (0)
13+
#define MICROPY_HW_HAS_FLASH (1)
1414
#define MICROPY_PY_PYB_LEGACY (0)
1515
#define MICROPY_HW_ENTER_BOOTLOADER_VIA_RESET (0)
1616
#define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0)
@@ -78,8 +78,12 @@
7878
#define MICROPY_HW_BLE_BTSTACK_CHIPSET_INSTANCE btstack_chipset_cc256x_instance()
7979

8080
// SPI flash, for R/W storage
81+
// The first 1MiB is skipped because it's used by the built-in bootloader
82+
#define MICROPY_HW_SPIFLASH_OFFSET_BYTES (1024 * 1024)
83+
#define MICROPY_HW_SPIFLASH_BLOCKMAP(bl) ((bl) + MICROPY_HW_SPIFLASH_OFFSET_BYTES / FLASH_BLOCK_SIZE)
84+
#define MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl) ((bl) + MICROPY_HW_SPIFLASH_OFFSET_BYTES / MP_SPIFLASH_ERASE_BLOCK_SIZE)
8185
#define MICROPY_HW_SPIFLASH_ENABLE_CACHE (1)
82-
#define MICROPY_HW_SPIFLASH_SIZE_BITS (256 * 1024 * 1024)
86+
#define MICROPY_HW_SPIFLASH_SIZE_BITS (256 * 1024 * 1024 - MICROPY_HW_SPIFLASH_OFFSET_BYTES * 8)
8387
#define MICROPY_HW_SPIFLASH_CS (MICROPY_HW_SPI2_NSS)
8488
#define MICROPY_HW_SPIFLASH_SCK (MICROPY_HW_SPI2_SCK)
8589
#define MICROPY_HW_SPIFLASH_MISO (MICROPY_HW_SPI2_MISO)
@@ -89,15 +93,25 @@
8993
extern int32_t board_bdev_ioctl(void);
9094
extern struct _spi_bdev_t spi_bdev;
9195
#define MICROPY_HW_BDEV_IOCTL(op, arg) ( \
92-
(op) == BDEV_IOCTL_NUM_BLOCKS ? (MICROPY_HW_SPIFLASH_SIZE_BITS / 8 / FLASH_BLOCK_SIZE - 1) : \
96+
(op) == BDEV_IOCTL_NUM_BLOCKS ? (MICROPY_HW_SPIFLASH_SIZE_BITS / 8 / FLASH_BLOCK_SIZE) : \
9397
(op) == BDEV_IOCTL_INIT ? board_bdev_ioctl() : \
9498
spi_bdev_ioctl(&spi_bdev, (op), (arg)) \
9599
)
96100

97-
// Jump over first block (bl + 1) as it is cleared by bootloader
98-
#define MICROPY_HW_BDEV_READBLOCKS(dest, bl, n) spi_bdev_readblocks(&spi_bdev, (dest), (bl + 1), (n))
99-
#define MICROPY_HW_BDEV_WRITEBLOCKS(src, bl, n) spi_bdev_writeblocks(&spi_bdev, (src), (bl + 1), (n))
100-
#define MICROPY_HW_BDEV_SPIFLASH_EXTENDED (&spi_bdev) // for extended block protocol
101+
// Configuration for stardard block protocol (block size FLASH_BLOCK_SIZE).
102+
#define MICROPY_HW_BDEV_READBLOCKS(dest, bl, n) \
103+
spi_bdev_readblocks(&spi_bdev, (dest), MICROPY_HW_SPIFLASH_BLOCKMAP(bl), (n))
104+
#define MICROPY_HW_BDEV_WRITEBLOCKS(src, bl, n) \
105+
spi_bdev_writeblocks(&spi_bdev, (src), MICROPY_HW_SPIFLASH_BLOCKMAP(bl), (n))
106+
107+
// Configuration for extended block protocol (block size MP_SPIFLASH_ERASE_BLOCK_SIZE).
108+
#define MICROPY_HW_BDEV_BLOCKSIZE_EXT (MP_SPIFLASH_ERASE_BLOCK_SIZE)
109+
#define MICROPY_HW_BDEV_READBLOCKS_EXT(dest, bl, off, len) \
110+
(spi_bdev_readblocks_raw(&spi_bdev, (dest), MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl), (off), (len)))
111+
#define MICROPY_HW_BDEV_WRITEBLOCKS_EXT(src, bl, off, len) \
112+
(spi_bdev_writeblocks_raw(&spi_bdev, (src), MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl), (off), (len)))
113+
#define MICROPY_HW_BDEV_ERASEBLOCKS_EXT(bl, len) \
114+
(spi_bdev_eraseblocks_raw(&spi_bdev, MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl), (len)))
101115

102116
// Board control config
103117
#define MICROPY_BOARD_STARTUP board_init

0 commit comments

Comments
 (0)