IMXRT1176针对不同NORFLASH的配置以及启动过程分析

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的地址映射如下:
FLEXSPI地址映射

二、qspiflash_config配置过程分析

手册中对FCFB的描述,如下图:
FCFB配置
可执行的HEX文件如下:

可执行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手册中对应命令的读取时序
FLASH读取时序
读取过程为command-address-Dummy cycles-data,其中命令为ECh,Dummy cycles为10。
FLASH配置参数


总结

以上就是今天要讲的内容,本文仅仅简单的介绍了IMXRT1176针对不同的NORFLASH的配置以及启动过程分析。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值