在嵌入式开发中,每天都在跟ROM/Flash、RAM/SDRAM打交道,还有那些默默无闻的片内SRAM和EEPROM。但是对SDR/DDR等概念的区分始终不是那么透彻,故网罗相关资料,系统整理了一下ROM/RAM等存储设备的概念。
1存储设备
1.1 存储设备概述
存储设备是用于储存信息的设备或设备。通常是将信息数字化后再以利用电、磁或光学等方式的媒体加以存储。
常见的存储设备有:(1)利用电能方式存储信息的设备如:各式存储器,如各式随机存取存储器(RAM)、只读存储器(ROM)等;(2)利用磁能方式存储信息的设备如:硬盘、软盘、磁带、磁芯存储器、磁泡存储器;(3)利用光学方式存储信息的设备如:CD或DVD;(4)利用磁光方式存储信息的设备如:MO(磁光盘);(5)利用其他实体物如纸卡、纸带等存储信息的设备如:打孔卡、打孔带等。
具体驱动设备的例子如:磁带机 (magnetic tape machine)、软磁盘 (floppy diskette drive)、硬磁盘 (hard disk drive)、固态硬盘(Solid State Disk)、光盘机 (CD drive 或 DVD drive)、纸带穿孔与读取机 (punch-tape machine)。
1.2 主存储器和辅助存储器
存储器的种类很多,按其用途可分为主存储器和辅助存储器。由于寄存器和高速缓存一般是属于硬件配置范畴,故一般所说的主存储器主要是指内存,外部存储器主要是指硬盘(也称磁盘)。
内存的特点是存取速率快,一般用来存储运算时的数据。我们平常使用的程序,如Windows操作系统、打字软件、游戏软件等,一般都是安装在硬盘等外存上的,但仅此是不能使用其功能的,必须把它们调入内存中运行,才能真正使用其功能。我们平时输入一段文字,或玩一个游戏,其实都是在内存中进行的。就好比在一个书房里,存放书籍的书架和书柜相当于电脑的外存,而我们工作的办公桌就是内存。通常我们把要永久保存的、大量的数据存储在外存上,而把一些临时的或少量的数据和程序放在内存上,当然内存的好坏会直接影响电脑的运行速度。
1.3 随机存取和易失性
1.3.1随机存取
所谓“随机存取”,指的是当存储器中的信息被读取或写入时,所需要的时间与这段信息所在的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系(如磁带)。
计算机的主存储器可以被随机的访问,典型的位置信息使用内存的物理地址,无论存储的内容怎么变化,物理地址是不变的。卷起的磁带没有地址定位,当我们想听某一首歌曲时,只能靠手工快进或倒带模糊定位。
1.3.2 易失性
内存一般为非永久性或易失性存储器(Volatile Memory),在断电的时候,将失去所存储的内容。内存储器的作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
外存储器是指除CPU寄存器、高速缓存和内存以外的存储器,此类存储器一般断电后仍然能保存数据。通常称这类存储器为永久性或非易失性存储器(Non-volatile Memory),常见的外储存器有硬盘、软盘、光盘、U盘等。
1.3.3 刷新
现代的随机存取存储器依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0。由于电容器或多或少有漏电的情形,若不作特别处理,电荷会渐渐随时间流失而使数据发生错误。刷新是指重新为电容器充电,弥补流失了的电荷,需要刷新正好解释了随机存取存储器的易失性。
2易失性存储器
易失性存储器(Volatile memory)是指当电流关掉后,所存储的数据便会消失的电脑存储器。
RAM(Random Access Memory,随机存取存储器),存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。
2.1SRAM(Static RAM, 静态随机存取存储器)
SRAM中的每一bit存储在由4个场效应管(M1,M2, M3, M4)构成两个交叉耦合的反相器中。另外两个场效应管(M5, M6)是存储基本单元到用于读写的位线(Bit Line)的控制开关。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。然而,当电力供应停止时,SRAM储存的数据还是会消失。
SRAM易于控制,随机访问快速、功耗低(特别是在空闲状态),因此SRAM主要用于带宽要求高或者功耗要求低的场合。SRAM一般主要集成于芯片内:(1)作为微控制器的RAM或者L1 Cache(通常从32 B到128KB);(2)作为强大的微处理器的主cache,如x86系列与许多其它CPU(从8 kiB到几百万字节的量级);(3)作为寄存器(参见寄存器堆);(4)用于特定的IC或ASIC(通常在几千字节量级),例如交换芯片PCU单元中的Rx/Tx FIFO缓存;(5)用于FPGA与CPLD;(6)LCD显示器或者打印机也通常用SRAM来缓存数据。
由于复杂的内部结构,SRAM比DRAM的占用面积更大,且SRAM比DRAM更为昂贵,因而不适合用于更高存储密度低成本的应用,如PC机内存。DRAM由于具有较低的单位容量价格,所以被大量的采用作为系统的主存。
2.2 DRAM(Dynamic RAM,动态随机存取存储器)
DRAM利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。由于在现实中电容会有漏电的现象,导致电位差不足而使记忆消失,因此除非电容经常周期性地充电刷新,否则无法确保记忆长存。由于这种需要定时刷新的特性,因此被称为“动态”存储器。相对来说,“静态”存储器(SRAM)只要存入数据后,纵使不刷新也不会丢失记忆。同SRAM,当电力供应停止时,DRAM存储的数据也会消失。
与SRAM相比,DRAM的优势在于结构简单——每一个比特的数据都只需一个电容跟一个晶体管来处理,相比之下在SRAM上一个比特通常需要六个晶体管。正因这缘故,DRAM拥有非常高的密度,单位体积的容量较高因此成本较低。但相反的,DRAM也有访问速度较慢,耗电量较大的缺点。由于DRAM的性价比很高,且扩展性也不错,是现今一般电脑主存的最主要部分。
2.3 SDRAM(Synchronous DRAM,同步动态随机存取存储器)
同步动态随机存取内存是有一个同步接口的动态随机存取内存(DRAM)。通常动态随机存取内存(DRAM)是有一个异步接口的,这样它可以随时响应控制输入的变化。而SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行流水线操作。这使得SDRAM与没有同步接口的异步RAM(Asynchronous DRAM)相比,可以有一个更复杂的操作模式。
传统的SDR(SDRAM)只能在信号的上升沿进行数据传输,而新一代DDR SDRAM却可以在信号的上升和下降沿都进行数据传输。所以DDR内存在每个时钟周期都可以完成两倍于SDRAM的数据传输量,这也是DDR的意义——Double Data Rate,双倍数据速率。
DDR SDRAM(Double-Data-Rate SDRAM,双倍数据率同步动态随机存取存储器)为具有双倍数据传输率的SDRAM,其数据传输速度为系统时钟频率之两倍,由于速度增加,其传输性能优于传统的SDRAM。DDRSDRAM在系统时脉的上升延和下降延都可以进行数据传输。
DDR2 SDRAM(Double-Data-Rate Two SDRAM,第二代双倍数据率同步动态随机存取存储器),是一种电脑存储器规格。它属于SDRAM家族的存储器产品,提供了相较于DDR SDRAM更高的运行性能与更低的电压,是DDR SDRAM(双倍数据率同步动态随机存取存储器)的后继者(增加至四倍),也是现时流行的存储器产品。
DDR3 SDRAM(Double-Data-Rate Three SDRAM,第三代双倍数据率同步动态随机存取存储器),是一种电脑存储器规格。它属于SDRAM家族的存储器产品,提供了相较于DDR2 SDRAM更高KSEG0的运行性能与更低的电压,是DDR2 SDRAM(四倍数据率同步动态随机存取存储器)的后继者(增加至八倍),也是现时流行的存储器产品。
目前DDR3内存在DRAM领域占据了85%到90%的份额,DDR4内存的标准规范已经制定完成,三星、海力士等也早都陆续完成了样品,预计到2014年才会正式登场亮相,并在不久的将来普及成为新的主流规格。
需要指明的是SDRAM在加电后,并不能立即使用,需要进行初始化,设置好参数才能保存数据。SDRAM还需设置内存的刷新时间,如果设置时间不对,就不能保存数据了。
3非易失性存储器
非易失性存储器中,依存储器内的数据是否能在使用电脑时随时改写为标准,可分为二大类产品,即ROM和Flash memory。
3.1 ROM(Read Only Memory,只读存储器)
常用于存储各种固定程序和数据,一般在出厂时经特殊的工序将资料烧录其中(program written when manufactured),在系统停止供电的时候仍然可以保持数据。ROM中的内容只能读不能改写,一旦烧录进去,用户只能验证写入的资料是否正确,不能再作任何修改。如果发现资料有任何错误,则只有舍弃不用。
PROM(Programmable ROM,可编程程序只读内存),内部有行列式的镕丝,是需要利用电流将其烧断,写入所需的资料(programmed after manufacture),但仅能写录一次。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1), 以实现对其“编程”的目的。PROM的典型产品是“双极性熔丝结构”。
EPROM(Erasable Programmable ROM,可擦除可编程ROM),芯片可重复擦除和写入,解决了ROM芯片只能写入一次的弊端。EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据(erased with UV light),完成芯片擦除的操作要用到EPROM擦除器。EPROM内资料的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压(VPP=12—24V,随不同的芯片型号而定)。EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。
EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM),其可通过高于普通电压的作用来擦除和重编程(重写)。当计算机在使用的时候是可频繁地对EEPROM进行重编程,但EEPROM的寿命是一个很重要的设计考虑参数。EEPROM是一种特殊形式的闪存,其应用通常是个人电脑中的电压来擦写和重编程。EEPROM一般用于即插即用(Plug & Play),常用在接口卡中,用来存放硬件设置数据。
不像EPROM芯片,EEPROM不需从计算机中取出即可修改,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容。不必将资料全部洗掉才能写入,而且是以Byte为最小修改单位,彻底摆脱了EPROM Eraser和编程器的束缚。由于EEPROM的优秀性能,以及在联机操作的便利,它被广泛用于需要经常擦除的BIOS芯片以及闪存芯片,并逐步替代部分有断电保留需要的RAM芯片,甚至取代部份的硬盘功能(见固态硬盘)。它与高速RAM成为当前最常用且发展最快的两种存储技术。例如,厂家在出厂前把所有内存配置信息写到一个EEPROM里,让BIOS启动时通过I2C总线去读取内存条上的EEPROM参数,然后对内存进行初始化。
既然PROM、EPROM、EEPROM都是可编程的,但是为什么还称之为只读(Read Only)呢? 这个可能是指不能像访问主存那样被CPU按地址直接改写,而是要通过一定的电光手段才能擦除改写。
3.2 Flash
NVRAM(Non-Volatile RAM),即非易失性存储器,指广义上断电后仍能保持数据的存储设备。在多种NVRAM中,以闪存技术最为引人注目。
快闪存储器(Flash Memory)简称“闪存”,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据,同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。闪存的每一个记忆胞都具有一个“控制闸”与“浮动闸”,利用高电场改变浮动闸的临限电压即可进行编程动作。
在过去的20年里,嵌入式系统一直使用ROM(EPROM/EEPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM/EEPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。
闪存属于EEPROM的改进产品,EEPROM可以一次只擦除一个字节(Byte),但闪存的存储体通常被组织成块(Block),向闪存地址写之前要先擦除掉该地址的内容,并且对闪存的擦除粒度是单个块(Block)。
闪存芯片有两种形式:NOR和NAND。NOR(或非)用于存储嵌入式设备上的固件映象(firmware image),而NAND(与非)用作大容量、高密度、廉价的、但有瑕疵的存储器,通常是固态大容量存储介质,如USB笔驱动器和DOM。
NOR闪存芯片通过与通常RAM类似的地址线和数据线连接到处理器,可以像访问SDRAM一样,按照数据/地址总线直接访问。但NAND闪存芯片是通过I/O和控制线与设备连接的,只有8位/16位/32位甚至更多位宽的总线,每次访问都要将长地址分为几部分,一点点的分布传入才能访问NAND Flash。
3.2.1 NOR FLASH: (任意地址读数据,但按扇区写数据即扇区擦除)
NOR Flash属于芯片内执行(XIP, eXecute In Place),应用程序可以直接在其中运行,故一般用于存储嵌入式设备的启动代码。SoC复位后,bootstrap微码会自动将指令指针指向NOR Flash的零地址(after-reset starting point),开始执行这个地址所包含的指令。但是存放在ROM/Flash中的数据不能直接被修改,一般还是要将相应代码拷贝重定位到RAM中执行。
NOR Flash根据外部接口分为普通接口和SPI接口。普通接口的NOR Flash,多数支持CFI接口,所以一般也叫做CFI接口。CFI接口,相对于串口的SPI来说,也被称为并行(Parallel)接口。
普通的parallel/CFI/JEDEC接口的的Nor Flash的针脚比较多,芯片比较大。之所有会有SPI接口的,主要是相对CFI/Parallel的NOR Flash可以减少针脚数目,减少芯片封装大小,采用了SPI后的NOR Flash,针脚只有8个。
SPI Nor Flash每次传输一个bit位的数据,ParallelNor Flash每次传输多个bit位的数据(有x8和x16bit两种)。SPI Nor Flash比parallel便宜,接口简单点,但速度慢。
一般SoC芯片提供boot sel pin,供用户选择存储引导程序的Flash的类型。
3.2.2 NAND FLASH:(按扇区读数据,按扇区写数据即扇区擦除)
NAND闪存芯片与NOR不同,它们不是通过数据线和地址线连接到CPU的,而是通过一个称为NAND闪存控制器的特别电子元件与CPU对接的,许多嵌入式处理器集成了NAND控制器。因此,在NAND闪存上的代码不能直接执行,必须先复制到RAM才能执行。
NAND技术用在USB笔驱动器、DOM、CF内存卡和SD/MMC卡等设备中,模拟标准存储接口,比如基于NAND闪存的SCSI或IDE。一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息;而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的“闪盘”。
3.2.3 SD Card
SD Card(Secure Digital Card),直译成汉语就是“安全数字卡”。它是一种基于半导体快闪记忆器的新一代记忆设备,被广泛地应用于便携式装置上,例如智能手机、个人数码助理(PDA) 、数码相机和多媒体播放器(MP3、MP4)等。
SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。SD卡在24mm×32mm×2.1mm的体积内结合了SanDisk快闪记忆卡控制与MLC(Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏。
4 CMOS/BIOS
CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体,电压控制的一种放大器件,是组成CMOS数字集成电路的基本单元。在计算机领域,CMOS是主板上的一块可读写的RAM芯片,因为可读写的特性,所以用来保存BIOS设置完电脑硬件参数后的数据,这个芯片仅仅是用来存放数据的,一般都有128~256字节的容量。CMOS RAM芯片由系统通过一块后备电池供电,因此无论是在关机状态中,还是遇到系统掉电情况,CMOS信息都不会丢失。
BIOS(Basic Input Output System),直译就是“基本输入输出系统”。其实,它是一组固化到计算机内主板上一个ROM(EPROM或EEPROM)芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
主板上的BIOS芯片或许是主板上唯一贴有标签的芯片,一般它是一块32针的双列直插式的集成电路,上面印有"BIOS"字样。CMOS芯片通常都集成在主板的BIOS芯片里面,所以主板上一般看不到CMOS芯片,只能看到BIOS芯片。通过BIOS程序对电脑硬件进行设置,设置好的参数放在CMOS芯片里面。
新型计算机主板都采用Flash BIOS,使用相应的升级软件就可进行升级,Flash BIOS升级需要两个软件:一个是新版本BIOS的数据文件(需要到Internet网上去下载);一个是BIOS刷新程序(一般在主板的配套光盘上可以找到,也可到Internet网上去下载)。