引入:前段时间浅析了一些I.MX6U的寄存器,那么接下来肯定是下载实验,但是下载前首先要知道I.MX6U是如何启动的。
引导ROM支持以下引导设备:
•NOR闪存
•NAND闪存
•OneNAND闪存
•SD / MMC
•串行(SPI)NOR闪存和EEPROM
•QuadSPI(QSPI)闪存
BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式
BOOT_MODE[1:0]可以通过修改相应的GPIO电平来控制。
I.MX6U 有一个 BOOT_MODE1 引脚和BOOT_MODE0 引脚,这两个引脚对应这 BOOT_MODE[1:0]。
由上面三幅图可知
BOOT_MODE1连接拨码开关的第一位
BOOT_MODE0连接拨码开关的第二位
00 从 FUSE 启动
01 串行下载
10 内部 BOOT 模式
11 保留
一般情况下只会用到串行下载和内部BOOT模式
串行模式:BOOT_MODE1 为 0,BOOT_MODE0 为 1
串行下载的意思就是可以通过 USB 或者UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1这个USB
口向开发板上的 SD/EMMC、NAND 等存储设备下载代码。
需要用到 NXP 提供的一个软件。
内部 BOOT 模式:BOOT_MODE 为 1,BOOT_MODE0 为 0
在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设
备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR。
1.时钟初始化:
在图 9.2.1 中 BT_FREQ 模式为 0,可以看到,boot ROM 会将 I.MX6U 的内核时钟设置为396MHz,也就是主频为 396Mhz。System PLL=528Mhz,USB PLL=480MHz,AHB=132MHz,IPG=66MHz。
2.使能mmu和cache
内部 boot ROM 为了加快执行速度会打开 MMU 和 Cache,下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCache、L2 Cache 和 MMU 都会打开。一旦镜像验证完成,boot ROM就会关闭 L1 DCache、L2 Cache 和 MMU。
3.重置中断向量表
中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可以重新设置中断向量偏移了。一般是重新设置到我们用户代码的开始地方,关于中断的内容后面会详细讲解
当 BOOT_MODE 设置为内部 BOOT 模式以后,可以从一下设备中启动:
1.接到 EIM 接口的 CS0 上的 16 位 NOR Flash。
2.接到 EIM 接口的 CS0 上的 OneNAND Flash。
3.接到 GPMI 接口上的 MLC/SLC NAND Flash,NAND Flash 页大小支持 2KByte、4KByte
和 8KByte,8 位宽。
4.Quad SPI Flash。
5.接到 USDHC 接口上的 SD/MMC/eSD/SDXC/eMMC 等设备。
6.SPI 接口的 EEPROM
这些设备通过BOOT_CFG1[7:0]、BOOT_CFG2[7:0]和 BOOT_CFG4[7:0]这 24 个配置 IO,这 24 个配置 IO 刚好对应着 LCD 的 24 根数据线 LCD_DATA0~LCDDATA23,当启动完成以后这 24 个 IO 就可以作为 LCD 的数据线使用。这 24 根线和 BOOT_MODE1、BOOT_MODE0 共同组成了 I.MX6U的启动选择引脚
其中这24个引脚大部分直接接地主要的引脚为以下所示
BOOT_CFG2[3]
为 0 时从 SDHC1 上的 SD/EMMC 启动,为 1 时从SDHC2 上的 SD/EMMC 启动。
BOOT_CFG1[3] LCD_DATA3
当从 SD/EMMC 启动的时候设置启动速度,当从NAND 启动的话设置 NAND 数量。
启动方式的主要控制引脚只有8个
BOOT_MODE[1:0]
BOOT_CFG1[7:4]
BOOT_CFG1[3]
BOOT_CFG2[3]