imx6q的启动方式

少则得,多则惑。—— 老子 《道德经》

imx6q的boot mode

imx6q的boot mode的选择是根据BOOT MODE的寄存器,而BOOT MODE的寄存器是由在POR的上升沿采集BOOT_MODE0和BOOT_MODE1引脚决定的。imx6q的启动方式如下表
imx6q的启动方式_第1张图片
我的板子的BOOT_MODE0和BOOT_MODE1分别是0和1,也就是上表的Internal Boot,也是大多数开发阶段使用的模式。

BT_FUSE_SEL的设置

内部启动Internal Boot的启动方式由efuse中的BT_FUSE_SEL熔丝决定的,BT_FUSE_SEL默认是0。BT_FUSE_SEL是1的时候,imx6q的启动方式由efuse中的BOOT_CFG[1~4]决定;BT_FUSE_SEL是0的时候,imx6q的启动方式由GPIO中的BOOT_CFG[1-4]决定。

GPIO中的BOOT_CFG[1-4]

我的板子的BOOT_CFG[3-4]都是连接到GND,即都是0。BOOT_CFG[1~2]的连接原理图如下图所示。
imx6q的启动方式_第2张图片
BOOT_CFG[1-2]的各个bit的含义如下表
imx6q的启动方式_第3张图片
imx6q的启动方式_第4张图片
根据上面的原理图,总结如下

BOOT_CFG1 0 1 2 3 4 5 6 7
State 0 0 0 0 S5 S6 S7 0
BOOT_CFG2 0 1 2 3 4 5 6 7
State 0 0 0 S1 S2 S3 S4 0

其中S1 - S7是拨码开发,可以将引脚连接到0或者1。

我们最常用的是模式是,正常启动模式和烧写模式。下面分别介绍他们的设置方法。

  • 从eMMC启动的设置
    我的开发板固件是烧写在eMMC上的,所以BOOT_CFG1[7:4]设置成011x。也就是S6和S7要设置成1。这里不使用eMMC的fast boot模式,所以BOOT_CFG1[4]设置成0,即S5为0。
    S3和S4用来设置eMMC的总线宽度,这里设置的是非DDR模式的4bit,所以S4为0,S3为1。S1和S2用来选择使用哪个USDHC接口的,根据原理图,使用的是USDHC-4,所以S1和S2都设置成1。

  • USB烧写模式的设置
    本来可以通过修改BOOT_MODE0和BOOT_MODE1引脚的高低电平进入USB烧写模式,但是板子上已经将上面的两个引脚固定成Internal Boot模式,所以可以参考如下说明
    imx6q的启动方式_第5张图片
    让boot code无法正确启动即可。比如设置BOOT_CFG1让芯片从SD卡启动,也就是把S6设置为0,但是板子也不插上SD卡,imx6q就可以进入usb烧写模式 了。

你可能感兴趣的:(#,嵌入式Linux之旅--裸机篇)