什么是存储?
存储是一个很广泛的词,我们只知道它是存储数据的介质,却很难用更好的话概括清楚,我也不行,只能尽量。
这样,先来看几张图。
图1是金士顿的64G内存卡,图2 是PC端的内存条,图3 是生活中常用到的U盘。
这些就是存储技术呈现在日程生活中的应用,主要核心是存储芯片,然而这些严格来讲并不是具体的存储,而是存储芯片+外围设备组成的应用成品。
在存储芯片内真正起到存储作用的,是那些SRAM、DRAM、EPROM、EEPROM等记忆体。
存储是一个大家族,一代一代传承至今,存储种类已经复杂繁多,要把它们区分开来,遵循有一个准则:
是否是易失性。
所谓是不是易失性,就是指断电后里面的数据还会不会被保留下来。
这是早期存储领域不断发展,技术突破的一个方向,到了后来,易失性难题被解决了,速率和空间才成了另外的方向。
先配上一张存储的导图:
RAM
顾名思义,RAM这种存储器的特点就是随机存取,可将数据存放在任何1bit区域中,任何时候都可以读写,但是一旦断电,数据将不会被保留下来。如果你真的需要那份数据,那只能在还没断电之前将数据存储到一个长期的存储器中。
后来RAM又进一步分为SRAM和DRAM
SRAM
SRAM相比于它的先人RAM,读写速度要快很多,是目前读写数据最快的存储器,原理待会儿会说到。也正因为如此,造就了它相当昂贵的价格,厂家只能在苛刻的地方才会用到,像CPU的一级缓存和二级缓存。
DRAM
DRAM的读写速度,那就跟SRAM远远没法比了,虽然速率不如人,但是DRAM的容量可以做到很大,价格也比SRAM便宜,所以DRAM的用途会比SRAM广上很多。
SRAM和DRAM速率不同的原因:
虽然两者都是用RAM发展来的,但是他们的在RAM框架上对于数据存储的方式却完全不同。
SRAM是静态SRAM,它的静,就体现在是用寄存器来存储信息,只要保持供电电压不断,那么寄存器中的数据就会一直保留下去,就连刷新都不用。
DRAM是动态RAM,它的动,就体现在它会有一个刷新机制,因为它是用MOS管栅电容上的电荷来保存信息,即使在保持不断电情况下,因为栅电容会漏电,所以每个一段时间,就需要刷新机制来给电容补充电荷,并且每读出一段数据后也需要刷新一下。如果有朝一日,DRAM失去了刷新机制,即使供电不断,也没法长时间保留数据。
不过虽然他比SRAM多了个刷新机制,但是代价是值得的,因为是只用1个MOS,所以在一片鬼片上集成度可以很高,导致了他自身的容量也可以很高。
没错,我们打游戏的时候,内存条上的数据是每隔一段时间就会进行刷新的。刷新机制定期对栅电容进行检查,若电量大于满电量的1/2,则认为是高电平,是1,并把电容充满电,若小于满电量的1/2,则认为是低电平,是0,并把电容放电,以此来确保数据的连续性。
厂商们觉得DRAM还可以再开发一下,成为一个新的存储设备SDRAM,改进的地方在于增加了一个COU同步时钟,将通信方式改良成了同步通信,使得速率更快一步,不过只能在上升沿表示一个数据。
只能在上升沿表示一个数据,那是不是······
没错,开发商瞧准了这个点,又改良出了一个新存储设备——DDR SDRAM。
DDR SDRAM
这一次的改进的就是它一个时钟可以读写两次,上升沿和下降沿都能表示一个数据,这样一来,速率翻倍,再加上它继承来的DRAM的成本优势,让它在开发商和用户眼中具备了极高的地位。
DDR SDRAM经过一代代改良,已经出了一代、二代、三代、四代。现在PC上的内存用的最多的就是DDR SDRAM,我的电脑内存条用的DDR3,手机内存用的是DDR4。
那有没有既要数据保留,同时可以允许断电情况存在的存储器呢?有的。
ROM
ROM即使断电,里面的数据也不会丢失,而且任何时候都可以读取,没错,是读取,不是读写。这就是ROM的缺点,其内容数据不能随意更改,厂家一旦制作好了并写入数据,用户就再也无法写入了。
说的就是MASK ROM。
MASK ROM
里面的数据是厂家出产写好了,用户要想改,没有办法。
不过后来技术成熟了,ROM可以写数据了,不过只能是一次性或者得需要特殊方法。
最先出来的就是PROM。
PROM
这就是可编程ROM了,不过只能是一次性编程,用户只能写一次,一旦写入数据,恕不更改。
不过想想也还是很不方便的,试想一下要是用户一时手抖或者在测试中想更改什么参数,这一片就算是废掉了,得拿块新的。
后来随着技术成熟,出现了EPROM。
EPROM
EPROM可以多次擦除写入数据了,这可真是为开发者们带来了福音,不过很快就发现也挺难的,因为它只能在紫外线环境下才能擦除数据,这种特殊环境擦除再来的是实实在在的不方便,要在紫外线下照大半个小时才能擦除,一天下来也折腾不了几次,况且,普通开发者上哪弄来紫外线环境。
EEPROM。
这个像神一样的存储器,不知拯救了多少开发者出苦海,这是现在最普遍的ROM,电可擦除,只要供电,就能随意进行擦写操作。
不仅继承了随机访问的优点,断电后数据可保留百年,擦除次数可达百万。在可靠性高的同时,代价也非常明显,由于其电路复杂和成本较高,导致EEPROM无法做到大容量商用级别,目前都是几十K到几百K,超过512K的很少,之前公司做项目就用过EEPROM,见过最高的只到1024K。
但是这并不妨碍存储器成为热门存储器,衍生出了各式各样的EEPROM种类,甚至开发者们已经将EEPROM认为是ROM这类存储器的统称。
看的出来,即使像EEPROM这样方便的存储器,也存在着它的限制,市场有大容量需求,为了解决需求,开发商们就制作出了Flash。
Flash
严格上讲,Flash也是EEPROM的一种,所以继承了EEPRM的优良品质:断电保留、电擦除、百万次擦除。
Flash的改进之处在于不再像ROM那些用字节作为寻址单位,而是用“块”。
而以“块”作为寻址单位的优势在于:一是简化了电路,二是数据密度降低,从而导致了成本也降低了。以至于flash可以涉及EEPROM承担不了的大容量存储区域。
Flash在制作商也有两个种类,先来看看第一个NOR Flash。
NOR Flash
NOR 提供了完整的和分开的寻址和数据总线,所以能做到读写方式跟RAM一样,都是随机存取,访问Flash上的任何一片区域。
但是擦除仍要以“块”为单位,所以在NOR在擦除上是需要花费点时间,试想一下,你想写2K的数据,但是就要事先进行4K的擦除量,这样的操作也是有点冗余。还在如今的芯片频率都可以跑到很高,所以擦除也就是几ms的事情。
在应用上就很好理解了,NOR可以做到像ROM一样字节寻址,所以用户可以直接将NOR Flash中的程序读取出来直接运行,很多单片机上都会有一块NOR Flash来存放启动代码。
接下来是NAND Flash。
NAND Flash
NAND中数据线与地址线进行了复用,所以不能做到随机存取的能力,读和写只能老老实实一块一块形式来。
很容易就可以明白,没有随机存取的外部地址总线的连续存储,这种数据存储结构既决定了这种NAND用户不能直接运行NAND中的程序,同时读取速度慢、电路简单、数据密度大,体积小。
一切就导致了最真实的反馈——价格廉价。
而且,地址线和数据线复用,这种硬性条件导致它的读取速度很NOR比起来就慢了;但是在擦除和写入速度却变快了,因为是以“块”为单位进行写入,而且循环抹写次数是NOR的数倍甚至十倍。
更最重要的一点是,NAND可以标记坏块,就连制作商也没法保证每一块Flash做出来都是完好的,NAND就可以将那一块坏了跳过去,而NOR,随便一块坏了,整片Flash就废了。
NAND强调的是更高的性能,更低的成本,更小的体积,更长的使用寿命,适合用于存储大容量数据,像是一开始的图1储存卡、图3的U盘,甚至是固态硬盘这类大容量,采用的都是NAND,当然可会应用在嵌入式系统中用于存放文件系统和内核。
看,用NOR来存放起始程序(引导代码),用NAND来存放文件系统和内核文件。
一切都被市场安排得明明白白。
NADN Flash也有自己的衍生产品——EMMC。
EMMC
准确来说,这并不是一种新的存储器,在结构上就是NAND+主控IC。
这样的明显优势就是封装成了一个集成控制器,提供了一套标准接口来管理闪存,主要是针对手机或者平板等产品的内嵌式存储器标准格式,这样就使得开发商们可以专注于开发产品的其他部分。