i.MX6ULL终结者镜像格式

I.MX6ULL的镜像文件由下面几部分组成:
1.Image vector table简称IVT。
2.Boot data,启动数据。
3.Device configuration data,简称DCD,主要是芯片的配置信息
4.用户代码生成的执行文件。比如uboot等。
所以i.MX6ULL的镜像组成为:IVT+Boot Data+DCD+用户程序。

我们首先看下IVT部分:它里面包含了程序的入口点,一个指向设备配置数据(DCD)的指针,以及其他在启动过程中被ROM固化程序用到的指针。IVT被存储在启动设备固定的位置(但是不同的启动设备保存的位置可能会不一样)。IVT在镜像文件的最前面,图 1是不同启动设备,IVT所在的位置偏移(相对于设备首地址):

i.MX6ULL终结者镜像格式_第1张图片

图 1

这里我们以EMMC为例,从上表可以看出他的偏移是1Kbyte(1024字节),假设EMMC的每个扇区是512字节,那么我们的IVT要从第三个扇区开始保存。我们从《IMX6ULL参考手册.pdf》的8.7.1.1章节可以看到IVT的数据格式如图 2所示:

i.MX6ULL终结者镜像格式_第2张图片

图 2

上图中第一个存放的是header(头),header头的格式如图 3所示:

在这里插入图片描述

图 3

其中的Tag是一个字节设置为0xD1,length是2个字节,按照大端模式存储,表示IVT的长度,最后一个Version是版本信息,占用一个字节,通常为0x40或0x41。由于《IMX6ULL参考手册.pdf》文档只有header的描述其它几个字节的描述没有涉及。我们可以打开编译生成的Uboot镜像uboot.imx查看下它里面的内容。

接下来是Boot data,它的数据格式如图 4所示:

在这里插入图片描述

图 4

从上图可以看出Boot data一共是三个字段,每个字段32位。

然后是DCD,DCD紧跟在Boot Data后面,IVT里面也定义了DCD的位置。DCD主要是初始化片内的寄存器。DCD的数据格式如图 5所示:

i.MX6ULL终结者镜像格式_第3张图片

图 5

第一个是Header包头信息,他是一个32位的包头,具体定义如图 6所示:在这里插入图片描述

图 6

Tag占一个字节,被设置为0xD2;Length占两个字节,按照大端模式存储,表示DCD的区域大小(包含包头的长度),Version占一个字节,设置为0x40或0x41。

Header后面的是CMD配置寄存器的字节,每个CMD的结构如图 7所示:

在这里插入图片描述 在这里插入图片描述

图 7

CMD域的第一个是Tag,占一个字节,设置为0xcc;然后是Lehgth占两个字节,按照大端模式存储,表示该CMD的长度(包含CMD的包头),Parameter占一个字节,这个字的每个为含义如图 8所示:

在这里插入图片描述

图 8

上图中的bytes表示目标位置宽度,单位为byte,可以设置为1,2,4字节。Flags是命令控制标志位。

然后CMD域后面的是Address和Value/Mask。这两个分别是要初始化的寄存器地址,设置的值。

紧接着DCD的就是我们的程序生成的.bin文件。至此关于i.MX6ULL镜像的组成格式我们就分析完成了。只是看上面的介绍大家也许感觉到会很枯燥,接下来我们结合uboot.imx镜像,来一起看看这些数据的组织格式。我们使用winhex软件(在光盘资料的“i.MX6UL终结者光盘资料\02_开发所需软件”目录下面)打开光盘资料的“i.MX6UL终结者光盘资料\06_开发板系统镜像\uboot\emmc\u-boot.imx”文件。

从上图可以看出是按照小端方式显示的,我们首先把前面44个字节按照4个字节一组的方式组合在一起就是:0x402000D1,0x87800000,0x00000000,0x877FF42C,0x877FF420,0x877FF400,0x00000000,
0x00000000。这8组数据是IVT的数据,我们整理成下表:

i.MX6ULL终结者镜像格式_第4张图片

然后是Boot Data域,我们把接下来的12个字节按照4个字节一组的方式组合在一起就是0x877FF000,0x0007E000,0x00000000。我们整理成下表所示:
i.MX6ULL终结者镜像格式_第5张图片

然后紧接着就是DCD的数据,如下表所示:

i.MX6ULL终结者镜像格式_第6张图片
i.MX6ULL终结者镜像格式_第7张图片

从上面的表格我们可以看到DCD主要做了下面的配置:
1.使能所有外设的时钟。
2.配置DDR3所用的所有IO。
3.配置MMDC控制器,初始化DDR3

关于i.MX6ULL的启动流程和启动镜像文件格式我们就介绍到这里。通过本章的讲解我们可以掌握i.MX6ULL的启动设置了。我们编译出的二进制.bin文件,不能直接烧写到EMMC中,需要在它前面加上IVT,Boot Data和DCD这三部分的数据域。我们之中烧写到EMMC的镜像文件时:IVT+Boot Data+CDC+用户的.bin文件。i.MX6ULL终结者镜像格式_第8张图片

你可能感兴趣的:(i.MX6ULL终结者,#,第二部分,裸机开发,linux,嵌入式,开发平台)