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)


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值