三星S5PV210开发之外部存储器介绍和启动模式分析

内存: 内部存储器,用来运行程序的。 RAM(DRAM SRAM DDR)
外存: 外部存储器,用来存储东西的。 ROM(硬盘,flash,nand/inand,U盘,SSD)

cpu连接内存和外存的方式不同:
内存是cpu直接通过地址总线和数据总线访问的
好处是直接访问,随机访问,坏处是占用CPU的地址空间,大小受限。

外存是通过cpu的外存接口来实现的,好处是不占用地址总线,坏处是访问速度没
有访问内存快,访问时序复杂。

SOC常用的外部存储器
NorFlash 特点:接到SROM BANK,可以总线式访问,一般用来启动
NandFlash 特点:分为slc和mlc(容易坏块)
EMMC/iNand/MoviNand 特点:EMMC(embeded MMC)内部电路自动管理坏块
OneNand 特点:三星公司出的
SD/TF/EMMC/ 特点:都是SD卡
ESSD 特点:固态硬盘,内部电路自动管理坏块


启动模式分析:
内存:
SRAM 静态内存 特点是容量小,价格高,优点是不需要软件初始化,上电就可以使用
DRAM 动态内存 容量大,价格低,缺点就是上电后不能直接使用,软件初始化后才能使用

外存:
Norflash 容量小,价格高,能与CPU总线相连,上电后可以直接读取,用作启动介质
Nandflash 跟硬盘一样,容量大,价格低,缺点是不能总线访问,需要先初始化

嵌入式系统的启动方案:直接用外接大容量nand + 外接 DRAM  + soc内部SRAM
实际上210的启动方式更复杂些,210内置了一块大小为96KB的SRAM(IRAM),同时还有一块

内置64KB大小的NorFlash(iROM)

下图为三星为V210SOC设计的启动方案:

三星S5PV210开发之外部存储器介绍和启动模式分析

三星S5PV210开发之外部存储器介绍和启动模式分析

1,IROM初始化系统时钟,启动设备

2,IROM可以加载Boot-loader到SRAM中,这部分boot-loader被称为BL1,IROM中的代码会校验BL1的完整性。

3,BL1在SRAM中被执行,并且将剩余的Boot-loader(BL2)加载到SRAM中,并且BL1代码会校验BL2代码的完整性。

4,BL2在SRAM中被执行,初始化外部DRAM,并加载OS到外部DRAM

5,最后跳转到OS地址处执行。


总结一下s5pv210的启动过程:
第一步:CPU上电后先从内部IROM中读取预先设置的代码,执行。这一段IROM做了一些
基本的初始化(CPU时钟,关看门狗),这一段IROM(BL0)是三星出厂前设置的,三星不知道客户
将来使用什么样的DRAM,所以这段IROM代码不能负责初始化外接DRAM,因此这段代码只能初
始化SOC内部的东西。然后这段代码还会判断我们选择的启动模式,然后从相应的外部存储器
读取第一部分启动代码(BL1,大小为16K)到SOC内部的SRAM中执行。
第二步:从SRAM去运行上一步读取到的启动代码(BL1)。BL1负责初始化NandFlash,然后将BL2
加载到IRAM,BL2初始化DRAM,然后将OS读取到DRAM中,启动过程结束。

思路:因为启动代码的大小是不固定的,有些公司可能96K就够了,有些可能1M都不够,所以
上面讲到的这个启动方式不太合适。
三星的解决方案是:把启动代码分为2部分(BL1)和(BL2),两部分协同工作完成启动

BL1负责初始和NandFlash和加载BL2到SRAM,BL2负责初始化外部DRAM把OS加载到SDRAM中运行。


IROM内部启动所执行的流程如下:

三星S5PV210开发之外部存储器介绍和启动模式分析

1,关看门狗
2,初始化指令cache
3,初始化栈
4,初始化堆
5,初始化块复制函数
6,设置SOC时钟系统
7,辅助BL1(16kb)到内部SRAM
8,检查BL1的校验和
9,检查是否处于安全启动模式

10,跳转到BL1去执行


下面是三星V210启动流程图:

三星S5PV210开发之外部存储器介绍和启动模式分析

分析:上电后运行IROM中的程序->关看门狗,初始化Cache->判断是否处于休眠模式,是则直接跳转到后面加载OS,

否则->初始化SOC内部->读引脚电平选择启动模式->校验和,失败则选择Seconed启动,成功则->读取eFuse的值,判断

是否为安全启动,是安全启动的话再校验BL1是否完整,非安全启动直接跳转到BL1部分执行。BL1部分同样判断当前状

态是否是休眠,如果是则直接跳转到OS处,否则->加载BL2到SRAM,同样判断是否为安全启动,最后跳转到BL2部分,

BL2部分负责初始化DRAM,并且加载OS到DRAM中,最后跳转到DRAM中运行OS。


当第一启动失败后,就会尝试第二启动:

三星S5PV210开发之外部存储器介绍和启动模式分析

第一启动失败->从第二启动外设中加载BL1代码到SRAM->校验和,成功就直接执行BL1,否则->从UART启动,失败则从->USB

启动。