admin 管理员组文章数量: 1184232
前言
I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、 NAND Flash、 QSPI Flash
等启动。用户可以根据实际情况,选择合适的启动设备。不同的启动方式其启动方式和启动要求也不一样,比如从 SD卡启动就需要在 bin 文件前面添加一个数据头,其它的启
动设备也是需要这个数据头的。本章我们就来学习一下 I.MX6U 的启动方式,以及不同设备启动的要求。
1.启动方式选择
BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片上电复位后,就就会执行Boot Rom中的代码,会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。
BOOT_MODE[1:0]的值是可以改变的,有两种方式。
一种是改写 eFUSE(熔
丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就不能再修改了,所以我们不使用。我们使用的是通过修改 BOOT_MODE[1:0]对应的 GPIO 高低电平来选择启动方式,所有的开发板都使用的这种方式,
I.MX6U 有一个 BOOT_MODE1 引脚和
BOOT_MODE0 引脚,这两个引脚对应这 BOOT_MODE[1:0]
。
其中
BOOT_MODE1 和 BOOT_MODE0 在芯片内部是有 100KΩ下拉电阻的,所以默认是
0
。 BOOT_MODE1 和 BOOT_MODE0 这两个引脚我们也接到了底板的拨码开关上,这样我们就可以通过拨码开关来控制 BOOT_MODE1 和 BOOT_MODE0 的高低电平。
以 BOOT_MODE1
为例,当我们把 BOOT_CFG 的第一个开关拨到“ON”的时候,就相当于 BOOT_MODE1 引脚
通过 R88 这个 10K 电阻接到了 3.3V 电源,芯片内部BOOT_MODE1 又是 100K 下拉电阻接地,因此此时 BOOT_MODE1 的电压就是 100/(10+100)*3.3V= 3V,这是个高电平, 因此
BOOT_CFG 的中的 8 个开关拨到“ON”就是高电平,拨到“OFF”就是低电平。
而 I.MX6U 有四个 BOOT 模式,这四个 BOOT 模式由 BOOT_MODE[1:0]来控制,也就是
BOOT_MODE1 和 BOOT_MODE0 这两 IO 。
1.1.串行下载
当 BOOT_MODE1 为 0, BOOT_MODE0 为 1 的时候此模式使能,
串行下载的意思就是可
以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中
,我们可以使用 OTG1 这个 USB
口向开发板上的 SD/EMMC、 NAND 等存储设备下载代码。我们需要将
BOOT_MODE1 拨到
“OFF”,将 BOOT_MODE0 拨到“ON”。这个下载是需要用到 NXP 提供的一个软件,一般用来最终量产的时候将代码烧写到外置存储设备中的。
1.2.内部BOOT模式
当 BOOT_MODE1 为 1, BOOT_MODE0 为 0 的时候此模式使能,在此模式下,芯片会执
行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设备(就是存放代码的设备、比如 SD/EMMC、 NAND)中将代码拷贝出来复制到指定的 RAM 中,
一般是 DDR 。
2.BOOT ROM初始化内容
当我们设置 BOOT 模式为“内部 BOOT 模式”以后, I.MX6U 内部的 boot ROM 代码就会
执行,这个 boot ROM 代码都会做什么处理呢?首先肯定是初始化时钟 。
在图中 BT_FREQ 模式为 0,可以看到,boot ROM 会将 I.MX6U 的内核时钟设置为
396MHz, 也就是主频为 396Mhz。 System PLL=528Mhz, USB PLL=480MHz, AHB=132MHz,
IPG=66MHz。
内部 boot ROM 为了加快执行速度会打开 MMU 和 Cache,下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCache、 L2 Cache 和 MMU 都会打开。一旦镜像验证完成, boot ROM
就会关闭 L1 DCache、 L2 Cache 和 MMU。
3.启动设备
当 BOOT_MODE 设置为内部 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。
这些启动设备如何选择呢? I.MX6U 同样提供了 eFUSE 和 GPIO 配置两种, eFUSE 就不讲
解了。我们重点看如何通过 GPIO 来选择启动设备,因为所有的 I.MX6U 开发板都是通过 GPIO
来配置启动设备的。正如启动模式由 BOOT_MODE[1:0]来选择一样,启动设备是通过
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
的启动选择引脚 。
通过图中的
26 个启动 IO 即可实现 I.MX6U 从不同的设备启动
, BOOT_MODE1 和
BOOT_MODE0 已经讲过了。看到这 24 个 IO 是不是头大?调整这 24 个 IO 的高低电平得多复杂啊?其实不然,虽然有 24 个 IO,但是实际需要调整的只有那几个IO,其它的IO全部下拉接地即可,也就是设置为 0。打开 I.MX6U-ALPHA 开发板的核心板原理图,这 24 个 IO 的默认设置如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FzWaGKuD-1612008200985)(upload\image-20210130183656858.png)]
可以看出在上图中大部分的 IO 都接地了,只有几个 IO 接高,尤其是 BOOT_CFG4[7:0]
这 8 个 IO 都 10K 电阻下拉接地,所以我们压根就不需要去关注 BOOT_CFG4[7:0]。我们需要
重点关注的就只剩下了 BOOT_CFG2[7:0]和 BOOT_CFG1[7:0]这 16 个 IO。这 16 个配置 IO 含
义在原理图的左侧已经贴出来了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4CMgqgAx-1612008200986)(upload\image-20210130183810817.png)]
看着是不是也很头大,BOOT_CFG1[7:0]和 BOOT_CFG2[7:0]这 16 个 IO 还能不能在减少呢?可以!打开 I.MX6U-ALPHA 开发板的底板原理图,底板上启动设备选择拨码开关原理图如下图所示:
在上图中,除 了 BOOT_MODE1 和 BOOT_MODE0 必 须 引 出 来 ,
LCD_DATA3~LCDDATA7、 LCD_DATA11 这 6 个 IO 也被引出来了,可以通过拨码开关来设置其对应的高低电平,拨码开关拨到“O
版权声明:本文标题:RT-Thread实战:IMX6ULL启动方式,让你从入门到精通 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1773653382a3564419.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论