A20支持从NAND Flash、SPI NOR Flash、SD card(SDC 0/2)和USB启动。当系统上电时,首先检测Boot Select Pin(BSP)管脚,如果为低电平,则直接从USB启动,否则尝试从MMC0启动,如果启动失败则尝试从NAND启动,如果启动失败则尝试从MMC2启动,如果启动失败则尝试从SPI NOR启动,如果启动失败则尝试从USB启动,整个启动过程如图1所示。
图1 A20启动过程
下面以MMC0启动为例进行分析。当系统从MMC0启动时,首先会读取TF卡从8KB开始的数据,一共读取24KB,读到内部SRAM的0地址开始处,如图2所示,然后校验所读取数据的头部是否正确,如果正确则从0地址开始执行指令(相当于mov pc, #0)。从这里可以知道当我们想写裸机程序(u-boot也是一个裸机程序)的时候,需要在编译好的bin文件前面加上一个指定的头部,而且这个头部的第一条指令是一条跳转指令,跳到程序真正开始的地方,这样程序才能被正确执行。
图2 拷贝TF卡里的数据到内部SRAM