IMX6U启动方式及头部数据详解

一、硬件启动方式选择

1、6UL支持多种启动方式 USB SD EMMC NANDflash 等等

内部boot ROM支持 NOR flash、NAND flash 、OneNAND flash 、EEPROM 、QSPI 多种启动方式

2、BOOT_MODE0和BOOT_MODE1 是两个IO来控制的; T10和U10两个 内部下拉

IMX6U启动方式及头部数据详解_第1张图片

选择从usb启动还是从内部boot启动 如果烧写系统到开发板中,可以选择从usb下载,下载到sd卡,emmc,nadn等外置存储中,烧写完成从内部boot启动,然后从响应的外部设备启动。

3、启动设备的选择

前提是启动方式设置为从内部BOOT启动

支持的启动设备, NOR flash 使用cs0片选(2440使用);ONENAND 使用RIM接口 接到CS0 16b数据;Raw NAND即NANDflash 接到 GPMI接口、EEPROM通过spi

现在常用为 NAND flash ,SD/EMMC或者QSPI flash (成本低,容量特别小,行车记录仪等等会使用)等等

通过BOOT_CFG来选择。有BOOT_CFG1、2、4 每个都是八位

IMX6U启动方式及头部数据详解_第2张图片

BOOT_CFG是由LCD_DATA0-23来设置的 即上图所示;在正点原子开发板上 大部分默认接地 47k接地 BOOT_CFG 4的八根线全部接地 BOOT_CFG2全部接地 除了BOOT_CFG2[3]这个位他可以决定从哪一个接口的SD卡启动 IMX6U支持两个SD卡接口。BOOT_CFG1的0 1 2位都是定死的 ,34567是可以设置的 用来设置外部启动设备 设置快速启动

IMX6U启动方式及头部数据详解_第3张图片

BOOT_CFG1[6]设置为0为NAND flash启动 4 和 5 共同设置块的页大小 需要对照所使用的的NAND flash的数据手册来查看

二 、启动头文件

1、BOOT ROM做的事情

设置内核启动时钟为396MzHz 使能MMU(内存管理单元)和Caches(缓存)在镜像下载时 L1 的cache使能 在认证时 L1 的data cache L2 cache MMu打开 认证完关闭

使用 cache 和mmu的目的是加速启动

从BOOT_CFG设置的外部存储单元中读取镜像

2 、IVT (Image Vector table)和BOOT DATA 数据

DCD就是ddr的初始化代码

IVT 包含镜像的入口地址 DCD数据地址 对于SD卡来说 IVT偏移1kb存储

Bin文件前面要添加头部,我们烧写的LODA.IMX 文件在sd中的起始地址是0x400 也就是1024 因为要进行偏移

IVT大小为32字节 为8条;lode.imx在ddr中的起始地址为0x877ff400;接下来依次存放 ivt boot Data、DCD ;

IVT+BOOT Data=32+13=44=0x2c 因此dcd的起始地址为ox87FF400+0X2C=0X87FF42C

BOOT DATA 中

start为镜像绝对地址 0x877FF000

length 镜像的大小长度,要烧写的大小 2m字节

plugin 插件

IMX6U启动方式及头部数据详解_第4张图片

图中start指示地址在IVT之前 应该为IVT的起始地址

SD卡头部信息一共3k 加上1k的偏移总共4k oxc00后才是真正的Bin文件

3 、DCD数据 用来配置内部寄存器 比如ddr 最大 1768byte

tag是单字节,固定为0xd2 length表示dcd的区域大小,包含header,version是单字节 固定为0x40或0x41;

首先将CCGR0——CCGR6全部写为全f,表示打开全部时钟

然后ddr初始化参数,设置ddr控制寄存器 也就是初始化ddr。

4 、其他数据

检查数据命令、NOP命令、 解锁命令 这些也属于dcd数据 这些一般没有使用;

 

你可能感兴趣的:(单片机,物联网,嵌入式硬件)