IMX6ULL裸机开发学习
以下内容是我在学习正点原子IMX6ULL
开发板alpha
中记录的笔记,部分摘录自正点原子IMX6ULL开发手册
。
IMX6UL裸机开发bin文件头部信息分析
IVT、Boot Data和DCD数据
Bin文件前面要添加头部(IVT+Boot Data+DCD数据),由官方手册可知要烧写到SD卡中的load.imx文件在SD卡中的起始地址是0x400,也就是1024.
头部大小是3KB,加上偏移的1KB,一共是4KB,因此在SD卡中bin文件起始地址为4096。IVT大小为32B/4=8条。
IVT数据格式:
IVT结构 | 数据 | 描述 |
---|---|---|
header | 0X402000D1 | IVT头部信息 |
entry | 0X87800000 | 保存着程序入口地址,也就是镜像第一行指令所在的位置 |
reserved1 | 0X00000000 | 保留,未使用 |
dcd | 0x877FF42C | 保存着DCD数据的起始地址,0X87800000-0XC00(IVT+Boot Data+DCD=3KB)=0X877FF400(load.imx起始地址),所以DCD相对于load.imx起始地址偏移了0X2C(44Byte,IVT=32Byte,Boot Bata=12Byte) |
boot data | 0X877FF420 | 保存着Boot数据起始地址,IVT=32Byte,0X877FF400+0X20(32Byte)=0X877FF420 |
self | 0X877FF400 | IVT复制到DDR中以后的首地址 |
csf | 0X00000000 | CSF地址 |
reserved2 | 0X00000000 | 保留,未使用 |
Boot Data数据格式:
Boot Data结构 | 数据 | 描述 |
---|---|---|
start | 0X877FF000 | 整个load.imx的起始地址,包括前面的1KByte地址偏移 |
length | 0X00200000 | 镜像大小,这里设置2MByte。因此镜像大小不能超过2MByte |
plugin | 0X00000000 | 插件 |
DCD数据格式:
Header (Tag+Length+Version) |
---|
[CMD] |
[CMD] |
…… |
DCD CMD数据格式:
Header (Tag+Length+Parameter) |
---|
Address |
Value/Mask |
[Address] |
[Value/Mask] |
…… |
[Address] |
[Value/Mask] |
DCD数据整体举例:
DCD结构 | 数据 | 描述 |
---|---|---|
header | 0X40E801D2 | header 格式,第一个字节 Tag 为 0XD2,第二和三这两个字节为 DCD 大小,为大端模式,所以 DCD 大小为 0X01E8=488 字节。第四个字节为 0X40。 |
Write Data Command | 0X04E401CC | 第一个为 Tag,固定为 0XCC,第二和三这两个字节是大端模式的命令总长度,为 0X01E4=484 个字节。第四个字节是 Parameter,为 0X04,表示目标位置宽度为 4 个字节。 |
Address | 0X020C4068 | 寄存器 CCGR0 地址 |
Value | 0XFFFFFFFF | 要写入寄存器 CCGR0 的值,表示打开 CCGR0 控制的所有外设时钟。 |
…… | …… | CCGR1~CCGR5 这些寄存器的地址和值。 |
IVT、Boot Data和DCD数据Address | 0X020C4080 | 寄存器 CCGR0 地址 |
Bin文件前面要添加头部(IVT+Boot Data+DCD数据),由官方手册可知要烧写到SD卡中的load.imx文件在SD卡中的起始地址是0x400,也就是1024. Value | 0XFFFFFFFF | 要写入寄存器 CCGR6 的值,表示打开 CCGR6 控制的所有外设时钟。 |
头部大小是3KB,加上偏移的1KB,一共是4KB,因此在SD卡中bin文件起始地址为4096。IVT大小为32B/4=8条。…… | …… | …… |
IVT数据格式: Check Data Command | …… | …… |
IVT结构 | 数据…… | 描述…… |
- 本文作者: 路痴的兔子
- 本文链接: https:/proudrabbit.gitee.io/IMX6ULL学习笔记-一.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!