S5PV210 使用的启动方式是:外接的大容量 Nand Flash 硬盘 + 外接的大容量 DRAM 内存 + SoC 内置 SRAM。
实际上 210 的启动还要更好玩一些,210 内置了一块 96KB 大小的 SRAM(叫 iRAM),同时还有一块内置的 64KB 大小的 NorFlash(叫 iROM)。
210 的启动过程大致是:
第一步:CPU 上电后,先从内部 IROM(NOR Flash)中读取预先设置的代码,执行。这一段 IROM 代码首先做了一些基本的初始化(CPU时钟、关看门狗···)(这一段 IROM 代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的 DRAM 内存,因此这一段 IROM 是不能负责初始化外接的 DRAM 内存 的,因此这一段代码只能初始化 SoC 内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取启动代码到内部 SRAM(叫 iRAM)。
第二步:从 SRAM(叫 iRAM) 去运行刚上一步读取来的启动代码,然后执行。这一段启动代码就会负责初始化 Nand Flash 硬盘, 初始化 DRAM 内存 ,初始化板卡,然后将 OS 从 Nand Flash 硬盘读取到 DRAM 内存 , 然后运行。


思路:因为启动代码的大小是不定的,有些公司可能 96kb 就够了,有些公司可能 1MB 都不够。所以刚才说的两步的启动方式不合适。三星的解决方案是:把启动代码分为两半(BL1 和 BL2),这两部分协同工作来完成启动。
实际的启动方式如下:
第一步:CPU 上电后先从内部 IROM 中读取预先设置的代码(BL0),执行。这一段 IROM 代码首先做了一些基本的初始化(CPU 时钟、关看门狗···)(这一段 IROM 代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的 DRAM 内存,因此这一段 IROM 是不能负责初始化外接的 DRAM 内存的,因此这一段代码只能初始化 SoC 内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部 SRAM(叫 iRAM)。
第二步:从 SRAM(叫 iRAM)去运行刚上一步读取来的 BL1(16KB),然后执行。BL1 负责初始化 NandFlash 硬盘,然后将 BL2 读取到 SRAM(叫 iRAM)(剩余的 80KB)然后运行
第三步:从 SRAM(叫 iRAM)运行 BL2,BL2 初始化 DRAM 内存,然后将 OS 读取到 DRAM 内存中,然后启动 OS,启动过程结束。



device copy function 的解释
The S5PV210 internally has a ROM code of block copy function for boot-u device. Therefore, developer may not needs to
implements device copy functions. These internal functions can copy any data from memory devices to SDRAM. User can
use these function after ending up the internal ROM boot process completely.
S5PV210内部有一个用于引导-u设备的块拷贝功能的ROM代码。因此,开发人员可能不需要实现设备复制功能。
这些内部函数可以将任何数据从内存设备复制到SDRAM。用户可以在完全结束内部ROM启动过程后使用这些功能。
也就是, IROM 代码(BL0)拥有针对各种启动介质(NOR Flash/eSSD/OneNand/Nand Flash)的块拷贝函数。因此,开发人员可能不需要实现设备复制功能。这些内部函数可以将任何数据从启动介质设备复制到SDRAM。用户可以在完全结束 IROM(BL0)阶段后使用这些拷贝函数,将 BL1 代码拷贝到 IRAM(internel SRAM)中执行。



1、210内部有 iROM 和 iRAM,因此启动时分两个阶段:内部启动阶段和外部启动阶段。对于内部启动阶段各种S5PV210的开发板都是相同的,对于外部启动阶段,不同开发板会有不同。
启动过程主要参考《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》
2、S5PV210出厂时内置了 64KB iROM和 96KB iRAM。iROM 中预先内置烧录了一些代码(称为 iROM 代码),iRAM 属于 SRAM(不需软件初始化,上电即可使用)。210启动时首先在内部运行 iROM 代码,然后由 iROM 代码开启外部启动流程。
为什么需要设计 iROM 和 iRAM?答案是为了支持多种外部设备启动。
3、Second boot support


4、使用 iROM 启动的好处
5、BL0做了什么?
6、S5PV210的所有启动

7、启动块分配指南
可以看到,对于 SD卡、MMc、eSSD的启动介质,BL1 代码应该拷贝到启动介质的 1 号扇区;
而对于其他启动介质,BL1 代码应该拷贝到启动介质的 0 号扇区。

8、 Header information data for Boot Code description
The BL1 must have header data. The header data is used for being copied to internal SRAM by iROM code.
The header data has two information. One is size of BL1 and Another is checksum data of BL1.
BL1必须有报头数据。报头数据被用于通过iROM代码复制到内部SRAM。
头数据有两个信息。一个是BL1的大小,另一个是BL1的校验和数据。

When loading BL1, iROM check size of BL1 in header data and copy BL1 to internal SRAM.
After coping BL1, iROM sum data of copied BL1 and compare it to checksum data in header data of BL1.
If it is success, BL1 start. otherwise iROM will try second boot(4-bit SD/MMC) from SDMMC channel 2 port.
当加载BL1时,iROM检查头数据中BL1的大小,并将BL1复制到内部SRAM。
拷贝BL1后,将复制的BL1的iROM数据求和,并将其与BL1头数据中的校验和数据进行比较。
如果成功,BL1开始。否则iROM将尝试从SDMMC通道2端口进行第二次引导(4位SD/MMC)。

B站朱友鹏老师.
参考文档:
《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》
《S5PV210_UM_REV1.1.pdf》