X2000內部集成了32KB Boot ROM,CPU上電復位后先執行Boot ROM中的程序。
X2000芯片上的三個引腳 BOOT_SEL0, BOOT_SEL1, BOOT_SEL2 決定了X2000的啟動方式。
默認情況下,開發板的CON1和CON2兩個跳線帽連接2-3插針,把BOOT_SEL0和BOOT_SEL2通過下拉電阻接地,因此默認的啟動方式為SFC0@PE3.3V;如果將兩個跳線帽連接1-2插針,
把BOOT_SEL0和BOOT_SEL2上拉至1.8V,則啟動方式可以更改為MSC0@PD1.8V。
CPU啟動時,首先執行Boot ROM中的代碼,引導程序進行一些基本的初始化動作(主要是SPI控制器初始化)之后,將SPI Flash上的輔助程序裝載器(Secondary Program Loader, SPL)裝入SRAM中。X2000中集成了32K SRAM,其地址范圍為0xB2400000 ~ 0xB2408000。
SRAM的內存布局如上圖所示,其中開頭的4K用於堆棧和數據空間。因此引導程序會跳轉到0xb2401000處開始執行SPL代碼。spl signature (512B)用於存儲啟動類型信息,隨后的 sc boot keys (1.5K)用於安全引導,spl.text(不到22K,512字節對齊)是真正的代碼段。
之所以需要SPL,是因為SRAM數量有限(X2000只有32KB),通常uboot可執行文件的大小遠遠大於SRAM大小,而此時DRAM尚未初始化,因而DRAM不可用。SPL將初始化DRAM,將uboot裝入內存並跳轉去執行。
啟動順序大體上是:
Boot ROM --> SPL --> uboot --> kernel
類似於X86 PC的啟動順序:
BIOS --> MBR --> GRUB --> kernel