i.MX53 上电启动过程

1. BOOT_MODE[1:0] 内部寄存器

RESET_B上升沿时,BOOT_MODE[1:0]从BOOT_MODE0和BOOT_MODE1两个引脚获取初始值。
(BOOT_MODE[1:0]的值可以从SRC_SBMR寄存器的BMOD[1:0]域读到)



2. Boot eFUSE

(1) BT_FUSE_SEL

* BOOT_MODE[1:0]=0b00
  BT_FUSE_SEL=0, SBMR的值由GPIO决定。
  BT_FUSE_SEL=1, SBMR的值由eFUSE设置(BOOT_CFG1/2/3)。

* BOOT_MODE[1:0]=0b10
  BT_FUSE_SEL=0, 启动设备(如Flash,SD/MMC)未编程过,启动流程跳到Serial Downloader。
  BT_FUSE_SEL=1, 继续执行常规启动(BOOT_CFG1/2/3)。

一块板子第一次使用,i.MX53中的eFUSES设置很可能是不正常的。上电后,BOOT ROM可能会尝试从一个
不存在的设备上启动。使用"Boot From Fuses"就没有这个问题:

首次使用时,BT_FUSE_SEL=0,使得启动直接跳到Serial Downloader。这样可以先加载一个bootloader,
然后再烧写image到启动设备上。然后再写BT_FUSE_SEL=1,下次启动就会按照eFUSE里的配置来进行了。

这样不用调整BOOT_MODE[1:0](拉高/拉低BOOT_MODE引脚的电平)就可以完成烧写过程。(烧写到最后再将BT_FUSE_SEL blown掉)。



从eMMC启动:
0. MMC时钟频率最早设置为357.143KHz,经过初始化之后会上升到20MHz或40MHz。
1. 从eMMC中复制2Kbyte数据到CPU内部RAM。这2Kbyte数据中包括IVT,DCD和Boot Data structures。
2. 检查数据格式。进行DCD配置。

使用Mfgtools烧写的最后,会对/dev/mxc_iim做一些写操作,就是用来设置eFUSE中的一些位。

使得板子正常启动是按BOOT_MODE[1:0]>eFUSE->eMMC(BOOT_CFG1/2/3)顺序进行的。


echo "0x804 0x10" > /dev/mxc_iim : BT_FUSE_SEL=1
echo "0x80c 0x60" > /dev/mxc_iim : BOOT_CFG1[7:5]=0b011 (eMMC)
echo "0x810 0xc0" > /dev/mxc_iim : BOOT_CFG2[7:5]=0b110 (8-bit DDR)
echo "0x814 0x20" > /dev/mxc_iim : BOOT_CFG3[5:4]=0b10 (ESDHCV3-3)



原文地址:https://www.cnblogs.com/sammei/p/3295619.html