首页 论坛 原厂专区 NXP(freescale) MCU RT105X烧录RAM APP到qspi flash image实例分析
分享到:
一,文档介绍
相信大家在看了痞子衡关于RT启动的文档之后,对RT代码启动结构已经比较熟悉 ,具体可以查看如下原文链接:
本文为了更清晰的显示RT外部flash的boot image的结构,以实例代码下载后读出memory形式来说明内存结构。
根据NXP的RT相关文档可以知道实际的flash memory分块情况如下:

图1 boot image
下面我们使用IDE生成一个放在RAM的app代码,然后通过MCUBootUtility工具烧录之后,具体分析相关的内存块以及启动情况,希望能够更加清楚的帮助大家理解RT的外部memory启动。
二,MCUXPressoIDE 生成RAM app代码
首先准备一个基于MCUXpressoIDE的RAM app代码,代码偏移地址为0XA000。当然其他的RAM地址也是可以的,这里仅仅以0XA000为例。
代码可以使用官方的SDK代码,如果要生成放到RAM的code,可以做如下配置。

图2 mcuxpress IDE memory配置

图3 RAM image 配置
配置好后,编译工程,然后选择.axf文件右击可以生成相关的image, 这里我们选择S-record格式文件,也就是srec/s19文件。

点击之后,可以在相应的debug或者release文件夹下看到自己的.s19 app文件。生成的可执行文件可以改为其他名字,为了便于识别,我们这里名称改为
evkbimxrt1050_led_softwarereset_0xa000.s19,本代码功能为:RT1050-EVKB板上LED闪烁,启动之后打印信息,按键按下WAKEUP引脚,可以实现代码的软件复位。这里打开生成的evkbimxrt1050_led_softwarereset_0xa000.s19,第一行S0是SREC文件格式中用于记录类型的,没有地址场,只是表示程序的开始,不需要烧录memory中,S1类型带有地址场和数据场,是真正的app image开始,可以看到代码的起始地址已经被放到0XA000之前定义的RAM目标地址。

图5 s19 image查看
三,MCUBootUtility烧录的image分析
下面使用MCUBootUtility烧录到MIMXRT1050-EVKB QSPI 版本的nor flash中,然后开始分析相关image分区的代码以及信息。
从第一章的图1,可以看到,普通不带加密的app image烧录到外部norflash后,大致分为7块:FDCB,BLANK,IVT,BOOTDATA, DCD,APP,BLANK.

图6 app image在flash中查看
由于RAM烧录到外部flash的代码并不是XIP的,所以会在启动之后把所有代码拷贝到内部的RAM, 根据上面的代码信息,可以知道启动之后内部ITCM的最终地址映射情况如下:

图7 app image在ITCM中映射情况
1:IVT: hdr, IVT的头,具体见hab_hdr
2: IVT: entry, app 的entrypointAddress, 一般设为复位中断地址。图中连线到APP 0XA004即复位中断地址,可以看到数据的确为0X00A2DD.
3: IVT: reserved
4: IVT: DCD, 用于SDRAM SEMC的配置,如果没有用SDRAM,则没有。
5: IVT: BOOT_DATA, 指定BOOT_DATA的起始地址0X9020
6: IVT: self, ivt本身的起始地址为0X9000
7: IVT:CSF,指定CSF的起始地址,无加密则无CSF。
8: IVT:reserved
9:BOOT_DATA: start,image的起始地址,这里最终为ITCM的0X8000,0XA000-0X2000=0X8000
10:BOOT_DATA: size, APP的总size大小,可以图5看到,0Xf244-0xa000=0x7244
11: APP 结尾地址,可以用于算app代码大小。
到这里,可以看到具体的实例数据对应情况已经非常明显。
(0 )
(0 )


发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖