存储器按照存储介质来划分,可以分为半导体存储器和磁表面存储器。半导体存储器是由半导体器件组成的,主要包括随机存储器(RAM:Random Access Memory)、只读存储器(ROM:Read Only Memory)和高速缓存(Cache):

随机存储器RAM:包括静态随机存储器SRAM(Static RAM)和动态随机存储器DRAM(Dynamic RAM)。SRAM不需要刷新电路就可以保存它内部存储的数据,相反,DRAM则要求每隔一段时间就要刷新充电一次,否则,内部的数据就会丢失,因此,SRAM具有较高的性能。但是,SRAM存在一个明显的缺点——集成度较低,这意味着,在设计产品时,在相同的容量下,DRAM内存产品体积较小,而SRAM却具有较大的体积,而且功耗较大。

SRAMS(Static RAM,静态随机存储器),不需要刷新电路,数据不会丢失,而且,一般不是行列地址复用的。但是他集成度比较低,不适合做容量大的内存,一般是用在处理器的缓存里面。像S3C2440的ARM9处理器里面就有4K的SRAM用来做CPU启动时用的。SRAM其实是一种非常重要的存储器,它的用途广泛。SRAM的速度非常快,在快速读取和刷新时能够保持数据完整性。SRAM内部采用的是双稳态电路的形式来存储数据。所以SRAM的电路结构非常复杂。制造相同容量的SRAM比DRAM的成本高的多。正因为如此,才使其发展受到了限制。因此目前SRAM基本上只用于CPU内部的一级缓存以及内置的二级缓存。仅有少量的网络服务器以及路由器上能够使用SRAM。

DRAM:Dynamic RAM,动态随机存取存储器,每隔一段时间就要刷新一次数据,才能保存数据。而且是行列地址复用的,许多都有页模式。SDRAM是其中的一种。

SDRAM(Synchronous DRAM,同步动态随机存储器),即数据的读写需要时钟来同步。其存储单元不是按线性排列的,是分页的。
DRAM和SDRAM由于实现工艺问题,容量较SRAM大。但是读写速度不如SRAM。
一般的嵌入式产品里面的内存都是用的SDRAM。电脑的内存也是用的这种RAM,叫DDR SDRAM,其集成度非常高,因为是动态的,所以必须有刷新电路,每隔一段时间必须得刷新数据。

只读存储器ROM:对于只读存储器ROM而言,在制造的时候,信息(数据或程序)就会被永久保存到ROM中,一般只能读出,不能写入,即使发生断电,ROM中的信息也不会丢失。ROM一般用于存放计算机的基础程序和数据,比如,BIOS就是一个永久保存在ROM中的一个软件,是操作系统输入输出管理系统的一部分,包含了自检程序、基本启动程序和基本的硬件驱动程序等,主要用来负责机器的启动和系统中重要硬件的控制和驱动,并为高层软件提供基层调用。

EPROM 
EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了PROM芯片只能写入一次的弊端。
EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。
EPROM内资料的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压(VPP=12—24V,随不同的芯片型号而定)。EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。 EPROM芯片在空白状态时(用紫外光线擦除后),内部的每一个存储单元的数据都为1(高电平)。

EEPROMEEPROM (Electrically Erasable Programmable ROM,电可擦可编程只读存储器),一种掉电后数据不丢失的存储芯片。EEPROM是可用户更改的只读存储器,其可通过高于普通电压的作用来擦除和重编程(重写),即可以在电脑上或专用设备上擦除已有信息并重新编程。不像EPROM芯片,EEPROM不需从计算机中取出即可修改,是现在用得比较多的存储器,比如24CXX系列的EEPROM。
在一个EEPROM中,当计算机在使用的时候是可频繁地重编程的,EEPROM的寿命是一个很重要的设计考虑参数。
EEPROM的一种特殊形式是闪存,其应用通常是个人电脑中的电压来擦写和重编程。
EEPROM一般用于即插即用(Plug & Play),常用在接口卡中,用来存放硬件设置数据,也常用在防止软件非法拷贝的"硬件锁"上面。

闪存(Flash)
闪存(FLASH)是一种非易失性存储器,即断电数据也不会丢失。因为闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM。   
闪存卡(Flash Card)是利用闪存(Flash Memory)技术达到存储电子信息的存储器,一般应用在数码相机,掌上电脑,MP3等小型数码产品中作为存储介质,所以样子小巧,有如一张卡片,所以称之为闪存卡。根据不同的生产厂商和不同的应用,闪存卡大概有U盘、SmartMedia(SM卡)、Compact Flash(CF卡)、MultiMediaCard(MMC卡)、Secure Digital(SD卡)、Memory Stick(记忆棒)、XD-Picture Card(XD卡)和微硬盘(MICRODRIVE)。这些闪存卡虽然外观、规格不同,但是技术原理都是相同的。

高速缓存(Cache):是介于内存与CPU之间的一级存储器,速度接近于CPU,一般而言它不会采用DRAM技术,而是使用昂贵但较快速的SRAM技术。

闪存通常包括NOR和NAND两种类型。NOR闪存是由Intel公司开发的,是一种随机访问设备,具有专用的地址和数据线(和SRAM类似),以字节的方式进行读写,允许对存储器当中的任何位置进行访问,这使得NOR闪存是传统的只读存储器(ROM)的一种很好的替代方案,比如计算机的BIOS芯片。而NAND闪存则没有专用的地址线,不能直接寻址,是通过一个间接的、类似I/O的接口来发送命令和地址来进行控制的,这就意味着NAND闪存只能够以页的方式进行访问。相对于NOR闪存而言,NAND闪存只需要更少的逻辑门就可以存储相同数量的位,因此,NAND闪存比NOR闪存体积更小,存储密度更大。就读取速度而言,NOR闪存要比NAND闪存稍快一些;就写入速度而言,NAND闪存要比NOR闪存快许多。NAND闪存执行擦除操作比较简单,只需要擦除整个块即可。NOR闪存进行擦除时,需要把所有的位都写为1。NOR闪存虽然具备更快、更简单的访问过程,但是,存储能力比较低,因此,比较适合用来进行程序的存储。NAND闪存可以提供极高的单元存储密度(当前单个芯片具备了32GB的存储能力),比较适合存储大量的数据,并且写入和擦除的速度也很快;此外,NAND闪存的读写操作单元通常是一个扇区的大小(即512KB),这使得NAND闪存和磁盘的行为非常类似。

闪存芯片是由一组数据存储单元阵列组成的,包含许多个块,每个块又包含许多个―页(通常是32 个页),一个页通常是512 字节,因为闪存被开发出来时的最初目的就是为了取代磁盘,因此,一个闪存页的大小和磁盘扇区大小保持了一致。一个页不仅包括数据区域(通常是512 字节),还包含了一个额外的、小的备用区域(通常是16 字节),或者称为―带外数据(OOB:Out of Band)区域,它是用来存储一系列的管理信息,包括:(1)错误纠正码;(2)和存储在数据区域中的数据对应的逻辑页面编号;(3)页面状态。在写数据的同时,就可以顺便把管理信息写入这些备用区域,额外开销有时候可以忽略不计。每个闪存页的状态可以是以下三种状态中的一种:(1)有效;(2)无效;(3)自由/擦除。当没有数据被写入一个页时,这个页就处于―擦除‖状态,这时,页中的所有位都是1。一个写操作只能针对处于擦除状态的页,然后把这个页的状态改变为―有效。异地更新会导致一些页面不再有效,它们被称为―无效页。
闪存的一个块通常包含32个页,因此,一个块的大小通常16KB,一般称这种闪存为―小块NAND闪存‖。但是,一些高端应用需要更快的写和擦除速度,因此,闪存生产商开始生产―大块NAND闪存,这类闪存中,一个块包含了64个页,每个页2212字节,因此,一个块的大小就是128KB。

NAND Flash作为一种比较实用的固态硬盘存储介质,有自己的一些物理特性,需要有基本的管理技术才能使用,对设计者来说,挑战主要在下面几点:

1.需要先擦除才能写入。
2.损耗机制,有耐久度限制。
3.读写时候造成的干扰会造成数据出错。
4.数据的保存期。
5.对初始和运行时候的坏块管理。

只有至少满足这些基本的管理技术,才能让NAND Flash成为一款可以使用的固态存储介质。(这里还没有谈到任何关于性能的地方,因为那是这些基本条件满足后的事。)

当满足了上面的5点后,才该谈到稳定,性能,耐久度,影响这些的5大因素为:

1.SLC和MLC
2.平衡磨损算法
3.透过坏块管理技术确保数据的完整性。
4.使用错误检测和校正技术
5.写入放大

只有满足了这些条件,才能得到一款理想中的完美的固态硬盘。


Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的如硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。

Flash的内部存储是金属-氧化层-半导体-场效晶体管(MOSFET),里面有个悬浮门(Floating Gate),是真正存储数据的单元。

数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于图中的控制门(Control gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth 来表示。

1.对于NAND Flash的写入(编程),就是控制Control Gate去充电(对Control Gate加压),使得悬浮门存储的电荷够多,超过阈值Vth,就表示0。

2.对于NAND Flash的擦除(Erase),就是对悬浮门放电,低于阀值Vth,就表示1。

NAND Flash的架构:

如上图所示,这是一个8Gb 50nm的SLC颗粒内部架构。

每个page有33,792个单元,每个单元代表1bit(SLC),所以每个page就是4096Byte + 128Byte(SA)。
每个Block有64个page组成,所以每个Block容量为262,114Byte + 8192Byte (SA)

page是NAND Flash上最小的读/写单位(一个page上的单元共享一根字符线Word line),块是最小的擦除单位(。不同厂牌不同型号颗粒有不同的page和block大小。

下图是个8Gb 50nm的SLC颗粒。

4KB的页尺寸,256KB的块尺寸。图中4096字节用于存储数据,另外128字节用来做管理和ECC用。

SLC 和 MLC 区别:

SLC主要针对军工,企业级应用,有着高速写入,低出错率,长耐久度特性。
MLC主要针对消费级应用,有着2倍容量于SLC,低成本,适合USB闪盘,手机,数码相机等储存卡。如今也被用于消费级固态硬盘上。

由上图可以看到,MLC和SLC虽然使用相同的电压值,但是电压之间的阀值被分成了4份,直接影响了性能和稳定性。主要有下面几点:

1.相邻的存储电荷的悬浮门间会互相干扰,造成悬浮门里的电荷不稳定出现bit错误,MLC由于阀值相比SLC更接近,造成出错几率更大。
2.MLC读写性能降低,写入更是降低50%以上,因为需要确认充入电荷的量,这需要更精确的处理。SLC只有0和1,也就是有和没有,而MLC会有00,01,10,11 4个状态,在充入电荷后还要去判断是哪个状态,自然就慢了。
3.因为上面说的,造成额外的读写压力,所以功耗明显增大。
4.因为额外的读写压力,造成闪存的写入耐久度和数据保存期受到影响。

eMLC和eSLC的耐久度提升是用牺牲了数据保存期和增加读写时间换来的。(也就是性能会更差点)


挑战1:需要先擦除才能写入。

当今的NAND Flash可以读/写一个page,但是必须以block大小擦除。

擦除操作就是让块中所有的bit变为1,从一个干净的“已擦除”状态的block重新开始。当里面的页变为0后,只有擦除整个块才能让这个页变为1。为了尽量减少擦除的次数,成熟的块管理技术必不可少。

挑战2:读/写干扰。

NAND Flash的电荷非常不稳定,在读/写中很容易对邻近的单元造成干扰,干扰后会让附近单元的电荷脱离实际的逻辑数值,造成bit出错,因为阀值接近的关系,MLC相对SLC来说更容易受到干扰。

读取干扰

写入干扰

读取干扰指的是在读取某个page时,邻近的bit会受到升高电压的干扰,造成bit出错。写入干扰指的是,某个page在写入时,邻近bit的电压也被升高了,造成bit出错。相对写入干扰来说,读取干扰明显小的多。在读/写干扰中,可能造成某些bit被改变,结果造成数据出错。所以需要在返回数据给主机前,用ECC/EDC算法来纠正这些bit的错误。随着闪存工艺的提升,同样大小的晶片上被封装入更多的单元,造成干扰越来越厉害,所以需要更强大的ECC/EDC来纠正bit。

挑战3:数据保存期限

数据保存期指的是当完全断电后,数据能在NAND Flash里保存多久。NAND单元必须保证一个稳定的电压水平,来保证数据是有效的。典型的SLC一般为10年。电荷从悬浮门里漏出,我们叫做电子迁移,当随着时间的流逝,电荷泄漏到一定程度,改变了NAND单元里悬浮门的电压对应的逻辑值,这样就造成bit出错。

数据保存期会随着擦写次数的增加而明显降低,而且从上面的原理中看出,MLC的数据保存期明显会比SLC少。(更容易被干扰)

挑战4: 坏块

NAND Flash里有2种坏块类型:

1,出厂坏块:由于为了保证产量和控制成本,出厂的NAND Flash某些就会有坏块。厂商保证SLC出厂坏块低于2%,MLC出厂坏块低于5%。
2,积累坏块:在多次的写入/擦除循环中,某些NAND单元的电荷电压被永久性的改变了,那就意味着包含这个NAND单元不可用了。

所以固态硬盘需要有坏块管理才能使用,主控制器用坏块表来映射出厂坏块和积累坏块到坏块区内,出厂时,颗粒的第一个块Block 0厂商会保证是可用的(至少ECC后可用)。

挑战5:擦写次数限制

造成NAND Flash有擦写次数限制的主要有2个因素:

1,电荷被困在氧化层,不能进入悬浮门。
2,氧化层结构被破坏。

如图,一旦氧化层损坏到达一定程度,造成电荷越来越难在P-substrate和悬浮门之间交流。电荷被困在氧化层造成悬浮门中的电压到不了阀值,所以说这个NAND单元就要被放入坏块区了。

当前主流SLC的P/E为10万次,50nm MLC为1万次,3xnm的MLC为5000次。到了这个数字并不意味着就不能用了,这个只是代表平均寿命,也就是说到了这个次数后,坏块就会开始大量增加了。

随着工艺提升,ECC的要求越来越高,50nm的SLC颗粒,三星规定1bit ECC的就够了,而50nm MLC要4bit ECC,到了3xnm要求达到24bit ECC。


附; ECC

影响NAND Flash稳定性和耐久度的一个主要因素就是ECC能力,目前最常用的三种算法是:

1.Reed-Solomon。2.Hamming。3.BCH (Bose, Ray-Chaudhuri, Hocquenghem)

不管何种ECC算法,何种主控,检测错误的方式是相同的:

1.每当一个page写入NAND Flash,数据会通过ECC引擎,创造独特的ECC签名。
2.数据和对应的ECC签名存都存放在NAND Flash里,数据放在数据区,ECC签名放在 SA区。
3.当需要读取数据时,数据和ECC签名一起被送往主控制器,此时新的ECC签名被生成。
4.此时主控把2个签名对照,如果签名相同,说明数据没有错误,数据就会被送往主机。如果签名不同,数据就会先放在主控里,而不是直接送往主机。

某些主控会把改正后的数据再次写回闪存,另一些则不会,因为谁也不知道下次读取会不会再出错。

ECC的能力直接关系到NAND Flash的耐久度,数据保存期。当NAND Flash的P/E数到了之后,错误数会越来越多,ECC弱的直接就报坏块并标记退休,如果ECC能力足够强,就能挖掘出Flash所有潜力。

NANDFlash原理相关推荐

  1. Nandflash原理W29N02GVS1AA

    1:开发环境 芯片:NUC977 控制器:FMI flash芯片:W29N02GVS1AA 2:Nandflash原理 2.1 命名含义 2.2 引脚含义 CE :chip Enable 片选信号 低 ...

  2. nandflash原理及硬件操作

    我们先看下nandflash的布线 有data0 到data7 八根数据线 nandflash是个存储芯片,那我提出请求:读地址a的数据,把数据b写到a地址上去 那么我们看原理图只看到data0-da ...

  3. freertos nand flash 读取错误_Flash失效小谈

    SOC中往往会集成供应商flash芯片,但完成可靠性实验后偶尔会遇到code丢失,bit翻转等问题,接下来,我们聊一聊flash失效机理及一些可靠性实验. 要分析flash的失效机理,需要先清楚其工作 ...

  4. 收集整理的ARM嵌入式linux开发入门视频教程

    嵌入式Linux作为一个系统学科,具有知识点多,知识难度大,实践操作性强等特点,很多踌躇满志的同学最终倒在了学习嵌入式Linux的道路上,绝大部分也是因为没有掌握嵌入式Linux 的知识规律和学习方法 ...

  5. nand falsh 111

    copy from http://blog.csdn.net/renpine/article/details/4570538 目錄 Architecture NAND Flash是由4096個Bloc ...

  6. 郭天祥ARM9架构嵌入式linux培训视频教程

    第一部分  嵌入式系统开发流程概述 第一讲嵌入式基础知识 1. 嵌入式的定义.特点.应用 2. 嵌入式硬件结构 3. 嵌入式软件结构 第二讲如何学习嵌入式 1. 嵌入式系统开发流程 2. 视频内容介绍 ...

  7. Linux内核4.14版本——Nand子系统(1)——hisi504_nand.c分析

    1. 简介 2. DTS 3. hisi_nfc_probe函数 3.1 获取dts中的资源 3.2 设置nand-chip结构体中必要的字段 3.3 nand_scan_ident扫描识别nand控 ...

  8. bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...

    bootloader功能介绍 初始化开发板上主要硬件(时钟,内存,硬盘), 把操作系统从硬盘拷贝到内存,然后让cpu跳转到内存中执行操作系统. boot阶段 1.关闭影响CPU正常执行的外设 -关闭看 ...

  9. NandFlash ECC校验原理与实现

    关注+星标公众号,不错过精彩内容 来源 | nhczp 编排 | strongerHuang 大家应该都在用U盘,而U盘中的存储芯片就是NandFlash,你买的64G的U盘,实际并没有64G,其中一 ...

  10. linux系统下操作nandflash指令,Linux驱动之Nand Flash原理及硬件操作

    Nand Flash 是一个存储芯片 那么:这样的操作很理" 读地址A的数据,把数据B写到地址A" 问1:原理图上的Nand Flash和SC2440之间只有数据线,怎么传输地址? ...

最新文章

  1. 详细解说 STL 排序(Sort)
  2. [CODEVS 1301] 任务分配
  3. 一文看尽目标检测:从 YOLO v1 到 v3 的进化之路
  4. PHP后台代码解决跨域问题
  5. vue,watch监听数据,数据监听
  6. 高并发场景下的缓存 + 数据库双写不一致问题分析与解决方案设计
  7. 蓝桥杯 ADV-18 算法提高 实数相加
  8. java log info乱码_跟光磊学Java开发-Java开发常用API的使用
  9. OMRON欧姆龙驱动器维修R88D-KT06F-Z过压故障处理
  10. flutter 集成融云 sdk
  11. 阿辉,Bullet In The Head
  12. 微信小程序 java社区快递柜取件管理系统python php
  13. Paddle安装是遇到 Error: Can not import avx core while this file exists:
  14. cocoscreator中tween详细用法
  15. excel表格打印每页都有表头_Excel小技巧3:打印每页添加表头
  16. 基于QT的运动参数提取与轨迹重现
  17. 【Web技术】935- 深色模式适配指南
  18. label fusion 学习记录
  19. FreeCAD学习笔记——Units、Builtin modules和Workbench creation
  20. 关于对四维空间一些理解

热门文章

  1. 基于51单片机的直流电机正反转及控速+proteus仿真图
  2. javaScript位移密码算法挑战
  3. 各类w3school网站的区别小记
  4. Excel - 数组类型及数组公式
  5. 12个优秀的开源UML工具
  6. 【算法java版09】:利用java实现对二进制数进行AMI编码
  7. Jeecg Boot连接人大金仓数据库步骤及常见问题
  8. 苹果绕过ID_三分钟教你绕过苹果ID锁,救你的板砖。-海绵宝宝的蟹黄堡
  9. C语言写程序注意,单片机C语言编程应注意的若干问题
  10. dsp2812 linux开发板,自制DSP2812开发板