其他分享
首页 > 其他分享> > RT启动流程

RT启动流程

作者:互联网

BootROM   出厂Bootloader 不可修改 Bootloader  

FUSE OTP memory 可以烧写一次的储存区域。启动需要的配置信息就可以存储在里面


Bootable image  相当于stm32的bin文件 
里面要包含 FDCB, IVT,BD, DCD,CSF等,其中IVT和BD包含了image的目标地址和总长度

boot选项
1.Serial Downloader 串口或usb

2.Boot From Fuses  有两种选项
第一种为BootROM会根据FUSE里的相关boot配置来决定从哪种外部存储器读取Image数据。
第二种等同于Serial Downloader模式(两种选项具体由FUSE中的BT_FUSE_SEL位去决定)。

3. Internal Boot 
第一种为BootROM会根据FUSE中的Boot配置信息和外部引脚共同决定启动设备,
其中以外部引脚设置配置为主;

第二种为完全根据FUSE中的boot配置信息去决定(两种选项具体由FUSE中的BT_FUSE_SEL位去决定)


读xip的参数启动flah或者是ddr

RT的启动过程
芯片上电后,最先运行就是BootROM程序
初始状态时,这时SRAM中没有任何image数据,BootROM首先会从外部Flash读取Bootable image前4KB数据进SRAM临时缓存区(OCRAM:0x20208000 - 0x20208FFF),
其中包括FDCB(可选), IVT, BD,其中FDCB包含了当前存储iamge的存储设备的具体特征参数(),IVT记录了image各个要素的位置信息,BD记录了起始地址和总长度。

读取前4KB数据后,首先根据读取数据中的FDCB中驱动存储设备的特征再次初始化读取接口以便后续读取image的剩余部分数据。
而BootROM(出厂Bootloader)  则是将SRAM临时缓存区中的4KB数据转移至链接目标区域(ITCM),接着则是继续读取image剩余部分至链接目标区域(ITCM)。

紧耦合是指该内存与内核连接紧密

OCRAM(可用于存储指令和数据(通用目的))

ITCM(指令紧耦合)
而“指令”则表示该内存专用于缓存指令
还有一个DTCM(数据紧耦合)


这三种存储器共享内部 FlexRAM 的空间(512kb)

读取镜像的过程前,我们首先得了解一下镜像的组成。为了让RT正常启动,
我们需要在传统意义上的bin文件(也就是APP主体)增加一个头,
那这个头具体内容是什么。
①FCB(存储器接口配置数据)
②IVT(Image Vector Table)
③Boot Data
④DCD(Device configuration data)


3.1 FCB
该部分是可选的,也是整个镜像最开始部分,
其本身没有统一的结构,具体结构根据启动FLASH的接口类型而定,
其一般是用来存储RT存储器接口配置数据以及当前连接的FLASH的具体特性参数,
BootROM首先会使用通用且可靠的FLASH接口控制器配置
(即BootROM中默认参数配置、CFG引脚以及eFUSE的配置,一般是比较低速通用的配置)
去访问外接FLASH并获取这部分数据,
然后根其参数去重新配置FLASH接口控制器再去进一步访问FLASH。
占的空间大小随着外部存储器类型而改变,
下表为不同类型存储器对应的所占空间大小:

启动设备类型    大小
FlexSPI NOR/SEMC NOR   4 Kbyte
SD/MMC/eSD/eMMC/SDXC    1 Kbyte
SPI NOR/EEPROM/SEMC NAND/ FlexSPI NAND 1 Kbyte

这一部分数据对于不同的存储器类型是不一样的,
我们知道RT有FlexSPI,SEMC,uSDHC 三种外部存储器接口,
所以这一部分数据是根据不同的存储器接口来进行划分的。

①对于FlexSPI,存储器接口配置数据则包括两个部分,分别是FlexSPI初始化配置数据和存储器配置数据。
这部分数据的具体定义大家可参考官方参考指南《i.MX RT1050 Processor Reference Manual》的Serial NAND Flash Boot over FlexSPI。


②对于SEMC,存储器接口配置数据则包括两个部分,分别是SEMC初始化配置数据和存储器配置数据。
这部分数据的具体定义大家可参考官方参考指南《i.MX RT1050 Processor Reference Manual》的Parallel NOR and NAND configuration based on SEMC interface。


③对于uSDHC ,这一部分则是不需要了。因为对于SD协议来说,有相关的信息来区别不同的存储器。

3.2 IVT
IVT里面包含了一系列的地址信息,这些地址信息按照固定的序列存放着,
对于RT启动至关重要, 大小为32个字节。

启动设备类型    IVT偏移
FlexSPI NOR/SEMC NOR    4 Kbyte = 0x1000 bytes
SD/MMC/eSD/eMMC/SDXC    1 Kbyte = 0x400 bytes
SPI NOR/EEPROM/SEMC NAND/ FlexSPI NAND    1 Kbyte = 0x400 bytes


打开Hello World.bin,
因为链接文件MIMXRT1052xxxxx_flexspi_nor_sdram.icf
决定了程序从FlexSPI NOR启动,我们可以知道IVT的偏移地址为0x10000。
我们找到Bin文件的0x10000处:


(注:链接地址就是当前数据被存储到RT的映射地址位置, 
可以理解成其在RT的memory map中所在的绝对地址,
通过查询可得到FlexSPI NOR的映射地址为0x60000000。)

3.3 Boot Data
Boot Data即启动数据,包含了镜像要拷贝到哪个地址,
拷贝的大小是多少,其必须紧跟在IVT的后面,
位置不能随意变动。所占空间大小为12个字节,其结构如下图。


名称    数据    描述    大小
start    0x60000000    整个镜像的链接地址,包括头信息    4(byte)
length    0x04000000    整个镜像的大小,这里设置64M    4(byte)
plugin    0x00000000    插件标志,imx6原生支持的Boot Device是有限的,
如果我们想使用其他的Boot源(如Ethernet、CDROM、USB等),
则需要提供对应的驱动程序,来完成Boot过程。具体的驱动程序路径则在DCD配置文件
设置4(byte)


 

标签:RT,FlexSPI,启动,流程,存储器,Boot,IVT,数据,NOR
来源: https://blog.csdn.net/weixin_46942417/article/details/121030537