I.MX6U-镜像烧写
一、镜像的组成
在编写裸机代码时,最终下载的代码并不是编译生成的 .bin 文件,而且也不是将最终代码直接放在SD卡中就可以了的。这是因为 NXP 有规定其启动应该从哪里开始。
裸机代码中,将 .bin转换为了 load.imx,它是由以下几部分构成的:
-
IVT(Image vector table):里面包含了一系列的地址信息,这些地址信息在ROM 中按照固定的地址存放着
-
Boot Data:启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等
-
DCD(Device configuration data):设备配置信息,重点是 DDR3 的初始化配置
-
user code:用户代码,即编译后生成的 .bin文件
因此,最终烧写到 I.MX6U 中的程序其组成为: IVT + Boot Data + DCD + .bin
二、存放位置
生成的 .imx文件对在存储介质中的存放位置NXP也有所要求:

这里写的是ITV的存放位置要求,因为后面的部分是紧挨这个,也就是整个文件的存放偏移要求。
可以看到,从SD卡启动时,要求从存储介质起始地址偏移 1Kbyte 开始,如果一个扇区是512字节,就是偏移2个扇区。大小就是 4 Kbyte - 1 Kbye = 3Kbye
三、镜像格式
镜像的构成格式和映射关系如下:

3.1、IVT格式
IVT成员每个都是32位数据,一共8个,32字节。

-
header
Tag(1 Byte):固定为0xD1,一个字节Length(2 Byte):保存着IVT的长度,两个字节,大端端序Version(1 Byte):为0x40或者0x41,一个字节
-
entry由镜像映射图可以知道,保存的是App的起始地址。就是裸机编成中设置的
0x87800000 -
resetved1保留,未使用
-
dcdDCD地址,其偏移为 IVT + Boot Data,一共44个字节,如果中间不留空的话,从entry反推,那么就是:文件起始地址:
0x87800000-0xC00=0x877FF400DCD地址:
0x877FF400+44=0x877FF42C -
boot_dataBoot Data 地址,如果中间不留空的话,从
entry反推,那么就是:文件起始地址:
0x87800000-0xC00=0x877FF400Boot Data地址:
0x877FF400+32=0x877FF420 -
selfIVT 自身复制到 DDR 中以后的地址,从
entry反推,那么就是:文件起始地址:
0x87800000-0xC00=0x877FF400 -
csfCSF 地址,使用上面的方法进行推算即可,和 app 大小有关。
-
reserved2保留,未使用
3.2、Boot Data
Boot Data成员每个同样都是32位数据,一共3个,12字节。

-
start整个 .imx 的起始地址,包括前面 1KByte 的地址偏移,即:
0x877FF400-0x400=0x877FF000 -
length镜像大小,这里设置 2MByte。镜像大小不能超过 2MByte。
-
plugin插件,设置为0x00000000即可,可以前往参考手册的
Pilgin image查看详细信息。
3.3、DCD
即设备配置数据,BOOT ROM代码将根据此数据段,对设备的驱动进行配置,比如开启某些外设的时钟、初始化 DDR 等等,便于加载镜像。
DCD字段最大不能超过 1768 字节。结构如下:

首先就是DCD header,4字节,其结构如下:

-
Tag(1 Byte):固定为0xD2
-
Length(2 Byte):DCD区域的大小,包含Header,同样是大端结构。
-
Version(1 Byte):固定为0x41或0x42。
然后就是 CMD 部分了,其结构如下:


-
Tag(1 Byte):固定为0xCC。
-
Length(2 Byte):包含写入的命令数据长度,包含 header,同样是大端模式。
-
Parameter(1 Byte):这个参数含义如
Table 8-29。bytes:表示是目标位置宽度,单位为 byte,可以选择 1、 2、和 4 字节,一般设置为0x04个字节。flags:命令控制标志位,一般设置为0即可。
-
[Address](字节由Parameter.bytes设置):寄存器地址。
-
[Value/Mask](字节由Parameter.bytes设置):写入的数值或掩码。
正点原子提供的结构如下:


可以看出, DCD 里面的初始化配置主要包括三方面:
- 设置 CCGR0~CCGR6 这 7 个外设时钟使能寄存器,默认打开所有的外设时钟。
- 配置 DDR3 所用的所有 IO。
- 配置 MMDC 控制器,初始化 DDR3
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













