说起存储器有些工程师可能会觉得很陌生,但说起RAM、ROM、Flash,那么即使没搞过嵌入式这行的也基本都听说过这些名词,而对于嵌入式工程师来说,这些更是经常要打交道的电子器件,但很多时候我们对它们的了解仅停留在表面上,今天就让我们深入了解一下嵌入式平台中一些常见的存储器。
1. RAM
RAM的英文全称是(Random Access Memory),翻译为中文叫做随机访问存储器,之所以叫随机访问,意思是可以访问存储器中任意地址的数据。一个RAM的内部结构中通常由地址译码器、存储阵列以及读写电路这三个部分组成;
根据存储阵列的使用材料以及内部结构不同,RAM又被分为DRAM(Dynamic Random Access Memory)和SRAM(Static Random Access Memory)。
(1) DRAM
DRAM中的存储阵列是通过一个电容来实现的,电容充电则表示1,电容放电则表示0。
但使用电容作为存储单元存在两个问题:
第一,电容充电放电都需要时间;
第二,电容保持电荷的时间有限,需要每隔一段时间重新刷新一次补充电荷,每次读写访问后会影响到电容电荷也需要重新刷新一次数据。
而且在刷新周期内,由于DRAM只有一套地址译码系统,所以是阻塞访问的。根据DRAM的刷新策略不同,刷新一次所需要的时间也不同,一般来说如果采用集中刷新的方式,大概每2ms需要刷新一次刷新每行需要0.1us。
为了提高DRAM的读写速率并提升吞吐量,后来推出了SDRAM(Synchronous Dynamic Random Access Memory),在DRAM基础上增加了一个同步时钟,使用流水线的方式访问DRAM;
但SDRAM只是利用单边沿进行工作,后来增加了双边沿工作的DRAM,就是著名的DDR(Double Data Rate)双倍速率访问SDRAM,也就是我们PC机上常用的内存芯片。
后续还有DDR2、DDR3以及DDR4,时钟速率和技术标准上进行了改变。
真正的DRAM内部有一套复杂的状态机,这里有一篇关于DRAM的时序技术讲的比较通俗易懂的文章,这里推荐一下:
另外,对于嵌入式平台来讲,DRAM其实还有个致命的问题,就是费电,由于需要频繁地进行刷新,所以DRAM的功耗很难降下来。
(2) SRAM
SRAM的存储单元由一个D触发器组成:
由于D触发器存在两个稳态,可以分别用来表示0和1;
由于SRAM的存储位是由晶体管驱动,所以存取速度要远高于DRAM。
但由上图可知SRAM的构成,每个存储单元内D触发器至少需要4个晶体管,而上面的DRAM只需要一个晶体管和一个PN结电容,而在当前的实际产品中SRAM每个存储单元通常集成6个晶体管,设置还有8个、10个晶体管的,这也就导致了同样存储容量的SRAM要比DRAM昂贵很多。
由于访问速度快,管理简单,所以一般嵌入式芯片内部集成的RAM都是SRAM。
无论是DRAM还是SRAM,都是易失性存储器,也就是断电之后数据会丢失。
2. ROM
ROM的英文全称是(Read Only Memory),也就是只读存储器。
(1) ROM
最早期的ROM在生产之后内容就不可更改,参考上一小节中RAM的组成结构,ROM在存储单元部分用一个接地的晶体管代表0,没有晶体管则代表1:
由于此种ROM在生产时使用一种特殊的光罩作为掩模(Mask),所以这种ROM也叫Mask ROM或者掩模ROM。
这样生产的好处是:
第一,节省空间和成本;
第二,防止任何情况下的数据被窜改;
但缺点也是明显的,只能为某个产品生产专门的ROM芯片,不利于生产通用型号。
(2) OTP ROM
后来就有了熔丝型ROM(fuse-programmable ROM),在出厂时每一个存储单元都有一个晶体管,同时晶体管与地之间存在一个可容断的电阻丝:
通过在指定存储单元加上足够大的电流就可以熔断电阻丝,从而实现数据的一次性写入,但由于电阻丝熔断之后就再也无法恢复,所以只能烧写一次,这种ROM也叫OTP ROM,即One Time Programmable一次可编程ROM。
也有一种设计不使用电阻丝的,而是使用肖基特二极管,初始时处于反向截止状态,编程时通过大电流将二极管永久击穿,也可以实现OTP ROM。
(3) EPROM与EEPROM
随着技术的发展,人们已经不满足ROM器件只能进行一次写入,于是后来以色列工程师Dov Frohman发明了可通过紫外线进行反复擦除的ROM,称为EPROM(Erasable Programmable ROM),原理十分简单,由于存储单元使用了浮动栅晶体管,结构如下所示:
EPROM由于擦写麻烦,于是就有了E2PROM(Electrical Erasable PROM)。
E2PROM与EPROM的基本原理是差不多的,都是利用了具有两层栅结构的场效应管。
要想理解这种存储单元的工作原理,首先要回顾一下场效应管的工作原理:
我们一N沟道场效应管为例:
当在栅极增加一定电压时,源极和漏极中的电子就会涌向栅极,但被氧化层阻隔,于是堆积在源极和漏极之间形成电流使得源极和漏极导通:
浮动栅场效应管在栅极下面增加了一层由氮化物构成的浮动栅,由于氮化物具有可以存储电荷的电荷势阱,所以浮动栅场效应管就具有了存储状态的能力。
浮动栅中在没有电子注入的情况下场效应管处于截止状态,为‘1’,当浮动栅中被充入了电子就相当于在栅极增加了电压,源极和漏极导通状态,为‘0’,这也正是为什么Flash芯片在擦除之后默认的数据是0xFF;
EPROM的编程和擦除的过程也就是对浮动栅充、放电的过程。
为浮动栅注入电子一般有两种方法,一种叫做热电子注入法,也叫做雪崩注入,利用在漏极和栅极上增加一个大电压,使电子获得足够能量穿透氧化层到达浮动栅中的电荷势阱。另一种是利用FN隧道效应,不过关于什么是FN隧道效应,量子力学我不大懂,这里就不乱讲了。
为浮栅放电,一般都是利用FN隧道效应的方法。
在早期的嵌入式产品中,E2PROM十分常用,一般有SPI和I2C两种接口,当时由于单位容量上E2PROM价格要比Flash价格低,而且E2PROM可以按位访问,所以应用比较普遍。
但近些年Flash成本越来越低、容量也越来越大,E2PROM在嵌入式平台上已经逐步被Flash所取代了。
(5) Flash ROM
目前Flash技术一共分为两种,NAND-Flash与NOR-Flash,与E2PROM一样,都是利用了浮动栅场效应管,但内部结构略有不同。
NOR-Flash内部结构与EPROM类似,但多个单元共用同一个源极,所以擦写的时候只能成片擦除。
由于NOR-Flash使用热电子注入法进行编程,并且每个存储单元配有单独的位线,所以可以实现阵列中数据的随机访问。
NAND-Flash由于内部存储单元串行连接,所以无论是擦写还是编程都必须以页为单位。NAND-Flash读写和擦除均使用FN隧道方式。
由于热电子注入的写入速度远低于FN隧道方式的写入,所以NOR-Flash的写入速度远低于NAND-Flash;
而且热电子注入对氧化层的损耗较大,所以NOR-Flash的擦写次数远低于NAND-Flash。
同时,由于NOR-Flash中的导线比较多,所以芯片集成密度远低于NAND Flash;
关于NAND-Flash与NOR-Flash更详细的内容,请参看这篇博客:
(注:如有侵权行为请及时与我联系)