mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 21:11:12 +02:00
mimxrt/boards: Add flash configuration constants to mpconfigboard.mk.
And use these to initialize the LUT table properly for the various flash types. The different flash types differ by 3 parameters. Thus it is easier to just keep one copy of the qspiflash_config structure with the LUT table and update it during flash initialisation as needed. Signed-off-by: robert-hh <robert@hammelrath.com>
This commit is contained in:
@@ -425,6 +425,12 @@ endif
|
||||
ifdef MICROPY_HW_FLASH_CLK
|
||||
CFLAGS += -DMICROPY_HW_FLASH_CLK=$(MICROPY_HW_FLASH_CLK)
|
||||
endif
|
||||
ifdef MICROPY_HW_FLASH_QE_CMD
|
||||
CFLAGS += -DMICROPY_HW_FLASH_QE_CMD=$(MICROPY_HW_FLASH_QE_CMD)
|
||||
endif
|
||||
ifdef MICROPY_HW_FLASH_QE_ARG
|
||||
CFLAGS += -DMICROPY_HW_FLASH_QE_ARG=$(MICROPY_HW_FLASH_QE_ARG)
|
||||
endif
|
||||
|
||||
CFLAGS += $(CFLAGS_EXTRA)
|
||||
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1011DAE5A
|
||||
MICROPY_FLOAT_IMPL = single
|
||||
MICROPY_HW_FLASH_TYPE ?= qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE ?= 0x800000 # 8MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
MICROPY_PY_NETWORK_NINAW10 ?= 1
|
||||
MICROPY_PY_SSL ?= 1
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1011DAE5A
|
||||
MICROPY_FLOAT_IMPL = single
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x1000000 # 16MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
USE_UF2_BOOTLOADER = 1
|
||||
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1015DAF5A
|
||||
MICROPY_FLOAT_IMPL = single
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x1000000 # 16MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
MICROPY_BOOT_BUFFER_SIZE = (32 * 1024)
|
||||
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1021DAG5A
|
||||
MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x01
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x40
|
||||
|
||||
MICROPY_HW_SDRAM_AVAIL = 1
|
||||
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB
|
||||
|
@@ -7,6 +7,9 @@ MICROPY_HW_FLASH_SIZE = 0x4000000 # 64MB
|
||||
|
||||
MICROPY_HW_SDRAM_AVAIL = 1
|
||||
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x01
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x40
|
||||
|
||||
MICROPY_PY_LWIP = 1
|
||||
MICROPY_PY_SSL = 1
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1062DVJ6A
|
||||
MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x01
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x40
|
||||
|
||||
MICROPY_HW_SDRAM_AVAIL = 1
|
||||
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1064DVL6A
|
||||
MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE = internal
|
||||
MICROPY_HW_FLASH_SIZE = 0x400000 # 4MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
MICROPY_HW_SDRAM_AVAIL = 1
|
||||
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB
|
||||
|
@@ -6,6 +6,9 @@ MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE ?= qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE ?= 0x1000000 # 16MB
|
||||
MICROPY_HW_FLASH_RESERVED ?= 0x100000 # 1MB CM4 Code address space
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
MICROPY_HW_SDRAM_AVAIL = 1
|
||||
MICROPY_HW_SDRAM_SIZE = 0x4000000 # 64MB
|
||||
|
@@ -5,6 +5,9 @@ MICROPY_FLOAT_IMPL = single
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x200000 # 2MB
|
||||
MICROPY_HW_FLASH_RESERVED ?= 0x1000 # 4KB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x01
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x40
|
||||
|
||||
USE_UF2_BOOTLOADER = 1
|
||||
|
||||
|
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1052DVL6B
|
||||
MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x01
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x40
|
||||
|
||||
MICROPY_HW_SDRAM_AVAIL = 1
|
||||
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB
|
||||
|
@@ -5,6 +5,9 @@ MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x200000 # 2MB
|
||||
MICROPY_HW_FLASH_RESERVED ?= 0x1000 # 4KB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
USE_UF2_BOOTLOADER = 1
|
||||
|
||||
|
@@ -5,6 +5,9 @@ MICROPY_FLOAT_IMPL = double
|
||||
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
|
||||
MICROPY_HW_FLASH_RESERVED ?= 0x1000 # 4KB
|
||||
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
|
||||
MICROPY_HW_FLASH_QE_CMD = 0x31
|
||||
MICROPY_HW_FLASH_QE_ARG = 0x02
|
||||
|
||||
MICROPY_PY_LWIP = 1
|
||||
MICROPY_PY_SSL = 1
|
||||
|
@@ -75,7 +75,7 @@
|
||||
(FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
|
||||
FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
|
||||
|
||||
#define EMPTY_LUT \
|
||||
#define EMPTY_LUT_SEQ \
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), \
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), \
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), \
|
||||
|
@@ -46,11 +46,23 @@ uint32_t LUT_pageprogram_quad[4] = {
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
};
|
||||
|
||||
uint32_t LUT_write_status[4] = {
|
||||
// 4 Write status word for Quad mode
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, MICROPY_HW_FLASH_QE_CMD, WRITE_SDR, FLEXSPI_1PAD, 0x01),
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
};
|
||||
|
||||
void flexspi_nor_update_lut(void) {
|
||||
uint32_t lookuptable_copy[64];
|
||||
memcpy(lookuptable_copy, (const uint32_t *)&qspiflash_config.memConfig.lookupTable, 64 * sizeof(uint32_t));
|
||||
// write WRITESTATUSREG code to entry 10
|
||||
memcpy(&lookuptable_copy[NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG * 4],
|
||||
LUT_write_status, 4 * sizeof(uint32_t));
|
||||
// write PAGEPROGRAM_QUAD code to entry 10
|
||||
memcpy(&lookuptable_copy[10 * 4], LUT_pageprogram_quad, 4 * sizeof(uint32_t));
|
||||
memcpy(&lookuptable_copy[NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD * 4],
|
||||
LUT_pageprogram_quad, 4 * sizeof(uint32_t));
|
||||
FLEXSPI_UpdateLUT(BOARD_FLEX_SPI, 0, lookuptable_copy, 64);
|
||||
}
|
||||
|
||||
@@ -123,7 +135,7 @@ status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) __attribute__((section
|
||||
status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) {
|
||||
flexspi_transfer_t flashXfer;
|
||||
status_t status;
|
||||
uint32_t writeValue = qspiflash_config.memConfig.deviceModeArg;
|
||||
uint32_t writeValue = MICROPY_HW_FLASH_QE_ARG;
|
||||
|
||||
/* Write enable */
|
||||
status = flexspi_nor_write_enable(base, 0);
|
||||
|
@@ -47,6 +47,7 @@ extern flexspi_nor_config_t qspiflash_config;
|
||||
status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId);
|
||||
status_t flexspi_nor_init(void);
|
||||
void flexspi_nor_update_lut(void);
|
||||
status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base);
|
||||
status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address);
|
||||
status_t flexspi_nor_flash_erase_block(FLEXSPI_Type *base, uint32_t address);
|
||||
status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size);
|
||||
|
@@ -48,7 +48,7 @@ const flexspi_nor_config_t qspiflash_config = {
|
||||
.seqId = 4u,
|
||||
.seqNum = 1u,
|
||||
},
|
||||
.deviceModeArg = 0x40,
|
||||
.deviceModeArg = MICROPY_HW_FLASH_QE_ARG,
|
||||
.deviceType = kFlexSpiDeviceType_SerialNOR,
|
||||
.sflashPadType = kSerialFlash_4Pads,
|
||||
.serialClkFreq = MICROPY_HW_FLASH_CLK,
|
||||
@@ -68,10 +68,7 @@ const flexspi_nor_config_t qspiflash_config = {
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
|
||||
// 2 Read extend parameters
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
EMPTY_LUT_SEQ
|
||||
|
||||
// 3 Write Enable
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
|
||||
@@ -80,7 +77,7 @@ const flexspi_nor_config_t qspiflash_config = {
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
|
||||
// 4 Write Status Reg
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x01),
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, MICROPY_HW_FLASH_QE_CMD, WRITE_SDR, FLEXSPI_1PAD, 0x01),
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
@@ -92,16 +89,10 @@ const flexspi_nor_config_t qspiflash_config = {
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
|
||||
// 6 Fast read quad mode - SDR
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 24),
|
||||
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
EMPTY_LUT_SEQ
|
||||
|
||||
// 7 Read ID
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
|
||||
FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
EMPTY_LUT_SEQ
|
||||
|
||||
// 8 Erase Block (32k)
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x52, RADDR_SDR, FLEXSPI_1PAD, 24),
|
||||
@@ -127,14 +118,17 @@ const flexspi_nor_config_t qspiflash_config = {
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
|
||||
// 12 Empty LUT
|
||||
EMPTY_LUT
|
||||
// 12 Not used
|
||||
EMPTY_LUT_SEQ
|
||||
|
||||
// 13 READ SDFP
|
||||
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x5A, RADDR_SDR, FLEXSPI_1PAD, 24),
|
||||
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_1PAD, 8, READ_SDR, FLEXSPI_1PAD, 0x04),
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
|
||||
EMPTY_LUT_SEQ
|
||||
|
||||
// 14 Not used
|
||||
EMPTY_LUT_SEQ
|
||||
|
||||
// 15 Not used
|
||||
EMPTY_LUT_SEQ
|
||||
},
|
||||
},
|
||||
.pageSize = 256u,
|
||||
|
Reference in New Issue
Block a user