【北京迅为】i.MX6ULL终结者i.MX6ULL启动方式

I.MX6ULL支持多种启动方式,可以从EMMC、SD卡、NAND FLASH、USB、QSPI等设备启动。通过查看《IMX6ULL参考手册.pdf》手册的第8章System Boot,我们可以了解到i.MX6ULL在上电以后,芯片ROM里面固化的程序会根据BOOT_MODE[1:0]寄存器的值来选择启动方式。
BOOT_MODE[1:0]寄存器的值有两种方式可以修改:一种是采用eFuses(熔丝)的方式;另一种是通过设置BOOT_MODE[1:0]对应的GPIO的状态。我们在平常使用的时候基本都是采用设置BOOT_MODE[1:0]对应的GPIO状态来选择启动方式的。
BOOT_MODE[1:0]对应的GPIO引脚是BOOT_MODE1和BOOT_MODE0,如图 1所示:在这里插入图片描述

图 1

BOOT_MODE1和BOOT_MODE0这两个引脚在芯片内部默认有100K的下拉,所以这两个引脚在悬空状态下默认是低电平(0)。我们把这两个引脚引到了底板上,并连接到了拨码开关上,拨码开关对应的另一端通过10K电阻接到了3.3V电源上,这样我们可以通过拨码开关来设置这两个IO的状态了(高电平或低电平)。如图 2所示:

在这里插入图片描述

图 2

从上面的截图,可以看到如果我们要设置BOOT1和BOOT0为高电平我们需要将对应的拨码开关设置到“ON”位置,这样就通过10K电阻上拉到3.3V,芯片内部有100K的下拉,所以此时这两个IO的电平是:100/(10+100)*3.3V=3V,属于高电平。
从参考手册我们看到BOOT_MODE[1:0]两个IO可以设置四种状态,对应着四种启动方式,如图 3所示:

在这里插入图片描述

图 3

从上图可以看到BOOT_MODE[1:0]:设置为00的时候从Fuses启动,设置为01的时候串行下载,设置为10的时候内部Boot模式,设置为11作为保留使用。我们用到的是“串行下载”和“内部Boot”模式这两种。
首先我们来看下“串行下载”,它是指可以通过USB接口(板子的OTG1接口)将代码下载到板子上然后运行。通过此方式我们可以实现开发板镜像的烧写(我们将在后面章节介绍具体的烧写方法)。
然后我们看下“内部Boot模式”,它是指在此种模式下,芯片会执行内部ROM里面固化的boot程序。这段程序会进行硬件的初始化,然后从Boot设备(EMMC、SD卡、NAND FLASH)中读取出镜像到内存中。如果在“内部Boot模式”运行过程中发生错误,则会进入“串行下载模式”。
当BOOT_MODE设置为“内部Boot模式”后,i.MX6ULL可以从SPI,EIM,NOR,SD,MMC,QSPI等设备启动,同时也可以配置相应的参数(例如SD的总线宽度,速度等等)。启动设备和对应的参数我们可以使用eFUSEs的方式设置,也可以通过GPIO来配置(我们主要使用GPIO的方式)。下面我们来看一下如何通过GPIO设置启动设备。
从参考手册我们可以看到启动设备主要通过三组IO来设置,他们分别是BOOT_CFG1[7:0],BOOT_CFG2[7:0],BOOT_CFG4[7:0]这三组IO。如图 4所示:

在这里插入图片描述

图 4

从上图我们可以看到这三组决定启动设备的IO正好用到的RGB的24根数据IO,在i.MX6ULL芯片刚开始上电的时候这24个IO先作为“选择启动设备”的功能来使用,在ROM中的固化程序把启动镜像从启动设备加载到内存,并开始从启动镜像(Uboot)开始运行的时候,这24个IO就可以当做RGB来使用了。
现在我们来总结一下,i.MX6ULL启动流程:首先根据BOOT_MODE的两个IO(BOOT_MODE1,BOOT_MODE0)先确定启动方式,如果是串行下载模式,就会进入USB启动模式。如果是“内部Boot”启动方式,然后就根据BOOT_CFG1,BOOT_CFG2,BOOT_CFG4这三组IO的配置来决定从哪种设备启动(读取启动镜像到内存,并开始启动)。
接下来我们看下BOOT_CFG1,BOOT_CFG2,BOOT_CFG4这三组IO是怎么配置启动方式的,在我们的底板原理图上有如图 5:

在这里插入图片描述

图 5

上图中最左侧一列是支持的启动设备,后面的每一列分别对应BOOT_CFG的IO,我们可以看到决定启动方式的是由BOOT_CFG1和BOOT_CFG2这两组IO决定。大家也许觉得这么多IO需要配置,操作起来太麻烦了,实际上这些IO中大部分都是默认下拉的,需要配置的只有6个,从我们的原理图可以看到(因为我们用了一个8位的拨码开关,其中有两位是BOOT_MOD的),如图 6所示:

在这里插入图片描述

图 6

从上面的原理图我们可以看到8位的拨码开关一端上拉到3.3V,另一端分别接到了BOOT_MODE1,BOOT_MODE0,BOOTCFG2[3],BOOTCFG1[3],BOOTCFG1[4],BOOTCFG1[5],BOOTCFG1[6],BOOTCFG1[7]。所以我们设置启动方式,只需要修改这8位(有两位是BOOT_MODE)IO的状态,我们看下负责启动方式的这6个IO的含义,如下表所示:

在这里插入图片描述

根据上面的表格,我们设置开发板分别从串行下载,EMMC,SD卡,NAND FLASH启动的时候,可以按照下面的表格设置,如下表:

在这里插入图片描述

下面是i.MX6ULL终结者底板上的拨码开关输入图片,如图 7所示:

在这里插入图片描述

图 7

上图中的8位拨码,拨到上面“ON”位置就是1,拨到下面就是“0”,8位拨码按照表2.1中的设置就可以按照对应的方式启动。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/BeiJingXunWei/article/details/108398755