IMXRT1176针对不同NORFLASH的配置以及启动过程分析
IMXRT1176针对不同NORFLASH的配置以及启动过程分析
前言
上一篇讲解了IMXRT1176启动配置,这一篇将对IMXRT1176针对不同NORFLASH的配置以及启动过程分析
一、启动地址配置
在数据手册中可以看到启动配置的描述,BootROM首先读取FLEXSPI的512Byte的配置信息,地址偏移0x400,而手册System memory map (CM7)中可知,FLEXSPI的映射地址为0x3000_0000,故而启动配置地位为0x3000_0000 + 0x400 = 0x3000_0400,初始的配置时钟为30MHz,编译的linker配置文件中定义为
#define m_flash_config_start 0x30000400
#define m_flash_config_size 0x00000C00
其中手册中对启动配置的描述如下:
FLEXSPI的地址映射如下:
二、qspiflash_config配置过程分析
手册中对FCFB的描述,如下图:
可执行的HEX文件如下:
在evkmimxrt1170_flexspi_nor_config.c代码中的结构体qspiflash_config 中,对NORFLASH的配置如下:
const flexspi_nor_config_t qspiflash_config = {
.memConfig =
{
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
.csHoldTime = 3u,
.csSetupTime = 3u,
// Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
.controllerMiscOption = 0x10,
.deviceType = kFlexSpiDeviceType_SerialNOR,
.sflashPadType = kSerialFlash_4Pads,
.serialClkFreq = kFlexSpiSerialClk_80MHz,
.sflashA1Size = 64u * 1024u * 1024u,
.lookupTable =
{
//ISSI NORFLASH配置
// FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
// FLEXSPI_LUT_SEQ(MODE8_SDR, FLEXSPI_4PAD, 0x00, DUMMY_SDR, FLEXSPI_4PAD, 0x04),
// FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_4PAD, 0x04, 0, 0, 0),
//MICRON NORFLASH配置
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEC, RADDR_SDR, FLEXSPI_4PAD, 0x20),
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x0A, READ_SDR, FLEXSPI_4PAD, 0x04),
},
},
.pageSize = 256u,
.sectorSize = 4u * 1024u,
.ipcmdSerialClkFreq = 0x1,
.blockSize = 64u * 1024u,
.isUniformBlockSize = false,
};
#endif /* XIP_BOOT_HEADER_ENABLE */
可以看出首先加载TAG标志为FCFB的,对应的HEX文件中可以看到在0x3000_0400处为0x42464346,紧接着偏移4个字节,为版本信息0x56010400,对应的ASCII为V1.4.0,具体的配置如上图代码结构体中的配置
0x3000_0480处的配置则根据不同的NORFLASH进行不同的修改,否则可写入可执行文件,但无法加载运行,ISSI和MICRON则不同,ISSI的LUT的配置也就是RT176开发板的配置为
//ISSI NORFLASH配置
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
FLEXSPI_LUT_SEQ(MODE8_SDR, FLEXSPI_4PAD, 0x00, DUMMY_SDR, FLEXSPI_4PAD, 0x04),
FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_4PAD, 0x04, 0, 0, 0),
而MICRON的NORFLASH MT25QL256的LUT配置为
//MICRON NORFLASH配置
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEC, RADDR_SDR, FLEXSPI_4PAD, 0x20),
FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x0A, READ_SDR, FLEXSPI_4PAD, 0x04),
其顺序可参考FLASH手册中对应命令的读取时序
读取过程为command-address-Dummy cycles-data,其中命令为ECh,Dummy cycles为10。
总结
以上就是今天要讲的内容,本文仅仅简单的介绍了IMXRT1176针对不同的NORFLASH的配置以及启动过程分析。