内存
SRAM:静态内存
缺点是容量小,价格高
优点是不需要软件初始化,上电就能用
DRAM 动态内存
容量大,价格低,上电后不能直接使用需要软件初始化。
笔记本、嵌入式、手机等。就是平常用的内存条。
单片机中:内存需要量小,希望开发尽量简单,适合全部用sram.
pc机中:内存需求量大,而且软件复杂,不在乎dram的初始化开销,适合全部用dram.
嵌入式系统:内存需求量大,而且没有Norflash等可启动介质
外存
Norflash:特点是容量小,价格高,优点是可以和cpu直接总线式相连,CPU上电后可以直接读取, 所以一般用作启动介质。
Nandflash(跟硬盘一样):特点是容量大,价格低,缺点是不能总线式访问,也就是说不能上电cpu直接读取,需要cpu先运行一些初始化软件,然后通过时序接口读写
所以一般PC机都是:BIOS(Norflash)+硬盘(类似于Nandflash)+大容量的DRAM。启动时从bios启动,负责初始化硬盘和DRAM。
一般的单片机的flash也全是norflash。很小容量的Norflash+很小容量的sram.
嵌入式系统:因为Norflash很贵,所以很多嵌入式系统倾向于不用norflash,
直接用外接大容量Nand+外接大容量DRAM+soc内置的SRAM.
S5PV210使用的启动方式是外接大容量Nand+外接大容量DRAM+soc内置的SRAM.
实际上210的启动还要更复杂一些。210内部内置了一块96kb大小的SRAM(iRAM),同时还有一块内转的64k大小的Norflash(Irom)。
210的启动过程大致是:
- CPU上电后先从内部Irom中读取预先设置的代码(BL0),执行。这一段IROM代码首先做了一些基本的初始化(CPU时钟,关看门狗……)。这一段IROM代码是三星出厂前设置的,三星也不知道我们板子上将来接什么DRAM,因此这一段IROM是不能负责初始化外接的DRAM的。这一段代码只能初始化CPU内部的东西。然后这一段代码判断我们启动的模式(通过硬件的跳线)。然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16K)到SRAM()。
- 从SRAM去运行上一部读取来的BL1(16KB),BL1负责初始化NandFlash,然后将BL2读取到IRAM(剩余的80K)
- 从IRAM运行BL2,LB2初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束。
思路:因为启动代码的大小是不定的,有些公司的可有96K就够了,有些公司可能1MB都不够。所以刚才说的2步启动有些地方不合适。三星的解决方案是:把启动代码分为两半(BL1,BL2),这两部分协同工作来完成启动
BL0做了什么?
- 关看门狗
- 初始化cache
- 初始化栈
- 初始化堆(初始化堆和栈之后,C语言程序才能运行)
- 初始化块设备的复制函数
- 设置soc的时钟系统
- 复制BL1到内部的IRAM(16K)
- 检查BL1的校验和
- 安全启动相关工作
- 跳转到BL1去执行
S5PV210的启动过程
先1st启动
再2sd启动 SD卡通道2启动
如果失败再Uart启动
如果失败再USB启动
参考 S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf