1 内存与外存
内存是RAM : 如DRAM、SRAM、DDR等,内存的特点是CPU通过地址总线和数据总线来访问。
外存是ROM : 如FLASH(NOR FLASH、NAND FLASH)、硬盘等
2 常用外存
2.1 NOR FLASH
像内存一样,可以总线随机访问。成本较高,但是稳定性也高,不易坏。
2.2 NANDFLASH
不提供地址总线式的访问,要在外部加主控和电路设计才能进行读写访问,且必须以区块的方式读写,不能随机访问。关键是容易出现坏块和位翻转等问题,所以需要进行ECC校验等管理手段。NANDFLASH用的多的主要原因是:便宜。
NANDFLASH从工艺上分为SLC、MLC、TLC
- SLC = Single-Level Cell ,即1bit/cell,速度快寿命长,价格超贵(约MLC
3倍以上的价格),约10万次擦写寿命 - MLC = Multi-Level Cell,即2bit/cell,速度一般寿命一般,价格一般,约3000—10000次擦写寿命
- TLC = Trinary-Level
Cell,即3bit/cell,速度慢寿命短,价格便宜,约500次擦写寿命,目前还没有厂家能做到1000次。性能较前面两种较差!
NANDFLASH具体的应用有以下几种:
- eMMC(iNAND、MoviNAND)
eMMC是指满足MMC协议的芯片,eMMC=NANDFLASH+控制器+标准封装接口。而iNAND和MoviNAND则是两个公司生产的eMMC。前者是SanDisk公司的,MoviNAND是三星的,但是前者更便宜所以用的更多。
eMMC中的e代表的就是embeded。 - SD卡、TF卡、MMC卡
eMMC是闪存芯片,而这几个是卡片。这三个之间大同小异。 - eSSD
属于SSD固态硬盘的嵌入式MLC的NandFlash。
2.3 ONENAND
OneNand既实现NOR Flash的高速读取速度,又保留了Nand Flash的大容量数据存储的优点。但是由于所使用的接口线太多了,所以未广泛使用。
3 内外存总结
内存:
SRAM:可以直接上电使用;贵!
DRAM:上电后需要初始化才能使用;便宜
外存:
NorFlash:CPU可以直接总线访问,不需要初始化;贵!
NandFlash:需要初始化以后才能访问;便宜。
4 启动过程
无论是单片机还是PC机或是ARM设备,程序下载存储在外存(Flash)中的,如果CPU要开始执行程序,就需要把外存中的程序复制到内存(RAM)中。这就是启动过程的核心目的。
对于单片机:使用SRAM+NorFlash的组合。都是不需要初始化就可以直接使用的,由于程序不大,所以直接用SRAM和NorFlash就可以(贵点就贵点吧)
对于PC:由于所需要的内存和外存都很多,所以采用DRAM (即内存条)+NandFlash(即硬盘),这两者都是需要初始化才能使用的,所以PC中都有一块BIOS,它是一块NorFlash,BIOS中的固件程序完成内存条和硬盘的初始化,并将操作系统从硬盘加载到内存中,以此完成启动过程。
对于嵌入式ARM:所需要的内存和外存也是较多的,所以采用的是外部DRAM + eMMC(NandFlash),这两者是需要初始化才能使用的。但是与PC不同的是,嵌入式采用的是一种更加省钱的方式来启动:ARM芯片内部有一个内置SRAM(即iRAM),将eMMC中的初始化程序(bootloader)映射到SRAM中执行来完成启动。具体的启动过程如下所示。
从上图可可以看出,启动过程分成了5步,依次是:
- 上电以后,CPU被设定首先执行iROM中的程序(即BL0),BL0的作用是:关看门口、设置系统时钟、使能堆栈、检查启动方式等。
- iROM使用设备复制函数(Device Copy Function)将BL1从外存(如iNAND或SD卡等)复制到SRAM中,并跳到BL1的起始地址出开始执行。BL1的大小为16K。
- BL1将剩下的bootloader即BL2从外存加载到iRAM中。BL2为80K。
- BL2开始执行,初始化DRAM控制器并将OS从外存加载到DRAM中。
- OS开始执行,启动过程结束。
启动过程的详细流程图可以从文档中查到,在此不再赘述。在启动过程中有两点需要特别说明的地方:
启动过程的第一步讲到,iROM的功能之一是检查启动方式。S5PV210支持多种启动方式,如SD/MMC、eMMC、OneNand、Norflash、eSSD以及UART/USB,通过OM[5:0]引脚来设置启动方式是哪种。
下图左侧对应的是OM[5:0]引脚的取值,右侧部分则是不同取值时对应的启动方式。
S5PV210首次启动,如果校验出现错误,则会从SD的通道2启动,如果又出现错误的话,启动即失败。
- 上面讲述的启动过程实际上是可能有变化的,因为一般的bootloader编译完以后都超过200M,而iRAM只有96M放不下的,所以实际中会将BL1加载到iRAM,BL1初始化DRAM,并将BL2加载到DRAM中执行,然后BL2加载OS到DRAM。
Note:
0x1000_0000 : 256M
0x2000_0000 : 512M
规律:0x后面的第一位*256M = 代表的内存空间