参考朱老师视频课程,稍加整理,视频教程http://edu.51cto.com/lecturer/user_id-9584512.html
S5PV210内存映射表
S5PV210内存映射中只有一块接ONENAND/NAND和SD/MMC0、SD/MMC2通道启动,如果选择的是NandFlash启动,这一段代码会去跳到ONENAND/NAND 区域读取Bootloader,如果启动失败,整个系统便启动失败,如果选择的是SD卡启动,这一段代码则会先跳转到SD/MMC0区域读取Bootloader,如果启动失败,则会跳转到SD/MMC区域读取Bootloader,如果两次都失败,则系统启动失败,因为S5PV210 的外部SD/MMC启动只有两种:SD/MMC0和SD/MMC2。S5PV210工支持4个SD/MMC通道,其中SD/MMC0和SD/MMC2一次用作启动,SD/MMC0通道用于连接板载MMC,因此外部启动时只能使用SD/MMC2通道,注意SD/MMC3不能启动。
相关概念
内存:
SRAM 静态内存 特点:容量小,价格高,优点是不需要软件上电初始化,直接上电就可以用。
DRAM 动态内存 特点:容量大,价格低,缺点是上电后不能直接使用,需要软件进行初始化才可以使用。
单片机中:内存需求量小,开发简单,适合全部用SRAM
嵌入式系统中:内存需求量大,而且没有NorFlash等可启动的介质。
PC机:内存需求量大,软件复杂,不在乎DRAM的初始化开销,呵呵全部用DRAM
外存:
NorFlash:特点是容量小,价格高,优点是可以和CPU直接总线连接,CPU上电可以直接读取,所以一般用作启动介质。
NandFlash:特点是容量大,价格低,缺点是不能总线访问,即CPU不能上电直接读取,需要CPU先运行启动介质初始化NandFlash后,才可以通过时序接口读写NandFlash。
PC :很小容量的NorFlash + 大容量的硬盘(类似于NandFlash) + 大容量的DRAM
单片机 : 很小容量的NorFlash + 很小容量的SRAM
嵌入式系统 :SoC内置的SRAM + 外接的大容量NandFlash + 外接的大容量DRAM
因为NorFlash价格比较高,所以嵌入式系统中倾向于不使用NorFlash,而使用内置的小容量SRAM做启动介质
S5PV210使用的启动方式是:SoC内置的 SRAM + 外接的大容量NandFlash + 外接的大容量DRAM
实际上210的启动还要更好玩一些,210内置了一块96KB大小的SRAM(iRAM),同时还内置了一块64KB大小的NorFlash(iROM)。
210的启动过程大致是:
- CPU上电后先从内部的iROM中读取预先设置的代码(BL0),执行。这一段iROM代码首先做一些基本的初始化(CPU的时钟,关看门狗。。) (这一段iROM代码是三星出厂前已经内置好的,因为三星也不知道每个人需要用到什么样的DRAM,所以这一段iROM不能负责外接的DRAM和NandFlash的初始化,因此这一段代码其实就是SoC内置的一段代码,跟用户没关系);然后这一段代码会判断我们选择的启动模式(我们可以通过硬件的跳线更改板子的启动模式,即OM0-OM5这六个引脚),然后从相应的外部存储器去读取第一部分启动代码(BL1,大下为16KB)到内部的iRAM.
- 从iRAM去运行刚上一步读取来的BL1(16KB),然后执行,BL1负责初始化NandFlash,然后将BL2读取到iRAM(剩余的80KB),然后运行。
- 从iRAM运行BL2,BL2负责初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束。
BL0负责
- 关看门狗
- 初始化指令cache
- 初始化栈
- 初始化堆
- 初始化块设备复制函数device copy function
- 设置SoC的时钟系统
- 复制BL1到内部IRAM(16KB)
- 检测BL1的校验和
- 跳转到BL1去执行
官方介绍的启动详解图