IMXRT1176启动过程以及相关配置参数分析

IMXRT1176启动过程以及相关配置参数分析

IMXRT1176启动过程以及相关配置参数分析


前言

上一篇讲解了IMXRT1176针对不同NORFLASH的配置以及启动过程分析,这一篇针对IMXRT1176启动过程以及相关配置参数分析


一、FCFB

从可执行的Image或者HEX文件中可以看到,IMXRT1176启动首先加载FCFB
可执行HEX文件
首先加载TAG标志为FCFB的,对应的HEX文件中可以看到在0x3000_0400处为0x42464346,紧接着偏移4个字节,为版本信息0x56010400,对应的ASCII为V1.4.0
FCFB配置
在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 */

二、IVT(image_vector_table)

IVT放在地址的0x30001000中,大小为32Byte,编译的linker配置文件中定义为

#define m_ivt_start                    0x30001000
#define m_ivt_size                     0x00001000

手册中可以看到IVT头格式如下:
IVT头格式
TAG为0xD1,Length为0x2000,Verison为41,接着为App 的 entrypointAddress为0x30002415,运行startup_mimxrt1176_cm7.s进入Reset_Handler
Image中IVT Header的配置如下:
IVT
fsl_flexspi_nor_boot.h中对IVT_HEADER的配置

#define IVT_MAJOR_VERSION       0x4
#define IVT_MAJOR_VERSION_SHIFT 0x4
#define IVT_MAJOR_VERSION_MASK  0xF
#define IVT_MINOR_VERSION       0x1
#define IVT_MINOR_VERSION_SHIFT 0x0
#define IVT_MINOR_VERSION_MASK  0xF

#define IVT_VERSION(major, minor)                                    \
    ((((major)&IVT_MAJOR_VERSION_MASK) << IVT_MAJOR_VERSION_SHIFT) | \
     (((minor)&IVT_MINOR_VERSION_MASK) << IVT_MINOR_VERSION_SHIFT))

/* IVT header */
#define IVT_TAG_HEADER 0xD1 /**< Image Vector Table */
#define IVT_SIZE       0x2000
#define IVT_PAR        IVT_VERSION(IVT_MAJOR_VERSION, IVT_MINOR_VERSION)
#define IVT_HEADER     (IVT_TAG_HEADER | (IVT_SIZE << 8) | (IVT_PAR << 24))

fsl_flexspi_nor_boot.c中IVT结构体以及入口地址的描述如下:

/*************************************
 *  IVT Data
 *************************************/
const ivt image_vector_table = {
    IVT_HEADER,                    /* IVT Header */
    IMAGE_ENTRY_ADDRESS,           /* Image Entry Function */
    IVT_RSVD,                      /* Reserved = 0 */
    (uint32_t)DCD_ADDRESS,         /* Address where DCD information is stored */
    (uint32_t)BOOT_DATA_ADDRESS,   /* Address where BOOT Data Structure is stored */
    (uint32_t)IVT_ADDRESS,         /* Pointer to IVT Self (absolute address) */
    (uint32_t)CSF_ADDRESS,         /* Address where CSF file is stored */
    IVT_RSVD                       /* Reserved = 0 */
};

三、Boot Date

Boot Date的存放地址为0x30001020,大小为16Byte
手册中Boot Data的格式如下:
Boot Date格式
Image中Boot Date的配置如下:
Boot Date
开始地址为0x30000000,大小为0x10000000
fsl_flexspi_nor_boot.c中Boot Data的结构体描述如下:

/*************************************
 *  Boot Data
 *************************************/
const BOOT_DATA_T boot_data = {
    BOOT_IMAGE_BASE,  /* boot start location */
    BOOT_IMAGE_SIZE,  /* size */
    PLUGIN_FLAG, /* Plugin flag*/
    0xFFFFFFFFU  /* empty - extra data word */
};

总结

以上就是IMXRT1176启动过程以及相关配置参数分析,通过以上配置和参数的读取,读取成功后将正式加载程序的运行,以上是XIP的方式,无需配置DCD参数,DCD参数用于SDRAM的参数配置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值