君正X2000开发板试用体验之二:君正X2000引导过程分析

X2000内部集成了32KB Boot ROMCPU上电复位后先执行Boot ROM中的程序。

X2000芯片上的三个引脚 BOOT_SEL0, BOOT_SEL1, BOOT_SEL2 决定了X2000的启动方式。

 

默认情况下,开发板的CON1CON2两个跳线帽连接2-3插针,BOOT_SEL0BOOT_SEL2通过下拉电阻接地,因此默认的启动方式为SFC0@PE3.3V;如果将两个跳线帽连接1-2插针,

BOOT_SEL0BOOT_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(不到22K512字节对齐)是真正的代码段。

之所以需要SPL,是因为SRAM数量有限(X2000只有32KB),通常uboot可执行文件的大小远远大于SRAM大小,而此时DRAM尚未初始化,因而DRAM不可用。SPL将初始化DRAM,将uboot装入内存并跳转去执行。

启动顺序大体上是:

Boot ROM --> SPL --> uboot --> kernel

类似于X86 PC的启动顺序:

BIOS --> MBR --> GRUB --> kernel

 

posted @ 2020-07-20 10:59  brep  阅读(1989)  评论(0编辑  收藏  举报