S5PV210支持多种启动模式,通过外部引脚OM[5:0]来选择相应的启动模式,引脚配置对应的启动模式见下图。一般设计中是不会用到Nor flash,因为Nor flash速度慢,不可能用来直接执行代码,都是要加载进RAM执行,代码存储可以根据实际情况选择eMMC、Nand flash等板载固化存储器。
其中,sd/mmc channel 0、Nand、eSSD、OneNand作为第一启动设备,如果第一启动设备失败,则尝试第二启动设备(sd/mmc channel 2),如果再失败,则尝试UART启动,再失败,则是USB启动,若再失败,则停止启动流程。
为了支持外部设备的启动,S5PV210内置了64K ROM以及96K SRAM。其中64K ROM代码位于0x00000000,是三星固化进芯片的代码,称为BL0。在上电复位后,BL0代码最先执行,BL0首先关闭看门狗,初始化指令Cache、堆栈、功能函数、PLL及系统时钟后,拷贝用户代码(BL1)到内部SRAM 0xD0020000处,通过检验和检验BL1代码是否正确,如果失败,则尝试第二启动设备启动,检验成功,则跳转到用户的BL1代码执行。
用户的BL1代码最大16K,可以在BL1处初始化最基本的系统参数,如DRAM初始化,堆栈的重新设置、协处理器等的初始化,然后加载BL2(或者直接内核)到相应的RAM位置,最后跳转到BL2(或内核)执行。
由于BL0代码要检验BL1的代码,正确才能执行,因此BL1代码有特定的格式要求。BL1代码在最开头必须包含4个字的信息头,第0个字以及第2个字将会被BL0用来检验代码的正确性,因此这两个字必须如实反映BL1代码的情况。第0字为BL1代码的大小(Byte),最大16k,第2个字为BL1代码的检验和,BL0根据BL1代码的大小计算出相应的检验和,再与信息头的第2个字比较,若一致,则跳转到BL1执行,否则认为检验失败,尝试第二启动设备。
除此之外,对于OneNand/Nand启动设备,BL0除了检验BL1的检验和之外,还会检验Nand ECC数据,BL1在烧录进Nand设备时,还应生成相应的8/16位ECC数据,写入到Nand spare区的指定位置,不然ECC校验失败也将无法从Nand设备启动。
附录:
SdBoot.exe工具以及使用手册: http://pan.baidu.com/s/1i3CeAS9