大家好,
我们刚刚获得了自己设计的第一个原型,其中包含以下组件:
- MCU 是 MIMXRT1061CVL5B
- 闪存是连接到 QSPI1 的微芯片 SST26VF064B
- J-link SWD 用于调试
项目是用 MCUXpresso IDE 构建的。
构建的基础知识取自 MIMXRT1060-EVKB-DEVKIT 示例,设备更改为 1061,evkmimxrt1060_flexspi_nor_config.c 如下所示:
const flexspi_nor_config_t qspiflash_config = {
.memConfig =
{
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClksrc=kFlexSPIReadSampleClk_LoopbackInternally,
.csHold
time = 3u,
.csSetupTime = 3u,
.controllerMiscOption = (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable),
.deviceType = kFlexSpiDeviceType_SerialNOR,
.sflashPadType = kSerialFlash_4
pads,
.serialClkFreq = kFlexSpiSerialClk_80MHz,
.sflashA1Size = 8u * 1024u * 1024u,
.lookupTable =
{
// Read LUTs
[0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18), // SPI Quad I/O Read: EBH, 24bit address
[1] = FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04), // 6 dummy cycles, read data in 4 bit blocks
// Read Status LUTs
[4 * 1 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04), // Read-Status Register : 05H,
// Write Enable LUTs
[4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x0), // Write-Enable: 06H
// Erase Sector LUTs
[4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 0x18), // Sector-Erase:20H, 24bit address
// Erase Block LUTs
[4 * 8 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD8, RADDR_SDR, FLEXSPI_1PAD, 0x18), // Block-Erase: D8H, 24bit address
// Pape Program LUTs
[4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 0x18), // Page-Program: 02H, 24bit address
[4 * 9 + 1] = FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0), // Write bytes. Stop.
// Erase Chip LUTs
[4 * 11 + 0] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xC7, STOP, FLEXSPI_1PAD, 0x0), // Chip-Erase: C7H
},
},
.pageSize = 256u,
.sectorSize = 4u * 1024u,
.ipcmdSerialClkFreq = 1u,
.blockSize = 64u * 1024u,
.isUniformBlockSize = false,
};
MCU 启动并运行,我们可以使用 J-link 调试器运行链接在 SRAM 中的测试软件。
J-link 将位于 FLASH 的应用程序下载到设备,但问题开始了:
- 在调试器配置中,我们选择 NOT to reset the target before running。
- 调试器进入 main 中的断点,我们可以执行几个第一次调用,直到我们结束“deadbeef”。
复位后 MCU 不启动到 FLASH 应用程序。
当运行稍微修改过的
evkmimxrt1060_flash_component_nor示例时,我们可以看到至少应用程序的第一段已正确加载到 FLASH。
这证明 FLASH 接口的写入/读取是有效的。
在选择
Generate unsigned Bootable image时使用NXP MCU Boot Utility工具,该工具显示警告“
Invalid vector address found in image file: gen\user_file\proto0.srec ”,但这实际上并没有告诉我们那里出了什么问题。我们无法测试通过 USB 加载应用程序,因为 USB 连接似乎存在一些问题,仍在检查原因。
欢迎任何好的提示,无法从 FLASH 运行应用程序确实会停止我们的测试工作。
NXP MCU Boot Utility
警告是什么意思?查看映射文件,至少二进制文件开头的地址似乎与从 SDK 示例生成的地址相同。
提前谢谢你,
朱卡
顺便说一句:从来没有真正理解
NXP MCU 启动实用程序的FlexSPI NOR 设备配置窗口应该如何工作:如果我在那里选择 Microchip_SST26VFxxxB
,任何地方都没有改变,文件夹gen\bootable_image中生成的二进制映像的开头看起来仍然与它们最初是由 MCUXpresso 生成的。