在上一章我们通过点亮LED实现了第一个小程序。在烧录程序完成插入SD卡后有个选择启动拨码开关的步骤,那么这个启动方式是如何实现的,今天我们就来大致了解下I.MX6U的启动方式
一.启动模式选择
按照I.MX6UL的开发手册上所说,整个BOOT的处理过程就是芯片上电后,芯片首先会根据BOOT_MODE[]1:0]的设置来选择启动方式
00为通过可编程熔断丝启动,这种方式只能修改一次,后面就不能修改了,我们不会使用
01为串行下载器模式,就是通过USB或者UART将代码下载到板子的外置存储设备中。针对阿尔法开发板,可以使用支持OTG的USB接口向板子上的SD/EMMC、NAND等设备下载代码。这个下载需要NXP(恩智浦)提供的一个软件,在量产的时候使用。
10为内部BOOT模式,在此模式下芯片会执行bootROM代码,这段代码会进行硬件初始化,然后从boot设备中将代码拷贝出来复制到指定的RAM中,一般就是DDR。
结合硬件原理图来看(下面拨码开关9那里标注不对,应该是LCD_DATA7)
拨码开关1、2位就是启动方式的选择,我们常用的就是01(USB)或10(内部).
二.启动设备选择
如果要选择启动设备,前提是MODE1=1和MODE0=0,即内部BOOT模式。开发手册上说明了这个模式下支持的设备
我们最常用的就是NANDflash,SD,EMMC,QSPIFlash(轻量级,便宜)
设备的选择是通过BOOT_CFG1,2,4几个寄存器,每个8为,通过LCD1_DATA00-23y一共24个值决定的。
而在开发板上,大部分都是通过47K的下拉电阻接地(BT_CFG4全接地,CFG2上面两个上拉是DNP也就是未焊接,也是全部接地的)
往前翻一下那个拨码开关,就是对应了LCD_DATA3/4/5/6/11,对应的BOOT_CFG1[3:7]和BOOT_CFG2[3]
下面的表是讲到BOOT_CFG2的定义
3和4一同决定了板子首冲SDHC1还是SDHC2启动。6ULL支持两个SD卡接口,是通过拨码开关3选择,为1的时候是从SDHC2启动
重要的是BOOT_CFG1,还是结合图表来看
首先,0,1,2都是定死的,3-7被引到了拨码开关。
由于前三种设备我们都未使用,3同2一同决定了是选择SD或MMC/eMMC的速度(能选的只有3,一般都是0),对于NANDFlash是定义了设备的数量
剩下的就直接看SD,eMMC和NAND的设置就行了
对于SD来说,[7:5]是订好的010,[4]是快速启动,我们一般都是0
eMMC时和SD一样,[7:4]是0110
NAND模式时,[7]固定为1,而[6:4]查手册可以发现
[6]是NAND的协议模式,一般我们都用0
[5:4]决定了块的页大小,这个要看NANDFlash的手册了。