IMx53上电后,进入的是其内部的Memory,从iMx53RM.pdf Chapter 2中可以查看到System Memory Map图如下:
从片内地址的0x0000_0000至0x0000_FFFF这64K是Boot Rom的空间,其固化有Boot Code。IMx53在硬件复位后会强制Arm内核从Boot Rom启动,运行Boot Code。
Boot Code会根据BOOT_MODE[1:0]的寄存器值、eFUSEs状态和GPIO Setting来完成从不同的boot devices启动,Serial Downloader from UART or USB、Device Configuration Data、Digital signature based High Assurance Boot。Boot Devices包括包括NOR FLASH、NAND FLASH、OneNAND FLASH、SD/MMC、Parmllel ATA/Serial ATA HDD、Serial ROM devices(EEPROM等)。
BOOT_MODE[1:0]对应PIN脚为C18、B20,BOOT_MODE的值会在RESET复位的上升沿进行一次采样(仅此一次),并保存在BOOT_MODE寄存器中,之后不论PIN脚电平的变化,均不会改变BOOT_MODE寄存器的值。BOOT_MODE的定义如下图所示:
BOOT_MODE[1:0]为0b00时,选择Internal Boot模式启动,在此模式下,启动设备和参数的选择根据BT_FUSE_SEL、eFUSEs、GPIO Setting来选择启动的设备和参数。当BT_FUSE_SEL为1(fuse is blown),boot参数是由eFUSEs决定的,它是第一次烧录时选择的devices和参数的保存值;当BT_FUSE_SEL为0(fuse is unblown),此时eFUSEs的部分值将被GPIO pin的状态来覆盖,从而选择不同的devices和参数进行启动。GPIO pin的定义及覆盖的eFUSEs值见下图:
由于这些GPIO在产品开发时会被使用,飞思卡尔建议Internal Boot模式启动的参数由eFUSEs来决定,只是保留GPIO这种模式用作开发和测试时使用。
BOOT_MODE[1:0]为0b01,保留!
BOOT_MODE[1:0]为0b10,选择Boot From FUSES模式启动,在此模式下,GPIO pin的状态将被忽略,直接选择eFUSEs的设置来进行启动。当BT_FUSE_SEL为0时,说明boot devices还没有被烧录,将直接跳到Serial Downloader模式。当BT_FUSE_SEL为1时,将按照eFUSEs的设置启动系统。一般选择此模式启动,如果BT_FUSE_SEL为1,但是eFUSEs设置对应的设备又不存在时,系统也会自动跳转到Serial Downloader模式,并在重新抄录成功后,改变eFUSEs的值,从而避免硬件boot devices的更改而芯片已经烧录过无法更新eFUSEs的问题。
BOOT_MODE[1:0]为0b11,选择Serial Downloader模式启动。通过USB或者UART进行系统程序下载。
eFUSEs的说明见下表:
对应于devices及其参数的选择由BOOT_CFG来决定,在此不再赘述,仅列出通过ESDHC boot的参数如下: