Booting for IMX31
转自:coryxie.blogspot.com
1)Boot Type的判断
当上电复位期间,CPU采样外部Pins的BOOT[3..0],结合IC标示模块
(IIM)中的保险丝的INT_BOOT位的状态判断Boot Type;如果
INT_BOOT位烧断,则直接从0地址执行;否则才根据BOOT[3..0]
作进一步判断是否从内部的iROM启动或者是从外部内存启动。
因此INT_BOOT位具有更高的优先权。
2)Endian Mode的选择
CPU本来是以Little Endian模式启动的,但是如果启动配置通过
BOOT[3..0]选择了外部启动,则可以进一步通过IIM的BIG_ENDIAN
保险丝位来选择Big Endian模式。
3)用RAM Loader进行Flash ROM Image的下载和烧写
上电复位后,启动代码从0地址开始执行,并检查HAB_TYPE,
确认是0b001(即用于开发模式),并且BOOT[3..0]=0b0000,
则进行一些初始化和安全性检查,并通过UART或USB下载。这里面
实际上包括两个阶段:先是初始化一个与PC机的通道,用来初始化
SDRAM;接着再下载Flash Loader和Flash Image;再接着调用
Flash Loader来将Flash Image烧写到Flash ROM。当然,其中还有
通过HAB校验的过程。所以最重要的还是初始化SDRAM的过程。
4)通过iROM启动
上电复位后,启动代码从0地址开始执行,并检查HAB_TYPE,
确认是0b001(即用于开发模式),并且BOOT[3..0]的配置是使用
FLASH(NAND or NOR)启动,则进行一些初始化和安全性检查,并
调用HAB进行完整性校验,然后跳转到FLASH的启动地址执行。这
应该就是常规的bootloader(u-boot或者redboot)的启动方式。