|
发表于 2018-4-12 18:55:54
|
显示全部楼层
本帖最后由 unknownuser 于 2018-4-12 19:00 编辑
flash config这个是给ROM来配置 FlexSPI 控制器,以便正确的以最高性能来访问FLASH,所以建议在学习阶段不用深究这个 config,因为一旦FLASH选定了,这个fash config 也就可以定下来了,SDK的例子是针对官方开发板子上的HyperFLASH的,所以flash config是针对 HyperFLASH的,如果用其他 FLASH,这个flash config也要作相应的修改,如果要深入研究这个flash config,那需要参考System Boot这一章了,但是不建议在这里花太多时间,因为这个东西其实没啥技术好研究的。
剩下来的就是 ivt 和boot data了,ivt 这个可以参考 System Boot 里的 Figure 8-14. Image Vector Table这张图。
RT1050是 没有 FLASH的,它同时支持XiP 启动和非XiP 启动(复制到RAM里执行),并且它还支持用DCD来预先配置好SDRAM 控制器,所以,ROM需要一些额外的信息来判断应用程序的信息。
所以IVT里有
1. header, 这个是一个标记,用来判断有没有有效的程序
2. entry 这个指向应用程序的Reset_handler或者Vector table地址
3. dcd, 这个指向 DCD (用于SDRAM/DDR等外部RAM器件的初始化)的地址,这个是可选的,如果没有外挂这些RAM或者不需要ROM在启动阶段配置外部RAM,可以直接填0,更多信息要参考 System Boot这一章了
4. boot_data, 这个指向 实际boot data的地址,这个boot data 稍后会讲
5. self, 这个就是个指向 实际 ivt 的地址
6. csf, CSF是 secure boot 需要的程序验签信息,在开发阶段可以直接填0,在量产阶段可以用 elftosb这个工具自动去打包生成 signed image,也可以用CST工程自行手工生成
接下来说 boot data, 这个其实比较简单没太多的东西,主要有三个成员
1. start, 这个指明了boot image的起始地址,如果是XiP image,这个就是FLASH的首地址,比如0x6000_0000,如果是非XiP的image,这个指向了代码实际执行的地址。
2. length, 这个表明了这个boot image的大小,如果是非XiP image,这个表明了最终需要ROM copy的应用程序大小
3. plugin flag, 这个就是个标记,对于大多数的应用来说,直接设0就好了。
希望上述信息能帮你理解 XiP的实际工作原理。
|
-
评分
-
查看全部评分
|