|
10 | 10 | #define MICROPY_HW_MCU_NAME "STM32F413"
|
11 | 11 |
|
12 | 12 | #define MICROPY_HW_HAS_SWITCH (0)
|
13 |
| -#define MICROPY_HW_HAS_FLASH (0) |
| 13 | +#define MICROPY_HW_HAS_FLASH (1) |
14 | 14 | #define MICROPY_PY_PYB_LEGACY (0)
|
15 | 15 | #define MICROPY_HW_ENTER_BOOTLOADER_VIA_RESET (0)
|
16 | 16 | #define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0)
|
|
78 | 78 | #define MICROPY_HW_BLE_BTSTACK_CHIPSET_INSTANCE btstack_chipset_cc256x_instance()
|
79 | 79 |
|
80 | 80 | // 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) |
81 | 85 | #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) |
83 | 87 | #define MICROPY_HW_SPIFLASH_CS (MICROPY_HW_SPI2_NSS)
|
84 | 88 | #define MICROPY_HW_SPIFLASH_SCK (MICROPY_HW_SPI2_SCK)
|
85 | 89 | #define MICROPY_HW_SPIFLASH_MISO (MICROPY_HW_SPI2_MISO)
|
|
89 | 93 | extern int32_t board_bdev_ioctl(void);
|
90 | 94 | extern struct _spi_bdev_t spi_bdev;
|
91 | 95 | #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) : \ |
93 | 97 | (op) == BDEV_IOCTL_INIT ? board_bdev_ioctl() : \
|
94 | 98 | spi_bdev_ioctl(&spi_bdev, (op), (arg)) \
|
95 | 99 | )
|
96 | 100 |
|
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))) |
101 | 115 |
|
102 | 116 | // Board control config
|
103 | 117 | #define MICROPY_BOARD_STARTUP board_init
|
|
0 commit comments