根据《IMX6ULL参考手册》第8章:System Boot
根据上面文章截图,启动逻辑是根据三种东西来决定的:
1.内部寄存器 BOOT_MODE[1:0]
2.多种eFUSEs状态(我们这里不关心)
3.GPIO设置
从上图中也可以看出,改芯片可以支持多种设备启动:nor flash,nand flash,onenand flash,SD/MMC,Serial(SPI) NOR flash and EEPROM,QuardSPI(QSPI) flash
接下来我们研究BOOT_MODE[1:0]和GPIO是怎样影响启动的,我们现在用的启动方式都是SD
一 参考手册 BOOT_MODE[1:0]
《IMX6ULL参考手册》第8章 8.2.1 Boot mode pin settings
00:从FUSE启动(只能修改一次,所以我们不适用)
01:串行下载(需要用到NXP提供的一个软件,一般用来最终量产)
10:内部BOOT模式(执行内部boot ROM代码,我们用的就是这种模式。我们选择用SD卡启动明明是一个外设,为什么却是选择内部boot启动呢?这是因为先让芯片执行内部rom中的一段由芯片厂商写好的boot程序,它会再根据其他GPIO来决定从哪个外设接着启动程序)
11: 保留
二 参考硬件原理图
从硬件原理图看出,启动除BOOT_MODE1和BOOT_MODE0有关外,还与LCD_DATA11,LCD_DATA3,LCD_DATA4,LCD_DATA5,LCD_DATA6,LCD_DATA7有关。下图是从《IMX6ULL参考手册》中找到GPIO与eFUSE值有关对应的图
上面这张图相当于最左变一列列出所有与启动相关的GPIO,最右边一列是把左边的GPIO取别名为BOOT_CFG,并且分成三组,每组8bit,分别为BOOT_CFG1,BOOT_CFG2,BOOT_CFG4。
最后面请看文字详细解释。
图1
图2
图3
图4
图5
图6
1.先看图3,这是24个GPIO芯片内部电路图,分别由GPIO名字和对应BOOT_CFG名字。
2.还是看图3,LCD_DATA16(BOOT_CFG4[0]) ~ LCD_DATA23(BOOT_CFG4[7])在芯片内部都是直接接地的,接着看图2,没有与拨码开关相连,所以这8位一直是0。如果想了解这8位每位代表什么意思,可以参考图6
3.同理所有没连到拨码开关上的GPIO都是0。视频里说图3的DNP相当于也是接地。BOOT_CFG1[0] ~ BOOT_CFG1[7]具体解释在图4,BOOT_CFG2[0] ~ BOOT_CFG2[7]具体解释在图5。实际起作用的就是与拨码开关连上的那几个。
4.由图1可知,如果想要SD启动的话,由图1可知,BOOT_CFG1[7:4]=010X,由图4可知,BOOT_CFG1[4]的含义是:0-Regular 1-Fast Boot,这里我们选择0
有一个错误的地方,图3,芯片内部下拉电阻是47K,但是从《IMX6ULL数据手册中》第103页,内部下拉电阻都是100K
假如把LCD_DATA6的拨码开关打开,VCC3.3V会先经过一个4.7K电阻,再经过内部一个100K电阻,最后接地,所以3.3-3.3*4.7/(4.7+100)= 3.15V,是高电平输入到芯片引脚。