你好
在 EVK 上,我试用了 SDK 25.03.00 中的 evkmimxrt1020_fsl_romapi 示例,它工作正常。
然后,我自己在另一个项目中进行了尝试。它失败了。
ROM_FLEXSPI_NorFlash_Erase() 返回 6001,表示 kStatus_ROM_FLEXSPI_InvalidSequence。
我不知道是哪个顺序。
这两个项目使用完全相同的结构:
config->memConfig.tag = FLEXSPI_CFG_BLK_TAG;
config->memConfig.version = FLEXSPI_CFG_BLK_VERSION;
config->memConfig.readSampleClksrc=kFLEXSPIReadSampleClk_LoopbackInternally;
config->memConfig.serialClkFreq =
kFLEXSPISerialClk_30MHz; /* Serial Flash Frequencey.See System Boot Chapter for more details */
config->memConfig.sflashA1Size = FLASH_SIZE;
config->memConfig.csHoldTime = 3U; /* Data hold time, default value: 3 */
config->memConfig.csSetupTime = 3U; /* Date setup time, default value: 3 */
config->memConfig.deviceType = kFLEXSPIDeviceType_SerialNOR; /* Flash device type default type: Serial NOR */
config->memConfig.deviceModeType = kDeviceConfigCmdType_Generic;
config->memConfig.columnAddressWidth = 0U;
config->memConfig.deviceModeCfgEnable = 0U;
config->memConfig.waitTimeCfgCommands = 0U;
config->memConfig.configCmdEnable = 0U;
/* Always enable Safe configuration Frequency */
config->memConfig.controllerMiscOption = FSL_ROM_FLEXSPI_BITMASK(kFLEXSPIMiscOffset_SafeConfigFreqEnable);
config->memConfig.sflashPadType = kSerialFlash_4Pads; /* Pad Type: 1 - Single, 2 - Dual, 4 - Quad, 8 - Octal */
config->pageSize = FLASH_PAGE_SIZE;
config->sectorSize = FLASH_SECTOR_SIZE;
config->blockSize = FLASH_BLOCK_SIZE;
config->ipcmdSerialClkFreq = kFLEXSPISerialClk_30MHz; /* Clock frequency for IP command */
/* Fast Read Quad I/O */
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_READ + 0U] =
FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xebU, RADDR_SDR, FLEXSPI_4PAD, 0x18U);
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_READ + 1U] =
FSL_ROM_FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06U, READ_SDR, FLEXSPI_4PAD, 0x4U);
/* Read Status */
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_READSTATUS] =
FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05U, READ_SDR, FLEXSPI_1PAD, 0x1U);
/* Write Enable */
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_WRITEENABLE] =
FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06U, STOP, FLEXSPI_1PAD, 0x0U);
/* Page Program - quad mode */
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 0U] =
FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32U, RADDR_SDR, FLEXSPI_1PAD, 0x18U);
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM + 1U] =
FSL_ROM_FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_4PAD, 0x04U, STOP, FLEXSPI_1PAD, 0x0U);
/* Sector Erase */
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =
FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD7U, RADDR_SDR, FLEXSPI_1PAD, 0x18U);
/* Block Erase */
config->memConfig.lookupTable[4U * NOR_CMD_LUT_SEQ_IDX_ERASEBLOCK] =
FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD8U, RADDR_SDR, FLEXSPI_1PAD, 0x18U);此外,在这两个项目中,我在调用 ROM_FLEXSPI_NorFlash_Erase() 之前立即验证了 LUT。这些值完全匹配(我还打印了未打包的值):
0: a1804eb - 1 0 eb - 2 2 18
1: 26043206 - c 2 6 - 9 2 4
2: 0 - 0 0 0 - 0 0 0
3: 0 - 0 0 0 - 0 0 0
4: 406 - 1 0 6 - 0 0 0
5: 0 - 0 0 0 - 0 0 0
6: 0 - 0 0 0 - 0 0 0
7: 0 - 0 0 0 - 0 0 0
8: d33e7f5c - 1f 3 5c - 34 3 3e
9: 450ef151 - 3c 1 51 - 11 1 e
10: 46d155d4 - 15 1 d4 - 11 2 d1
11: 73a1e822 - 3a 0 22 - 1c 3 a1
12: 47bf75f6 - 1d 1 f6 - 11 3 bf
13: a1f5786b - 1e 0 6b - 28 1 f5
14: ed50a7ab - 29 3 ab - 3b 1 50
15: fdf85725 - 15 3 25 - 3f 1 f8
16: 3de09612 - 25 2 12 - f 1 e0
17: 73b47a1d - 1e 2 1d - 1c 3 b4
18: 5cd51237 - 4 2 37 - 17 0 d5
19: 86c0494b - 12 1 4b - 21 2 c0
20: 36343fa5 - f 3 a5 - d 2 34
21: 60d6ddf4 - 37 1 f4 - 18 0 d6
22: fa5745bf - 11 1 bf - 3e 2 57
23: 45fbf74d - 3d 3 4d - 11 1 fb
24: 755471dc - 1c 1 dc - 1d 1 54
25: d5a578c4 - 1e 0 c4 - 35 1 a5
26: 11330943 - 2 1 43 - 4 1 33
27: de5431f6 - c 1 f6 - 37 2 54
28: 2404049f - 1 0 9f - 9 0 4
29: 0 - 0 0 0 - 0 0 0
30: 0 - 0 0 0 - 0 0 0
31: 0 - 0 0 0 - 0 0 0
32: 81750f57 - 3 3 57 - 20 1 75
33: c25ccbf0 - 32 3 f0 - 30 2 5c
34: 8235cd11 - 33 1 11 - 20 2 35
35: 107dccd7 - 33 0 d7 - 4 0 7d
36: c3dde31f - 38 3 1f - 30 3 dd
37: 52185d05 - 17 1 5 - 14 2 18
38: c558911f - 24 1 1f - 31 1 58
39: 6d076d06 - 1b 1 6 - 1b 1 7
40: ad5b6f74 - 1b 3 74 - 2b 1 5b
41: c5d5fe5e - 3f 2 5e - 31 1 d5
42: 80654f09 - 13 3 9 - 20 0 65
43: 407951c6 - 14 1 c6 - 10 0 79
44: b456e9a3 - 3a 1 a3 - 2d 0 56
45: 41a8df34 - 37 3 34 - 10 1 a8
46: f31f6b95 - 1a 3 95 - 3c 3 1f
47: 87dddb44 - 36 3 44 - 21 3 dd
48: 3d917153 - 1c 1 53 - f 1 91
49: 1d205437 - 15 0 37 - 7 1 20
50: 48256685 - 19 2 85 - 12 0 25
51: 546d7544 - 1d 1 44 - 15 0 6d
52: 75741a5c - 6 2 5c - 1d 1 74
53: 7115f5fd - 3d 1 fd - 1c 1 15
54: 4cdff553 - 3d 1 53 - 13 0 df
55: 27c647eb - 11 3 eb - 9 3 c6
56: 7e4c0413 - 1 0 13 - 1f 2 4c
57: 303f0784 - 1 3 84 - c 0 3f
58: 25f045b8 - 11 1 b8 - 9 1 f0
59: a5898157 - 20 1 57 - 29 1 89
60: 4715e747 - 39 3 47 - 11 3 15
61: 554858c4 - 16 0 c4 - 15 1 48
62: cd44c644 - 31 2 44 - 33 1 44
63: 50597dd9 - 1f 1 d9 - 14 0 59
我深信一定存在差异,但我已不知道该去哪里寻找。
两个项目都在 RAM 中运行,时钟配置完全相同。
我应该把问题的重点放在哪里?
此致问候
最大值
您好@Sam_Gao
我解决了它。问题出在错误的擦除地址上,但错误代码kStatus_ROM_FLEXSPI_InvalidSequence却让我想到了一个完全不同类型的问题,因此我在相当长的一段时间里都把注意力放在了错误的事情上。
顺祝商祺!
最大值
https://mcuxpresso.nxp.com/api_doc/dev/4490/a00017.html#ga05dc3f1fb8704a958f48f18ad04c2f0f
这似乎是无效序列中的一些问题。我能知道这两个项目是否都来自恩智浦的官方示例,并在同一个EVK板上为你进行了测试吗?