本文针对 IMX6ULL的裸机开发中。x.bin 文件中,恩智浦官方提供加入 x.bin 文件中的头部信息分析。
例如,之前汇编开发 实现 LED 灯的程序。x.bin 通过 添加头文件信息生成 load.imx 文件。
load.imx 文件由以下组成:
1. IVT(Image vector table);
2. Boot data,启动数据;
3. DCD(Device configuration data),设备配置信息,重点是 DDR3 的初始化配置;
4. 用户代码可执行文件,比如 led.bin。
设置内核时钟为396MHz。使能MMU和Cache,使能L1cache L2 cache MMU,目的就是为了加速启动。
从BOOT_CFG 设置的外置存储中,读取 image,然后做相应的处理。
load.imx 文件中头信息中,大概包含IVT 信息,Boot Data数据,DCD数据,与其他的数据。
Bin文件前面要添加头部。可以得到,我们烧写到SD卡中的load.imx文件在SD卡中的起始地址是0x400,也就是1024。
头部大小为3KB,加上偏移的1KB,一共是4KB,因此在SD卡中bin文件起始地址为4096。
IVT大小为32B/4=8条。
IVT+Boot Data的数据,很多是我从NXP官方u-boot.imx文件里面提取出来的。
Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置。即配置6ULL内部寄存器的。
首先,将CCRG0~CCGR6全部写为0XFFFFFFFF,表示打开所有外设时钟。然后就是DDR初始化参数。设置DDR控制器,也就是初始化DDR。
检查数据命令、NOP命令、解锁命令。这些其实也都属于DCD
内部的 boot-rom 根据这些头部信息来完成 IMX6ULL 的 DDR 初始化,一些外设初始化,以及从 SD卡将 x.bin 文件(可执行程序)拷贝到DDR的哪个位置。
本文内容针对 IMX6ULL 裸机开发的。主要是保证x.bin文件可以在开发板中运行,必须添加的一些头部信息。这些头部信息的简略介绍,可以有一个初步的了解。