AM335X SD/MMC 的RAW模式启动
am335x上电时会启动内置的RomCode段代码,该段程序的功能是检测外部启动方式,根据SYSBOOT引脚的配置情况按照固定的启动顺序去寻找有效的Uboot_spl
,本文就RomCode
在raw
模式下如何识别MMC/SD Card中的Uboot_spl
做说明。
在raw
模式下,可以将Uboot_spl.bin
放置在4个固定位置,分别是0x0/0x2000/0x40000/0x60000,因此Uboot_spl.bin
不应该大于0x20000(128KB),但实际使用的Uboot_spl.bin
大小不应该大于109KB,其原因是因为am335x
的内部SRAM
大小为127K(0x402F0400-0x4030FFFF),但实际上0x4030B800-0x4030FFFF这段SRAM
被RomCode
所使用,因此实际可供Uboot_spl.bin
所使用的最大的容量为109K(0x4020F0400-0x4030B7FF)。
RamCode
在查找Uboot_spl.bin
时,先在0x0地址上查找TOC
信息,0x0地址上第一个字的内容不为0xFFFFFFFF和0x00000000且TOC
内容中有CHSETTINGS
字段,则去第二个section(512KB)处获取GP Header
,根据GP Header
内的信息拷贝Uboot_spl.bin
至目标地址并启动。
因此在制作启动卡时,在第一个section(512字节)中需要放置一块TOC
信息表(最多放置两块TOC
表,每一块32字节,彼此首尾相连),第二块TOC必须填充为0xFF。紧跟TOC
表后的两个字内容为Magic number
,其内容必须为0xC0C0C0C1
和0x00000100
,在第一个section中,除了TOC
和Magic number
,其他内容必须为0x0
第二个section中包含2个字的GP Header
以及Uboot_spl.bin
,其中Size为Uboot_spl.bin
的大小,Destination
为需要将Uboot_spl.bin
加载的目标地址,一般为0x402F0400
RomCode
识别到TOC
和GP Header
后即将Uboot_spl.bin
加载至内部SRAM
并运行。