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
並運行。