本帖最后由 yuanlai2010 于 2014-7-10 19:20 编辑
Helper2416启动详情
参与Helper2416开发板助学计划心得
前几天发过一篇有关于S3C2416启动流程的帖子,写的不够详细。在参阅老版本的S3C2416用户手册和Helper2416底板、核心板原理图之后,重新写了这篇帖子,希望对大家有所帮助。
在老版本的用户手册中有这样一张图
比较详细的说明了几种启动方式的配置参数;
下面在查看Helper2416的相关原理图:
核心板原理图(1)
核心板原理图(2)
核心板原理图(3)
底板原理图(4)
由上原理图(3)(4)可以知道当SW7按下或者跳线帽接通1、2时,OM[3]为高电平,否侧为低电平。
由上原理图(2)可以知道当OM[3] = 1 时,OM[1] = OM[2] = 0;当OM[3] = 0 时,OM[1] = 1 ; OM[2] = 0。
结合原理图(1):当按下SW7或者跳线帽接通1、2时,OM[4;0] = 01000 为IROM启动模式;否侧 OM[4;0] = 00010 为Nand启动模式。
IROM启动:
IROM启动即先执行芯片固化代码(在0x0位置处),固化代码先进行初始化芯片,如设置系统时钟,初始化堆栈等,随后会再根据相关引脚的配置([GPC7:GPC5]),确定启动设备是SD/MMC还是NAND,对于IROM NAND启动,固化代码从[GPC7:GPC5]的引脚配置状态得出NANDFLASH的信息,如页大小,地址周期多少。之后固化代码再从NANDFLASH的0x0地址偏移出读出8k的代码到内部RAM地址0x40000000处,这块8k的IRAM就被叫做Steppingstone。因为这8k的IRAM代码往往需要进一步引导用户的其它代码到RAM运行。对于IROM SD/MMC启动,固化代码会直接从SD/MMC卡的一个特殊位置读出8k的代码到0x40000000处的Steppingstone。复制完代码到Steppingstone后,固化代码跳转到0x40000000处开始执行用户的代码。
核心板原理图(5)
由原理图(5)可以知道GPC[7;5] = 000 ;即IROM选择SD/MMC作为启动设备,这就是Helper2416 SD卡启动的具体方式,是通过IROM来实现的。
IROM的大概运行流程
1. Disable the Watch-Dog Timer
2. Initialize the Block Device Copy Function. (see “Device Copy Function” on chap 2.6)
3. Initialize the stack region (see “memory map” on chap 2.4)
4. Initialize the PLL. (see “clock configuration” on chap 2.7)
5. Initialize the instruction cache
6. Initialize the heap region. (see “memory map” on chap 2.4)
7. Copy the BL1 to the stepping stone region (see “Device Copy Function” on chap 2.6)
8. Verify the integrity of BL1
9. Jump to the stepping stone
Nand启动:
NAND启动模式下,NAND控制器会自动从NAND FLASH 0x0地址偏移处拷贝8k的代码到内部RAM地址0x0处,用户代码从0x0处开始执行。从Samsung给出的S3C2416数据手册来看,较新的数据手册都已经把NAND启动[OM4:OM0]引脚配置以及内存映射信息都删除了,因此Samsung是推荐用户从IROM NAND启动的,因为这样用户代码可以统一处理IROM SD/MMC或IROM/NAND,而不用考虑过多的启动模式。
所以我还是建议BOSS下一版的核心板都用IROM启动比较好!
论坛ID:yuanlai2010
发表时间:2014-07-10