1、I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash
等启动
。用户可以根据实际情况,选择合适的启动设备。不同的启动方式其
启动方式
和
启动要
求
也不一样,比如上一章中的从
SD
卡启动就需要在
bin 文件前面添加一个数据头
,其它的启
动设备也是需要这个数据头的。
boot_mode 1:0 的设置 来选这 BOOT 方式
1、eFUSE
2、GPIO高低电平
I.MX6U 有四个boot 模式 boot_mode [1:0] 来控制
BOOT_MODE1 和 BOOT_MODE0 这两个IO BOOT模式配置
00 从FUSE 启动
01 串行下载
10 内部boot启动
11 保留
boot_mode1 为 1
boot_mode0 为 0 时候 此模式使能
此模式下 芯片会执行内部的 boot ROM代码
boot ROM 代码 会进行 硬件初始化 一部分外设 然后从 boot
设备中 将代码拷贝出来复制到 指定的RAM中 一般是DDR .
imxdownload
会在
led.bin 前面添加一些头信息,重新生成一个叫做 load.imx
的文件,最终实际烧写的是
laod.imx
。
I.MX6U
的最终可烧写文件组成如下:
①、
Image vector table
,简称
IVT
,
IVT 里面包含了一系列的地址信息,这些地址信息在
ROM 中按照固定的地址存放着
。
②、
Boot data
,启动数据,包含了镜像要
拷贝到哪个地址
,
拷贝的大小是多少
等等。
③、
Device configuration data
,简称
DCD
,设备配置信息,重点是
DDR3 的初始化配置
.
④、用户代码可执行文件,比如
led.bin
。
到
I.MX6U
中的程序其组成为:
IVT+Boot data+DCD+.bin
。
内部 Boot ROM 会将 load.imx 拷贝到 DDR 中,用户代码是要一定要从 0X87800000 这个地方开始的,因为链接地址为 0X87800000,load.imx 在用户代码前面又有 3KByte 的 IVT+Boot Data+DCD 数 据,下面会讲为什么是 3KByte,因此 load.imx 在 DDR 中的起始地址就是 0X87800000- 3072=0X877FF400
。
oad.imx 最前面的就是 IVT 和 Boot Data
,
IVT 和 Boot Data包含了镜像程序的入口点、指向 DCD 的指 针和一些用作其它用途的指针。
内部
Boot ROM
要求
IVT
应该放到指定的位置,不同的启动设 备位置不同,而
IVT 在整个 load.imx
的最前面,其实就相当于要求
load.imx
在烧写的时候应该
烧写到存储设备的指定位置去
。
我们编译出来的
.bin
文件
不能直接烧写到 SD 卡
中,需 要在
.bin 文件
前面加上
IVT、Boot Data
和
DCD
这三个数据块。这三个数据块是有指定格式的, 我们必须按照格式填写,然后将其放到.bin
文件前面,最终合成的才是可以直接烧写到
SD
卡 中的文件。
复位以后,I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们
想要的值,而且有些外设我们必须在使用之前初始化它
。
开启某些外设的时钟、初始化 DDR 等等
。
I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们想要的值,而且有些外设我们必须在使用之前初始化它。