Chapter 9. i.mx6u启动方式详解
【参考】:
01 启动模式
i.mx6u上电后,会根据BOOT_MODE[1:0]
的设置来选择BOOT方式,BOOT_MODE[1:0]
的值可通过以下两种方式进行更改:①改写eFUSE(熔丝,只能改写一次);②修改BOOT_MODE[1:0]
对应GPIO的高低电平。
BOOT_MODE[1:0]
对应了i.mx6u的四种BOOT模式:
BOOT_MODE1
和BOOT_MODE0
在芯片内部连接了 100KΩ下拉电阻
-
串行下载
当
BOOT_MODE1=0, BOOT_MODE0=1
时使能此模式,可利用NXP提供的软件,通过USB或UART将代码下载到板子上的外置存储中。如可用OTG这个USB口,向开发板上的SD/EMMC、NAND等存储设备下载代码
-
内部BOOT模式
当
BOOT_MODE1=1, BOOT_MODE0=0
时使能此模式。此模式下,芯片会做如下操作:
-
执行内部的
bootROM
代码。bootROM
会进行一部分外设的初始化。bootROM
会初始化时钟,打开Cache和MMU,并启动用户代码等。 -
从boot设备中将代码拷到指定的RAM中,一般是DDR。
boot设备就是存放代码的设备,如SD/EMMC、NAND等
-
02 启动设备(内部BOOT模式)
启动设备是通过BOOT_CFG1[7:0]
、 BOOT_CFG2[7:0]
和 BOOT_CFG4[7:0]
这 24 个IO配置的。这24个IO对应着LCD的24根线,LCD_DATA0~LCD_DATA23
,启动完成后,这个24个IO就可以作为LCD的数据线使用了。
这24个IO和
BOOT_MODE1
、BOOT_MODE0
共同决定了i.mx6u的启动方式
内部BOOT模式可从以下设备中启动:
①、接到 EIM 接口的 CS0 上的 16 位 NOR Flash。
②、接到 EIM 接口的 CS0 上的 OneNAND Flash。
③、接到 GPMI 接口上的 MLC/SLC NAND Flash, NAND Flash 页大小支持 2KByte、 4KByte
和 8KByte, 8 位宽。
④、 Quad SPI Flash。
⑤、接到 USDHC 接口上的 SD/MMC/eSD/SDXC/eMMC 等设备。
⑥、 SPI 接口的 EEPROM。
-
如何配置
BOOT_CFG1[7:0]
、BOOT_CFG2[7:0]
和BOOT_CFG4[7:0]
BOOT_CFG引脚含义如下所示
1. `BOOT_CFG4[7:0] `可忽略。开发板上10k电阻下拉到GND了;
2. 由上图可知,`BOOT_CFG1[7:0]`、 `BOOT_CFG2[7:0]`中决定启动设备的主要是`BOOT_CFG1[7:4]`,其他功能视情况而定。
- 正点原子开发板启动配置如下
- 野火开发板启动配置如下:
注:两者的差别在于
BOOT_CFG1[3]
和BOOT_CFG2[5]
。具体差别待需要时细究。
03 镜像烧写
imxdownload
在烧写程序时,先在xxx.bin
文件前添加头部信息转换成满足i.mx6u需求的load.imx
文件,然后下载的load.imx
文件。
-
i.mx6u最终可烧写文件的组成如下
-
①、 Image vector table,简称 IVT, IVT 里面包含了一系列的地址信息,这些地址信息在
ROM 中按照固定的地址存放着。②、 Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等。
③、 Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置。
④、用户代码可执行文件,比如 led.bin。i.mx6u最终烧写文件的组成为:
IVT + Boot data + DCD + xxx.bin
-
关于头部信息的详细说明,请参见【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.pdf 的【第九章–镜像烧写】部分,此处暂不做小结。