8000 mimxrt/boards: Add flash configuration constants to mpconfigboard.mk. · micropython/micropython@feddf6e · GitHub
[go: up one dir, main page]

Skip to content

Commit feddf6e

Browse files
committed
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>
1 parent dfc9675 commit feddf6e

File tree

17 files changed

+72
-23
lines changed

17 files changed

+72
-23
lines changed

ports/mimxrt/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,12 @@ endif
425425
ifdef MICROPY_HW_FLASH_CLK
426426
CFLAGS += -DMICROPY_HW_FLASH_CLK=$(MICROPY_HW_FLASH_CLK)
427427
endif
428+
ifdef MICROPY_HW_FLASH_QE_CMD
429+
CFLAGS += -DMICROPY_HW_FLASH_QE_CMD=$(MICROPY_HW_FLASH_QE_CMD)
430+
endif
431+
ifdef MICROPY_HW_FLASH_QE_ARG
432+
CFLAGS += -DMICROPY_HW_FLASH_QE_ARG=$(MICROPY_HW_FLASH_QE_ARG)
433+
endif
428434

429435
CFLAGS += $(CFLAGS_EXTRA)
430436

ports/mimxrt/boards/ADAFRUIT_METRO_M7/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1011DAE5A
44< 67E6 code class="diff-text syntax-highlighted-line">
MICROPY_FLOAT_IMPL = single
55
MICROPY_HW_FLASH_TYPE ?= qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE ?= 0x800000 # 8MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x31
9+
MICROPY_HW_FLASH_QE_ARG = 0x02
710

811
MICROPY_PY_NETWORK_NINAW10 ?= 1
912
MICROPY_PY_SSL ?= 1

ports/mimxrt/boards/MIMXRT1010_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1011DAE5A
44
MICROPY_FLOAT_IMPL = single
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x1000000 # 16MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x31
9+
MICROPY_HW_FLASH_QE_ARG = 0x02
710

811
USE_UF2_BOOTLOADER = 1
912

ports/mimxrt/boards/MIMXRT1015_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1015DAF5A
44
MICROPY_FLOAT_IMPL = single
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x1000000 # 16MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x31
9+
MICROPY_HW_FLASH_QE_ARG = 0x02
710

811
MICROPY_BOOT_BUFFER_SIZE = (32 * 1024)
912

ports/mimxrt/boards/MIMXRT1020_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1021DAG5A
44
MICROPY_FLOAT_IMPL = double
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x01
9+
MICROPY_HW_FLASH_QE_ARG = 0x40
710

811
MICROPY_HW_SDRAM_AVAIL = 1
912
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB

ports/mimxrt/boards/MIMXRT1050_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ MICROPY_HW_FLASH_SIZE = 0x4000000 # 64MB
77

88
MICROPY_HW_SDRAM_AVAIL = 1
99
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB
10+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
11+
MICROPY_HW_FLASH_QE_CMD = 0x01
12+
MICROPY_HW_FLASH_QE_ARG = 0x40
1013

1114
MICROPY_PY_LWIP = 1
1215
MICROPY_PY_SSL = 1

ports/mimxrt/boards/MIMXRT1060_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1062DVJ6A
44
MICROPY_FLOAT_IMPL = double
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x01
9+
MICROPY_HW_FLASH_QE_ARG = 0x40
710

811
MICROPY_HW_SDRAM_AVAIL = 1
912
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB

ports/mimxrt/boards/MIMXRT1064_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1064DVL6A
44
MICROPY_FLOAT_IMPL = double
55
MICROPY_HW_FLASH_TYPE = internal
66
MICROPY_HW_FLASH_SIZE = 0x400000 # 4MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x31
9+
MICROPY_HW_FLASH_QE_ARG = 0x02
710

811
MICROPY_HW_SDRAM_AVAIL = 1
912
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB

ports/mimxrt/boards/MIMXRT1170_EVK/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ MICROPY_FLOAT_IMPL = double
66
MICROPY_HW_FLASH_TYPE ?= qspi_nor_flash
77
MICROPY_HW_FLASH_SIZE ?= 0x1000000 # 16MB
88
MICROPY_HW_FLASH_RESERVED ?= 0x100000 # 1MB CM4 Code address space
9+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
10+
MICROPY_HW_FLASH_QE_CMD = 0x31
11+
MICROPY_HW_FLASH_QE_ARG = 0x02
912

1013
MICROPY_HW_SDRAM_AVAIL = 1
1114
MICROPY_HW_SDRAM_SIZE = 0x4000000 # 64MB

ports/mimxrt/boards/OLIMEX_RT1010/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ MICROPY_FLOAT_IMPL = single
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x200000 # 2MB
77
MICROPY_HW_FLASH_RESERVED ?= 0x1000 # 4KB
8+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_100MHz
9+
MICROPY_HW_FLASH_QE_CMD = 0x01
10+
MICROPY_HW_FLASH_QE_ARG = 0x40
811

912
USE_UF2_BOOTLOADER = 1
1013

ports/mimxrt/boards/SEEED_ARCH_MIX/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MCU_VARIANT = MIMXRT1052DVL6B
44
MICROPY_FLOAT_IMPL = double
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
7+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
8+
MICROPY_HW_FLASH_QE_CMD = 0x01
9+
MICROPY_HW_FLASH_QE_ARG = 0x40
710

811
MICROPY_HW_SDRAM_AVAIL = 1
912
MICROPY_HW_SDRAM_SIZE = 0x2000000 # 32MB

ports/mimxrt/boards/TEENSY40/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ MICROPY_FLOAT_IMPL = double
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x200000 # 2MB
77
MICROPY_HW_FLASH_RESERVED ?= 0x1000 # 4KB
8+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
9+
MICROPY_HW_FLASH_QE_CMD = 0x31
10+
MICROPY_HW_FLASH_QE_ARG = 0x02
811

912
USE_UF2_BOOTLOADER = 1
1013

ports/mimxrt/boards/TEENSY41/mpconfigboard.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ MICROPY_FLOAT_IMPL = double
55
MICROPY_HW_FLASH_TYPE = qspi_nor_flash
66
MICROPY_HW_FLASH_SIZE = 0x800000 # 8MB
77
MICROPY_HW_FLASH_RESERVE F438 D ?= 0x1000 # 4KB
8+
MICROPY_HW_FLASH_CLK = kFlexSpiSerialClk_133MHz
9+
MICROPY_HW_FLASH_QE_CMD = 0x31
10+
MICROPY_HW_FLASH_QE_ARG = 0x02
811

912
MICROPY_PY_LWIP = 1
1013
MICROPY_PY_SSL = 1

ports/mimxrt/hal/flexspi_flash_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
(FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
7676
FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
7777

78-
#define EMPTY_LUT \
78+
#define EMPTY_LUT_SEQ \
7979
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), \
8080
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), \
8181
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), \

ports/mimxrt/hal/flexspi_nor_flash.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,23 @@ uint32_t LUT_pageprogram_quad[4] = {
4646
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
4747
};
4848

49+
uint32_t LUT_write_status[4] = {
50+
// 4 Write status word for Quad mode
51+
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, MICROPY_HW_FLASH_QE_CMD, WRITE_SDR, FLEXSPI_1PAD, 0x01),
52+
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
53+
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
54+
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
55+
};
56+
4957
void flexspi_nor_update_lut< 10000 /span>(void) {
5058
uint32_t lookuptable_copy[64];
5159
memcpy(lookuptable_copy, (const uint32_t *)&qspiflash_config.memConfig.lookupTable, 64 * sizeof(uint32_t));
60+
// write WRITESTATUSREG code to entry 10
61+
memcpy(&lookuptable_copy[NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG * 4],
62+
LUT_write_status, 4 * sizeof(uint32_t));
5263
// write PAGEPROGRAM_QUAD code to entry 10
53-
memcpy(&lookuptable_copy[10 * 4], LUT_pageprogram_quad, 4 * sizeof(uint32_t));
64+
memcpy(&lookuptable_copy[NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD * 4],
65+
LUT_pageprogram_quad, 4 * sizeof(uint32_t));
5466
FLEXSPI_UpdateLUT(BOARD_FLEX_SPI, 0, lookuptable_copy, 64);
5567
}
5668

@@ -123,7 +135,7 @@ status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) __attribute__((section
123135
status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base) {
124136
flexspi_transfer_t flashXfer;
125137
status_t status;
126-
uint32_t writeValue = qspiflash_config.memConfig.deviceModeArg;
138+
uint32_t writeValue = MICROPY_HW_FLASH_QE_ARG;
127139

128140
/* Write enable */
129141
status = flexspi_nor_write_enable(base, 0);

ports/mimxrt/hal/flexspi_nor_flash.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ extern flexspi_nor_config_t qspiflash_config;
4747
status_t flexspi_nor_get_vendor_id(FLEXSPI_Type *base, uint8_t *vendorId);
4848
status_t flexspi_nor_init(void);
4949
void flexspi_nor_update_lut(void);
50+
status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type *base);
5051
status_t flexspi_nor_flash_erase_sector(FLEXSPI_Type *base, uint32_t address);
5152
status_t flexspi_nor_flash_erase_block(FLEXSPI_Type *base, uint32_t address);
5253
status_t flexspi_nor_flash_page_program(FLEXSPI_Type *base, uint32_t address, const uint32_t *src, uint32_t size);

ports/mimxrt/hal/qspi_nor_flash_config.c

Lines changed: 14 additions 10000 & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const flexspi_nor_config_t qspiflash_config = {
4848
.seqId = 4u,
4949
.seqNum = 1u,
5050
},
51-
.deviceModeArg = 0x40,
51+
.deviceModeArg = MICROPY_HW_FLASH_QE_ARG,
5252
.deviceType = kFlexSpiDeviceType_SerialNOR,
5353
.sflashPadType = kSerialFlash_4Pads,
5454
.serialClkFreq = MICROPY_HW_FLASH_CLK,
@@ -68,10 +68,7 @@ const flexspi_nor_config_t qspiflash_config = {
6868
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
6969

7070
// 2 Read extend parameters
71-
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x81, READ_SDR, FLEXSPI_1PAD, 0x04),
72-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
73-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
74-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
71+
EMPTY_LUT_SEQ
7572

7673
// 3 Write Enable
7774
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),
@@ -80,7 +77,7 @@ const flexspi_nor_config_t qspiflash_config = {
8077
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
8178

8279
// 4 Write Status Reg
83-
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, WRITE_SDR, FLEXSPI_1PAD, 0x01),
80+
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, MICROPY_HW_FLASH_QE_CMD, WRITE_SDR, FLEXSPI_1PAD, 0x01),
8481
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
8582
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
8683
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
@@ -92,16 +89,10 @@ const flexspi_nor_config_t qspiflash_config = {
9289
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
9390

9491
// 6 Fast read quad mode - SDR
95-
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_1PAD, 24),
96-
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x08, READ_SDR, FLEXSPI_4PAD, 0x04),
97-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
98-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
92+
EMPTY_LUT_SEQ
9993

10094
// 7 Read ID
101-
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x90, DUMMY_SDR, FLEXSPI_1PAD, 24),
102-
FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_1PAD, 0x00, 0, 0, 0),
103-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
104-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
95+
EMPTY_LUT_SEQ
10596

10697
// 8 Erase Block (32k)
10798
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x52, RADDR_SDR, FLEXSPI_1PAD, 24),
@@ -127,14 +118,17 @@ const flexspi_nor_config_t qspiflash_config = {
127118
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
128119
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
129120

130-
// 12 Empty LUT
131-
EMPTY_LUT
121+
// 12 Not used
122+
EMPTY_LUT_SEQ
132123

133124
// 13 READ SDFP
134-
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x5A, RADDR_SDR, FLEXSPI_1PAD, 24),
135-
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_1PAD, 8, READ_SDR, FLEXSPI_1PAD, 0x04),
136-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
137-
FLEXSPI_LUT_SEQ(0, 0, 0, 0, 0, 0), // Filler
125+
EMPTY_LUT_SEQ
126+
127+
// 14 Not used
128+
EMPTY_LUT_SEQ
129+
130+
// 15 Not used
131+
EMPTY_LUT_SEQ
138132
},
139133
},
140134
.pageSize = 256u,

0 commit comments

Comments
 (0)
0