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的参数配置。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: i.MXRT1176是一款高性能的处理器,支持多种外设接口,其中包括Mipi-CSI2接口和UVC功能。 Mipi-CSI2是一种用于传输摄像头数据的串行接口标准。它可以实现高速、低功耗的数据传输,广泛应用于移动设备和嵌入式系统中。i.MXRT1176的Mipi-CSI2接口可以与兼容的摄像头模块进行连接,以便从摄像头获取图像数据。 UVC(USB Video Class)是一种用于通过USB接口传输视频数据的标准。它可以让USB设备(例如计算机或其他支持UVC的设备)直接识别和使用摄像头,简化了设备之间的连接和通信。i.MXRT1176的UVC功能可以将通过Mipi-CSI2接口获取的摄像头数据转换为符合UVC标准的视频流,以便被连接的设备进行识别和使用。 通过i.MXRT1176的Mipi-CSI2 to UVC功能,我们可以方便地将摄像头模块的图像数据转换为USB视频流,实现将摄像头接口扩展到支持UVC的设备,如计算机、智能电视等。这样,我们可以方便地将摄像头用于视频通信、图像采集和人机互动等应用领域。 总之,i.MXRT1176的Mipi-CSI2 to UVC功能提供了一种简单、高效的解决方案,使得摄像头数据可以通过USB接口直接传输给其他设备,为视频应用的开发和应用提供了更多的可能性。 ### 回答2: IMXRT1176 是恩智浦(NXP)公司推出的一款高性能 Arm Cortex-M7 微控制器。它具有丰富的外设接口和强大的计算能力,可广泛应用于各种嵌入式系统中。 MIPI-CSI2 是一种通信接口标准,用于将摄像头传感器与处理器之间的数据传输。它通过传输高清视频和图像数据,实现了低功耗、高带宽、高质量的图像传输。 UVC(USB Video Class)是一种标准协议,用于视频设备与计算机之间的通信。它允许将视频设备连接到计算机,并以 USB 接口的形式传输图像或视频数据。 IMXRT1176 Mipi-CSI2 to UVC 是指将IMXRT1176微控制器与摄像头传感器之间的视频数据经过Mipi-CSI2接口传输,并通过UVC协议将视频数据传输到连接的计算机。 通过这种方式,我们可以在IMXRT1176微控制器上实现摄像头数据的采集和处理,然后将处理后的视频数据传输到计算机,并通过UVC协议对其进行解码和显示。这使得开发者可以方便地在嵌入式系统中使用摄像头,并实现图像或视频的实时采集、处理和显示。 总之,IMXRT1176 Mipi-CSI2 to UVC 提供了一种方便高效的解决方案,使得在嵌入式系统中使用摄像头变得更加容易和灵活。 ### 回答3: IMXRT1176是一款高性能的嵌入式处理器,而MIPI-CSI2和UVC是两种不同的图像传输接口。 MIPI-CSI2是一种用于连接图像传感器和图像处理器的接口标准。它使用串行传输协议,可以实现高速、低功耗的图像传输。MIPI-CSI2支持多通道数据传输,并且提供了丰富的控制和配置选项,以满足不同应用场景的要求。因此,IMXRT1176可以通过MIPI-CSI2接口与图像传感器进行通信,获取高质量的图像数据。 UVC是一种USB设备类别,它定义了一套用于视频采集和图像传输的标准协议。通过UVC协议,可以将图像数据通过USB接口传输到计算机上,同时还可以实现对图像的控制和配置。这样,计算机可以直接从IMXRT1176通过UVC接口获取图像数据,无需额外的驱动程序。 因此,IMXRT1176 MIPI-CSI2 to UVC的意思就是将IMXRT1176处理器与图像传感器通过MIPI-CSI2接口连接,然后将获取的图像数据通过UVC接口传输给计算机。这样一来,我们就可以在计算机上实时查看、录制和处理来自图像传感器的图像数据,为各种应用场景带来更便利和灵活的图像处理能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值