Nand Flash 和Nor Flash的区别详解

写在前面:

  Flash存储器在嵌入式开发实施中有着重要位置,文本介绍一些关于Flash存储器的知识。

  本文内容如下:

  (一)Nand Flash和Nor Flash存储器简介

  (二)Nand Flash和Nor Flash原理

    (2-1)存储数据的原理

    (2-2)浮栅的重放电

    (2-3)0和1

    (2-4)连接和编码方式  

  (三)Nand Flash和Nor Flash的区别

    (3-1)Nand Flash 和Nor Flash的性能比较

    (3-2)Nand Flash 和Nor Flash的接口差别

    (3-3)Nand Flash 和Nor Flash的容量和成本

    (3-4)Nand Flash 和Nor Flash的可靠性和耐用性

    (3-5)Nand Flash 和Nor Flash的寿命(耐用性)

    (3-6)位交换

    (3-7)EDC/ECC算法

    (3-8)坏块处理

    (3-9)易于使用

    (3-10)软件支持

  (四)Flash存储器的应用

    (4-1)序列接口闪存

    (4-2)固件存储

    (4-3)闪存作为硬盘的替代品

    (4-4)闪存作为随机存取存储器

    (4-5)闪存作为长时间文件存储媒体

一、Nand Flash 和Nor Flash存储器简介

  我们使用的智能手机除了有一个可用的空间(如苹果8G、16G等),还有一个RAM容量,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的。这二种存储设备我们都统称为“FLASH”,FLASH是一种存储芯片,全名叫Flash EEPROM Memory,通过程序可以修改数据,即平时所说的“闪存”。Flash又分为NAND flash和NOR flash二种。U盘和MP3里用的就是这种存储器。

  Nand flash存储器经常可以与NOR Flash存储器互换使用。大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

  (1)Nor Flash存储器简介

  NOR Flash 的读取和我们常见的 SDRAM 的读取是类似,用户可以直接运行装载在 NOR FLASH 里面的代码,这样可以减少 SRAM 的容量从而节约成本。
    intel公司1988年开发出了NOR flash技术。NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是其很低的写入和擦除速度大大影响了它的性能。
 

一种NorFlash存储芯片

   (2)Nand Flash存储器简介
  Nand-flash内存是flash内存的一种,1989年,东芝公司发表了NAND flash结构。其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。

  Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等

一种Nand Flash存储芯片

二、NAND flash和NOR flash原理

  (2-1)、存储数据的原理
  两种闪存都是用三端器件作为存储单元,分别为源极、漏极和栅极,与场效应管的工作原理 相同,主要是利用电场的效应来控制源极与漏极之间的通断,栅极的 电流消耗极小,不同 的是场效应管为单栅极结构,而 FLASH 为双栅极结构,在栅极与硅衬底之间增加了一个浮 置栅极。[attach]158 [/attach]
浮置栅极是由氮化物夹在两层二氧化硅材料之间构成的,中间的氮化物就是可以存储电荷的 电荷势阱。上下两层氧化物的厚度大于 50 埃,以避免发生击穿。
  (2-2)、浮栅的重放电
  向数据单元内写入数据的过程就是向电荷势阱注入电荷的过程,写入数据有两种技术,热电 子注入(hot electron injection)和 F-N 隧道效应(Fowler Nordheim tunneling),前一种是通过源 极给浮栅充电,后一种是通过硅基层给浮栅充电。NOR 型 FLASH 通过热电子注入方式给浮 栅充电,而 NAND 则通过 F-N 隧道效应给浮栅充电。
在写入新数据之前,必须先将原来的数据擦除,这点跟硬盘不同,也就是将浮栅的电荷放掉, 两种 FLASH 都是通过 F-N 隧道效应放电。

  (2-3)、0 和 1
  这方面两种 FLASH 一样,向浮栅中注入电荷表示写入了‘0‘,没有注入电荷表示‘1‘,所以对 FLASH 清除数据是写 1 的,这与硬盘正好相反;
对于浮栅中有电荷的单元来说,由于浮栅的感应作用,在源极和漏极之间将形成带正电的空 间电荷区,这时无论控制极上有没有施加偏置电压,晶体管都将处于 导通状态。而对于浮 栅中没有电荷的晶体管来说只有当控制极上施加有适当的偏置电压,在硅基层上感应出电 荷,源极和漏极才能导通,也就是说在没有给控制极施 加偏置电压时,晶体管是截止的。 如果晶体管的源极接地而漏极接位线,在无偏置电压的情况下,检测晶体管的导通状态就可 以获得存储单元中的数据,如果位线上的电平为低,说明晶体管处于 导通状态,读取的数 据为 0,如果位线上为高电平,则说明晶体管处于截止状态,读取的数据为 1。由于控制栅 极在读取数据的过程中施加的电压较小或根本不施加 电压,不足以改变浮置栅极中原有的 电荷量,所以读取操作不会改变 FLASH 中原有的数据。

  (2-4)、连接和编址方式

  两种 FLASH 具有相同的存储单元,工作原理也一样,为了缩短存取时间并不是对每个单元 进行单独的存取操作,而是对一定数量的存取单元进行集体操作, NAND 型 FLASH 各存 储单元之间是串联的,而 NOR 型 FLASH 各单元之间是并联的;为了对全部的存储单元有 效管理,必须对存储单元进行统一编址。
  NAND 的全部存储单元分为若干个块,每个块又分为若干个页,每个页是 512byte,就是 512 个 8 位数,就是说每个页有 512 条位线,每条位线下 有 8 个存储单元;那么每页存储的数 据正好跟硬盘的一个扇区存储的数据相同,这是设计时为了方便与磁盘进行数据交换而特意 安排的,那么块就类似硬盘的簇;容 量不同,块的数量不同,组成块的页的数量也不同。 在读取数据时,当字线和位线锁定某个晶体管时,该晶体管的控制极不加偏置电压,其它的 7  个都加上偏置电压 而导通,如果这个晶体管的浮栅中有电荷就会导通使位线为低电平, 读出的数就是 0,反之就是 1。
  NOR 的每个存储单元以并联的方式连接到位线,方便对每一位进行随机存取;具有专用的 地址线,可以实现一次性的直接寻址;缩短了 FLASH 对处理器指令的执行时间。

三、NAND flash和NOR flash的区别

  (3-1)、NAND flash和NOR flash的性能比较
  flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。
  1、NOR的读速度比NAND稍快一些。
  2、NAND的写入速度比NOR快很多。
  3、NAND的4ms擦除速度远比NOR的5s快。
  4、大多数写入操作需要先进行擦除操作。
  5、NAND的擦除单元更小,相应的擦除电路更少。

  (3-2)、NAND flash和NOR flash的接口差别
  NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
  NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。

  (3-3)、NAND flash和NOR flash的容量和成本
  NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
  NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。

  (3-4)、NAND flash和NOR flash的可靠性和耐用性
  采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

  (3-5)、NAND flash和NOR flash的寿命(耐用性)
在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些

  (3-6)、位交换
  所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用

  (3-7)、EDC/ECC算法
  这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。

  (3-8)、坏块处理
  NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。
NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。

  (3-9)、易于使用
  可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。
由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

  (3-10)软件支持
  当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。
在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。
  使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。
驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。

四、应用

  (4-1)序列接口闪存

SPI总线:单一master对单一slave

  序列接口闪存是一种使用序列式接口(通常使用序列周边接口总线(SPI))来循序访问数据内容,小型且低功率的闪存。当其使用于嵌入式系统上时,序列式闪存比平行式闪存在印刷电路板上所需的连接线数要少得多;因为序列式接口可以一次同时发送与接受数据的一个比特,这使得序列式闪存具有减少在印刷电路板上所占面积、耗电量及整体系统成本的优势。

有好几个理由说明了为何使用较少外部接脚的序列式组件,而不是使用平行式组件,可以大大的降低整体的成本:

  • 许多特殊应用集成电路是受接垫所限制的〈Pad-limited〉,意思是晶粒的大小是由引线键合接垫的数量所决定,而不是由组件逻辑门数及功能复杂度所决定。减少键合接垫数自然允许更精简的集成电路在更小的晶粒上;这也增加了晶圆上所能制造出的晶粒数量,同时也降低了单位晶粒的成本。
  • 减少了外在接脚的数目,同时降低了IC组装及封装的成本。序列式接口组件比平行式接口组件所使用的封装型式来的小且简单。
  • 封装型式小及较低的外在接脚数目,所以占据的PCB面积也小。
  • 较少的外在接脚数目,也简化了PCB上绕线的复杂度。

  SPI闪存的型式主要有两种:一种是小页特性且内含一个或多个内部SRAM的页缓冲器,能够让整个页的数据都读入缓冲器、修改部分数据、而后再写回闪存中(例如Atmel的DataFlash:AT45,Micron Technology页抹除NOR型闪存)。另一种则有较大的区段。一般来说,SPI闪存的最小区段大小是4kB,最大可达64kB。因为此类SPI闪存缺乏内部SRAM缓冲器,修改数据时必须将完整的数据页读出,再修改数据后,写回闪存中,使得管理速度变慢。SPI闪存比平行式接口闪存便宜,因此应用于具有程序代码對映(Code-Shadowing)功能的系统上,是一个不错的选择。

  而这两种型式的闪存不容易做到简单的直接置换,因为没有相同的外部接脚且命令集也互不兼容。

  (4-2)固件存储

使用平行式接口闪存的个人电脑BIOS

  随着现下CPU的速度越来越快,平行式接口闪存组件的速度通常远小于与其连接的电脑系统存储器总线速度。相较之下,当前的SRAM访问的时间通常小于10ns,而DDR2 SDRAM访问时间一般则小于20ns。因为这个因素,一般合理的使用方式是将要存放于對映存储器里的代码预先存放于闪存中,并在CPU运行代码前将闪存中的代码复制到對映存储器中,如此一来,CPU就可以用最高速度来取用代码。设备上的固件也可以预先存放于序列式接口闪存中,在设备引导后,将其复制到SDRAM或SRAM里。[24]使用外部序列式闪存而不用芯片中内嵌闪存是因为芯片制程上的考虑而妥协的结果(适用于高速逻辑制程通常不适用于闪存,反之亦然)。如果有需要将一个宏块的固件代码读入时,通常会事先将代码压缩后再存入闪存中,就可以缩小闪存芯片上被使用的区域。典型的序列式接口闪存应用于固件存储上有:硬盘、以太网控制器、DSL调制解调器、无线网络接口卡等等。对于UEFI而言,因为在UEFI启动过程的DXE阶段前UEFI对内存的访问有限,所以UEFI固件通常保存在NOR Flash中。

  (4-3)闪存作为硬盘的替代品

华硕Eee PC的SSD

主条目:固态硬盘

  近期另一个闪存的应用就是作为硬盘的替代品。因为闪存没有硬盘驱动器械因素的限制并且可以多单元并行访问,所以固态硬盘(SSD)在速度、噪音、耗电量与可靠度等因素的考量上是非常吸引人的。闪存组件正获取便携式行动设备上第二存储组件的地位。同时使用在高性能台式机及一些具有RAID和SAN架构的服务器上作为硬盘的替代品。

  但是以闪存为基础的固态硬盘,也存在其他方面因素,使得它并不具有吸引力。例如闪存每千兆比特的成本依旧比硬盘高出许多。[25]另一个不具吸引的因素就是闪存有着有限的P/E循环次数,但是这个因素可以透过程序优化,当前似乎已在人为控制能力范围内,加上容量的增大使得每单位读写次数减少,让它的使用寿命可以达到传统硬盘甚至更高的水准,因此以闪存为基础的固态硬盘也施行了与现有硬盘相同的保固政策。

  对于关系性数据库或其他使用ACID的数据库事务系统上,即使是使用当前最慢的闪存存储媒体也可以比使用硬盘所组成的数组,在速度的表现上有着显著的提升。[

  于2006年6月,三星发布第一批配备闪存固态硬盘的个人电脑:Q1-SSD及Q30-SSD,均使用32GB的固态硬盘,并且初期只在韩国地区发售。

  在2008年,固态硬盘成为第一版MacBook Air的选用配备,并且从2010年起,固态硬盘成为所有Macbook Air笔记本电脑的标准配备。2011年后开始,由于固态硬盘成为Intel所倡议超极本的一部分,超薄笔记本电脑以固态硬盘为标准配备的数量逐渐增加。因为固态硬盘的性能远高于机械硬盘,所以2011年以后固态硬盘在PC上逐步得到普及。

  也有混合型技术,诸如混合型硬盘和ReadyBoost,尝试将两种技术的优点合并,使用闪存作为硬盘上常用且鲜少修改的文件,如应用程序及操作系统的可执行文件,的高速非易失性缓存;或者使用固态硬盘加快机械硬盘的读写速度。

  (4-4)闪存作为随机存取存储器[编辑]

  截至2012年,有许多的尝试想把闪存作为电脑的主存,动态随机存取存储器(DRAM)。在这个应用角色上,闪存的速度是比现有的DRAM慢,但是耗电量却远小于DRAM。

  (4-5)闪存作为长时间文件存储媒体

  当前还不清楚闪存作为长时间文件存储媒体的有效文件存储时间究竟有多长?在文件数据不常被访问的条件下,最适合的保存温度与湿度是多少?需不需要作预防性的改写保护?等等相关的保存技术均有待进一步的研究发展。

参考文档链接:  

  (1)http://www.elecfans.com/bandaoti/cunchu/20120925290176.html

  (2)https://blog.csdn.net/amberman/article/details/8122300

  (3)http://www.elecfans.com/bandaoti/cunchu/20120925290176.html

  (4)维基百科

原文地址:https://www.cnblogs.com/iriczhao/p/12128451.html

时间: 2024-10-13 14:41:42

Nand Flash 和Nor Flash的区别详解的相关文章

【转】SPI FLASH与NOR FLASH的区别 详解SPI FLASH与NOR FLASH的不一样

转自:http://m.elecfans.com/article/778203.html 本文主要是关于SPI FLASH与NOR FLASH的相关介绍,并着重对SPI FLASH与NOR FLASH的区别进行了详细的区分. SPI FLASH 首先它是个Flash,Flash是什么东西就不多说了(非易失性存储介质),分为NOR和NAND两种(NOR和NAND的区别本篇不做介绍).SPI一种通信接口.那么严格的来说SPI Flash是一种使用SPI通信的Flash,即,可能指NOR也可能是NAN

【转】escape()、encodeURI()、encodeURIComponent()区别详解

escape().encodeURI().encodeURIComponent()区别详解 原文链接:http://www.cnblogs.com/tylerdonet/p/3483836.html JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent . 下面简单介绍一下它们的区别 1 escape()函数 定义和用法 e

cookie 和session 的区别详解 《转》

二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 C

escape()、encodeURI()、encodeURIComponent()区别详解

JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent . 下面简单介绍一下它们的区别 1 escape()函数 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(string) 参数  描述  string  必需.要被转义或编码的字符串. 返回值 已编码的

【转】Cookie和Session的区别详解

转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session 机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择 二.会话cookie和持久cookie的区别 如果不设置

Bind和Eval的区别详解

原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 区别 1.eval是只读数据,bind是可更新的. 2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 2.若GridView中绑定列里面 设置 内容格式 DataFormateStri

PHP中include和require的区别详解

1.概要  require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句).这就意味着如果可能执行多次的代码,则使用require()效率比较高.另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句. require的使用方法如:require("myfil

jQuery height()、innerHeight()、outerHeight()函数的区别详解

jQuery height().innerHeight().outerHeight()函数的区别详解 在jQuery中,获取元素高度的函数有3个,它们分别是height(). innerHeight().outerHeight(). 与此相对应的是,获取元素宽度的函数也有3个,它们分别是width(). innerWidth().outerWidth(). 在这里,我们以height().innerHeight().outerHeight()3个函数为例,来详细介绍它们之间的区别. 下面我们以元

jsp中的@include与jsp:include区别详解

1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include page="xxx.jsp"></jsp:include> 我们也许会使用这两种方式,但是也许很多人不名称这两种方式的区别.下面我们来看看下面的两个例子 2 开门见山引出问题 (1) /include/include.jsp <%@ page language=&

GetWindowRect和GetClientRect的区别详解

一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? 先说说什么叫逻辑坐标?讲到逻辑坐标,它相对的一个概念是设备坐标,是为了屏蔽掉不同设备属性差别而设置的抽象坐标系,说白了,就是独立于设备坐标的统一接口,程序员不需要去在具体的设备上进行绘图操作,而只需要在虚拟的环境下进行绘图,就是CDC. 然后由设备驱动去负责虚拟坐标到实际设备坐标之间的转换.通常逻辑