RT1060 image里面有什么?
RT1060 image里面有什么?
RT MCU 学习有一段时间了,刚好得空,在这篇文章里面,我们一起分析一个完整的image bin文件,它有哪些部分?分别是什么作用?哪些是不可或缺的?哪些是可选的?
我们知道,RT MCU作为跨界控制器/处理器,提供了一个高性能的平台,CM7核心的主频可以达到600MHz以上,可以说单凭这个系列,就打出了NXP的差异性和易用性。原来国外原厂也可以这么有性价比😍简直是Amazing -.-
但是同时呢,由于RT的flash是外置的嘛,它的image结构也和以往的通用MCU的image有很大区别。以我们本文要研究的Flash XIP的image为例,上电之后,BootROM会先把flexspi跑起来,用一个低速时钟去读flash中的配置参数,然后拿这个flash的配置头重配flexspi,就能高效获取image中的指令和数据啦!
同时呢,因为一些加密啊,外设配置啊,的需求,image不只是包含这个flash的配置header,还分为很多个其他部分,在这里,我们就一起看一下吧!
FDCB Header
再次呢,进入正文之前,提前说明一些东西以防止读者疑惑。
使用的是*.bin格式的image,相比于hex或者s-record,它没有指示物理地址,只有offset,在使用JLink烧录时,我们使用如下命令:
jlink loadfile xxx.bin 0x6000_0000
从这里我们可以看出来,这个bin文件的offset,实际上就是从我们的Flash首地址开始偏移的,这是最重要的前置知识,请知悉。
在MCU BootUtility中,它显示从0x6000_0000
到0x6000_0200
之前,都是FDCB段。那么它的大小就是512 Byte
.
这里我们先不管,直接看对我们有用的部分。

Offset | flash address | 内容 | 小端 | 意义 |
---|---|---|---|---|
0x0 | 0x6000_0000 | 46 43 46 42 | 0x42462326 | FCFB flash配置头标志 |
0x04-0x07 | 0x6000_0004 | 00 04 01 56 | 0x56010400 | version 表示使用flexspi v1.4.0配置 |
0x40-0x43 | 0x6000_0040 | 10 00 00 00 | 0x10 | 应该是flash的page size 16 |
0x80-0x83 | 0x6000_0080 | EB 04 18 0A | 0x0A1804EB | Flash的时钟频率 典型值133MHz (600/43 x 19 / 2 = 133) |
Image Version
在Offset 0x600
的地方有个image版本号,用于双image的时候,还没用过。暂且不表。

IVT

Offset | flash address | 内容 | 小端 | 意义 |
---|---|---|---|---|
0x1000 | 0x6000_1000 | D1 00 20 41 | 0x412000D1 | IVT段的起始标志 |
0x1004 | 0x6000_1004 | 00 20 00 60 | 0x60002000 | 程序中断向量表地址 .isr_vector 以及 g_pfnVectors |
0x1008 | 0x6000_1008 | 00 00 00 00 | 0x0 | DCD地址 表示未启用DCD |
0x1010 | 0x6000_1010 | 20 10 00 60 | 0x60001020 | BootData地址 指向偏移量0x1020的地方 |
Boot Data
根据IVT中 Offset 0x1010
的指引,找到 Boot Data的地址是:0x6000_1020

Offset | flash address | 内容 | 小端 | 意义 |
---|---|---|---|---|
0x1020 | 0x6000_1020 | 00 00 00 60 | 0x60000000 | image的起始地址 在这时候就是flash的地址 |
0x1024 | 0x6000_1024 | 00 00 80 00 | 0x00800000 | image的大小 这里默认是8MB |
Image
终于到了光秃秃的image部分了~
根据IVT中的指示,它是程序入口,地址是0x6000_2000
!

Offset | flash address | 内容 | 小端 | 意义 |
---|---|---|---|---|
0x2000 | 0x6000_2000 | 00 00 02 20 | 0x2002_0000 (DTCM中的地址) | 初始SP栈指针 |
0x2004 | 0x6000_2004 | 1D 23 00 60 | 0x6000231D | ResetISR 的地址 |
RT1060 image里面有什么?
https://dustofstars.github.io/NXP/RT1060/binary/rt1060-image里面有什么?/