Nand

Nand Flash是一种非易失性存储器,具有读写速度快.功耗低.存储密度高等优点,目前被广泛应用于电子产品中,如固态硬盘( SSD)、手机、数码相机等。进入21世纪以来,随着CPU主频以及IO频率的不断提高,传统硬盘由于读写速度慢等原因已经成为PC、服务器存储等领域发展的瓶颈。由于基于Nand Flash的存储相比于传统硬盘存储具有体积小、读写速度快.抗震动强、温湿度适应范围宽等优点, Nand Flash的市场份额正在迅速扩大,逐步取代传统硬盘。尤其在航天航空、国防军事等特殊的应用环境领域中,Nand Flash已经成为存储设备的首选。

Nand Flash存储器内部是由存储单元“浮置栅晶体管”阵列排布组成,每一个“浮置栅晶体管”包括2个栅极:一个控制栅极和一个浮置栅极,如图1所示。浮置栅极被绝缘层包围,能够长时间存储电荷。存储单元初始状态为擦除状态,此时浮置栅极没有电子积聚,当对控制栅极施加正电压时,电子会从源极与漏极之间的通道经过氧化层陷入浮置栅极,此时存储单元处于编程状态。擦除操作是在源极加正电压,利用浮置栅极与源极之间的隧道效应,把浮置栅极的电子吸引到源极。

图1浮置栅晶体管结构示意图

Nand Flash存储空间由若干个plane组成,每个plane又包含若干个块,块又由页组成。页包括数据区域和冗余区域2部分,数据区域用来存储数据,冗余区域则用来存储ECC相关信息和映射表等信息12。页为Nand Flash的读写单元,块为擦除操作单元。

Nand Flash每个存储单元可以存储一个或多个比特位,当只存储一个比特位时,这种存储单元称为单阶存储单元( SLC);当能够存储2个比特位时,称为多阶存储单元(MLC);当存储3个比特位时,称为三阶存储单元(TLC)。在 MLC和TLC中,通过不同的电荷量来存储多个比特位,因此数据读取时需要检测出电流量大小以确定电荷级别。而在SLC中只需检测电荷的有无即可。MLC和TLC类型存储器利用单个存储单元存储多个比特位,大大提高了存储密度,降低了存储成本,但同时也增大了误码率,而且寿命也要远远小于SLC类型存储器。

对于长度为512 B的数据,目前的纠错位数要求大概为:
SLC:1位~12位纠错能力;
MLC:4位~40位纠错能力;
TLC:60位以上的纠错能力。

Nand闪存存储错误发生的机制主要包括:存储密度的提升以及阈值电压多级分布造成各存储单元之间干扰增大,从而导致存储过程中存储电压发生偏移而发生错误;随着编程擦除周期次数的增加,陷阱电荷改变了阈值电压的分布,使得电压的分布区变宽,导致2阈值电压之间发生重叠,从而造成误判;在航空航天等应用环境中,电子会由于能量辐射而发生热运动,也会导致存储数据的错误。采用纠错编码技术能够大大降低这些错误的发生。

本文转自:宇芯电子,转载此文目的在于传递更多信息,版权归原作者所有。

围观 78

一、NAND 闪存基本单元

NAND 单元结构

最流行的 Flash 存储器的存储方式是基于一种叫做: Floating Gate(FG)的技术,可以参考下面的横截图,一个 MOS 管是由两个重叠的门组成:第一个是完全被氧化物所包围; 而第二个则是被连接到外面。这个单独的门就相当于构成了一个电子隔离带,这样就保证存在里面的电子(数据)能够保留很多年。对这个被隔离起来的部分进行充电和放电的过程就叫做 program 和 erase。由于进行了充放电,所以这个隔离起来的部分内部的电势 Vth 就 会被改变;这就是一个典型的 MOS 管工作原理。当我们对一个存储单元施加上一个电压的 时候,我们就可以分别处两种情况:当我们施加的电压比 Vth 高的时候便被识别为“1”, 否则就被识别为“0”。


上面这么一段的描述,你一定还是没弄懂,这个图也是过于简略。

NAND 闪存内部存储结构单元是基于 MOSFET(金属-氧化层-半导体-场效应晶体管), 与普通场效应晶体管的不同之处在于,在栅极(控制栅)与漏极/源极之间存在浮置栅,利用该浮置栅存储数据。



数据在NAND Flash闪存中是以电荷的形式存储的,存储的电荷的多少,取决于控制栅极所施加的电压,栅极及主板利用氧化膜进行了绝缘处理,一次积累的电荷可以保持长时间,但是,如果氧化膜存在缺陷,或者由于某种原因是绝缘膜遭到破坏,那么闪存将失去记忆。

另外热能会使电荷以某种概率发生消减,因此数据保存的时间还受到温度(辐射等)的影响。 闪存数据的写入和擦除是通过主板与控制栅之间电荷的诸如与释放来进行的。在写入方式上,NOR Flash采用的是热电子注入方式,通过在写入的时候提高控制栅的电压,通过源极向浮置栅注入电荷,电流从浮置栅极到源极;而 NAND Flash 闪存利用 F-N 隧道效应, 通过硅基层给浮置栅充电,电流从浮置栅极到硅基层。


隧道效应:

在讲隧道效应之前,我们先来看一个小实验。如图 10-1 所示,假设有一条像山坡一样高低起伏的滑道,滑道上有一个小球,二者之间没有任何摩擦力。如果我们让小球从 A 点出发滑落,而且出发时速度为零,那么小球最高能到达哪一点呢?

这太简单了,根据能量守恒定律,我们知道小球的势能会转化成动能,然后动能再转化成势能,最后会到达高度与 A 点相同的 B 点,如此往复运动。


如果我问你,这个小球会出现在 D 点吗?你一定会说,绝对不可能,因为 C 点是一座无法翻越的大山。或者说,C 点是一个能量很高的势垒,小球没有足够的能量来翻越它。

对于经典粒子来说,的确是这样的。但是,如果这条滑道缩小到原子尺度,而小球是一个电子的话,上述结论就不成立了。量子力学计算表明,从 A 点出发的电子有明显地出现在 D 点的概率,就像是从一条隧道中穿越过去的一样,这就是量子隧道效应,它是微观粒子波粒二象性的体现。

总结一下,如果微观粒子遇到一个能量势垒,即使粒子的能量小于势垒高度,它也有一定的概率穿越势垒,这种现象就叫隧道效应。隧道效应又称势垒贯穿,是一种很常见的量子效应。也就是说,崂山道士的故事在量子世界里是很平常的,一点都不稀奇。

当然,对于不同的情况,粒子在势垒外出现的概率大小是需要通过薛定谔方程仔细计算的。在一般情况下,只有当势垒宽度与微观粒子的德布罗意波长可比拟时,势垒贯穿的现象才能被显著观察到。如果势垒太高或太宽,隧穿的可能性就会变得很小。

所以在NAND FLASH的单元内部:

在没有外部的电压和温度变化的时候,势垒高且宽。电子是很难实现隧穿。

当外部电压变化时,或者温度变化时,此时隧穿就成为了大概率事件。

而数据的擦除都是利用 F-N 隧道效应放电,具体可以通过两种方法进行。一 种方法是通过给源极加上+12V 左右的高电压,释放浮置栅中的电荷;另一种方法是负极门擦除法,通过给控制栅-10V 左右的负电压,挤出浮置栅中的电荷。


读取数据的时候给控制栅加读取电压,对于浮置栅中有电荷的单元来讲,浮置栅中的电荷可抵消提供给控制栅的电压,造成阈值电压增高。与浮置栅中没有电荷时的情况相比,如果不给控制栅提供高电压,则漏极-源极之间不会处于导通的状态。因此,通过判断,通过向控制栅加读出电压,判断漏极-源极之间是否处于导通状态,可以判断浮置栅有没有存储 电荷,进而判断该存储单元是“1”还是“0”。

二、SLC 和 MLC

1、概述

NAND Flash 分为 SLC-单层存储(Single-Level Cell)和 MLC-多层存储(Multi-Level Cell)。

1、SLC = Single-Level Cell ,即1bit/cell,速度快寿命长,价格贵(约MLC的3倍以上的价格),约10万次擦写寿命。

2、MLC = Multi-Level Cell,即2bit/cell,速度一般寿命一般,价格一般,约3000—10000次擦写寿命。

3、TLC = Trinary-Level Cell,即3bit/cell,也有Flash厂家叫8LC,速度慢寿命短,价格便宜,约500次擦写寿命,目前还没有厂家能做到1000次。


由于TLC的1个存储器储存单元可存放3 bit的数据,为了区分,必须使用不同电压来实现。除了能够实现和SLC一样的000(TLC)=0(SLC)和111(TLC)=1(SLC)外、还有另外六种数据格式必须采用其他不同的电压来区分,让不同数量的电子进入到存储单元,实现不同的数据表达。这样,才能让TLC实现单位存储单元存放比SLC、MLC更多数据的目的。

SLC 就 是在 NAND Flash 闪存的每个存储单元里存储 1 比特的数据,而 MLC 则是每个存储单元 里存储 2 比特甚至更多的数据。SLC 与 MLC 的区别是由单个存储单元的电压范围所能够表示的不同数据的个数来区分的,如下图所示。

SLC 闪存中存储的数据代表”0”还是”1”是由基于 Vth 电压阈值来判定,对于 NAND 闪存的写入(编程),就是对其充电,使得它的电压超过上图的电压判定点 A,存储单元就 表示 0 已编程,如果没有充电或者电压阈值低于那个 A 点,就表示 1-已擦除。

MLC 闪存存储的数据是”00”,”01”,”10”,”11”也是基于电压阈值的判定,当电 压没到判定点 B 时,就代表”11”,当电压在 B 和 C 之间,则代表“10”,电压在 C 和 D 之间,则表示”01”,而电压达到 D 以上,则表示”00”。 相比 SLC,MLC 电压之间的阈值被分成了 4 份,这样一来就会直接影响 MLC 闪存的 性能和稳定性,对于 MLC 闪存来说,相邻的存储单元间会互相干扰,造成电压不稳定而出 现比特错误,MLC 由于阈值相比 SLC 更接近,所以出错几率会更大;MLC 读写性能降低, 写入更达到 50%的差距以上,因为需要更精确的充电处理。

SLC 只有”0”和”1”,,而 MLC 会有“00”,“01“,”10”,”11” 4 个状态,在充电后还要去判断处于哪个状态, 速度自然就慢了;因为有额外的读写压力,所以在功耗方面,MLC 相比 SLC 明显增大,并 且造成闪存的写入耐久度和数据保存期都受到影响。

三、FLASH基本存储单元的操作---写/擦除/读

FLASH中,常用的向浮栅注入电荷的技术有两种---NOR FLASH :热电子注入(hot electron injection)和NAND FLASH :F-N隧道效应(Fowler Nordheim tunneling);从浮栅中挪走电荷的技术通常使用F-N隧道效应(Fowler Nordheim tunneling)。第一章节,我们已经对原理进行了讲解。


写操作就是向浮栅注入电荷的过程,NOR FLASH通过热电子注入方式向浮栅注入电荷(这种方法的电荷注入效率较低,因此NOR FLASH的写速率较低),NAND FLASH则通过F-N隧道效应向浮栅注入电荷。FLASH在写操作之前,必须先将原来的数据擦除(即将浮栅中的电荷挪走),也即FLASH擦除后读出的都是‘1’。

擦除操作就是从浮栅中挪走电荷的过程,NOR FLASH和NAND FLASH都是通过F-N隧道效应将浮栅中的电荷挪走的。

读出操作时,控制栅极上施加的电压很小,不会改变浮栅中的电荷量,即读出操作不会改变FLASH中原有的数据,也即浮栅有电荷时,D和S间存在导电沟道,从D极读到‘0’;当浮栅中没有电荷时,D和S间没有导电沟道,从D极读到‘1’。


四、NOR FLASH 和NAND FLASH的结构和特性

1、 NOR FLASH的结构和特性

NOR FLASH的结构原理图见下图,可见每个Bit Line下的基本存储单元是并联的,当某个Word Line被选中后,就可以实现对该Word的读取,也就是可以实现位读取(即Random Access),且具有较高的读取速率,图3.1是一个3*8bit的NOR FLASH的原理结构图,图3.2是沿Bit Line切面的剖面图,展示了NOR FLASH的硅切面示意图,这种并联结构决定了NOR FLASH的很多特性。



(1)基本存储单元的并联结构决定了金属导线占用很大的面积,因此NOR FLASH的存储密度较低,无法适用于需要大容量存储的应用场合,即适用于code-storage,不适用于data-storage,见下图。

(2)基本存储单元的并联结构决定了NOR FLASH具有存储单元可独立寻址且读取效率高的特性,因此适用于code-storage,且程序可以直接在NOR 中运行(即具有RAM的特性)。

(3)NOR FLASH写入采用了热电子注入方式,效率较低,因此NOR写入速率较低,不适用于频繁擦除/写入场合。


NOR FLASH的中的N是NOT,含义是Floating Gate中有电荷时,读出‘0’,无电荷时读出‘1’,是一种‘非’的逻辑;OR的含义是同一个Bit Line下的各个基本存储单元是并联的,是一种‘或’的逻辑,这就是NOR 的由来。

2、NAND FLASH的结构和特性

NAND FLASH的结构原理图见下图,可见每个Bit Line下的基本存储单元是串联的,NAND读取数据的单位是Page,当需要读取某个Page时,FLASH 控制器就不在这个Page的Word Line施加电压,而对其他所有Page的Word Line施加电压(电压值不能改变Floating Gate中电荷数量),让这些Page的所有基本存储单元的D和S导通,而我们要读取的Page的基本存储单元的D和S的导通/关断状态则取决于Floating Gate是否有电荷,有电荷时,Bit Line读出‘0’,无电荷Bit Line读出‘1’,实现了Page数据的读出,可见NAND无法实现位读取(即Random Access),程序代码也就无法在NAND上运行。

下图是一个8*8bit的NAND FLASH的原理结构图。


下图是沿Bit Line切面的剖面图,展示了NAND FLASH的硅切面示意图,NAND FLASH的串联结构决定了其很多特点。


(1)基本存储单元的串联结构减少了金属导线占用的面积,Die的利用率很高,因此NAND FLASH存储密度高,适用于需要大容量存储的应用场合,即适用于data-storage,见图3.3[3]。

(2)基本存储单元的串联结构决定了NAND FLASH无法进行位读取,也就无法实现存储单元的独立寻址,因此程序不可以直接在NAND 中运行,因此NAND是以Page为读取单位和写入单位,以Block为擦除单位,见图3.6。

(3)NAND FLASH写入采用F-N隧道效应方式,效率较高,因此NAND擦除/写入速率很高,适用于频繁擦除/写入场合。同时NAND是以Page为单位进行读取的,因此读取速率也不算低(稍低于NOR)。

NAND FLASH的中的N是NOT,含义是Floating Gate中有电荷时,读出‘0’,无电荷时读出‘1’,是一种‘非’的逻辑;AND的含义是同一个Bit Line下的各个基本存储单元是串联的,是一种‘与’的逻辑,这就是NAND 的由来。


3、通过对NOR和NAND结构和特点的解析,我们可以得出



五、NAND FLASH应用

1、oob / Redundant Area / Spare Area

每一个页,对应还有一块区域,叫做空闲区域(spare area)/冗余区域(redundant area),而Linux系统中,一般叫做OOB(Out Of Band),这个区域,是最初基于Nand Flash的硬件特性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做EDC(Error Detection Code)/ECC(Error Code Correction, 或者 Error Checking and Correcting),所以设计了多余的区域,用于放置数据的校验值。

Oob的读写操作,一般是随着页的操作一起完成的,即读写页的时候,对应地就读写了oob。

关于oob具体用途,总结起来有:
- 标记是否是坏快
- 存储ECC数据
- 存储一些和文件系统相关的数据。如jffs2就会用到这些空间存储一些特定信息,而yaffs2文件系统,会在oob中,存放很多和自己文件系统相关的信息。

2、Bad Block Management坏块管理

Nand Flash由于其物理特性,只有有限的擦写次数,超过那个次数,基本上就是坏了。在使用过程中,有些Nand Flash的block会出现被用坏了,当发现了,要及时将此block标注为坏块,不再使用。于此相关的管理工作,属于Nand Flash的坏块管理的一部分工作。

3、Wear-Leveling负载平衡

Nand Flash的block管理,还包括负载平衡。

正是由于Nand Flash的block,都是有一定寿命限制的,所以如果你每次都往同一个block擦除然后写入数据,那么那个block就很容易被用坏了,所以我们要去管理一下,将这么多次的对同一个block的操作,平均分布到其他一些block上面,使得在block的使用上,相对较平均,这样相对来说,可以更能充分利用Nand Flash。

4、ECC错误校验码

Nand Flash物理特性上使得其数据读写过程中会发生一定几率的错误,所以要有个对应的错误检测和纠正的机制,于是才有此ECC,用于数据错误的检测与纠正。Nand Flash的ECC,常见的算法有海明码和BCH,这类算法的实现,可以是软件也可以是硬件。不同系统,根据自己的需求,采用对应的软件或者是硬件。

相对来说,硬件实现这类ECC算法,肯定要比软件速度要快,但是多加了对应的硬件部分,所以成本相对要高些。如果系统对于性能要求不是很高,那么可以采用软件实现这类ECC算法,但是由于增加了数据读取和写入前后要做的数据错误检测和纠错,所以性能相对要降低一些,即Nand Flash的读取和写入速度相对会有所影响。

其中,Linux中的软件实现ECC算法,即NAND_ECC_SOFT模式,就是用的对应的海明码。

而对于目前常见的MLC的Nand Flash来说,由于容量比较大,动辄2GB,4GB,8GB等,常用BCH算法。BCH算法,相对来说,算法比较复杂。

BCH算法,通常是由对应的Nand Flash的Controller中,包含对应的硬件BCH ECC模块,实现了BCH算法,而作为软件方面,需要在读取数据后,写入数据之前,分别操作对应BCH相关的寄存器,设置成BCH模式,然后读取对应的BCH状态寄存器,得知是否有错误,和生成的BCH校验码,用于写入。

其具体代码是如何操作这些寄存器的,由于是和具体的硬件,具体的nand flash的controller不同而不同,无法用同一的代码。如果你是nand flash驱动开发者,自然会得到对应的起nand flash的controller部分的datasheet,按照手册说明,去操作即可。

不过,额外说明一下的是,关于BCH算法,往往是要从专门的做软件算法的厂家购买的,但是Micron之前在网上放出一个免费版本的BCH算法。

5、位反转

Nand Flash的位反转现象,主要是由以下一些原因/效应所导致:

漂移效应(Drifting Effects)

漂移效应指的是,Nand Flash中cell的电压值,慢慢地变了,变的和原始值不一样了。

编程干扰所产生的错误(Program-Disturb Errors)

此现象有时候也叫做,过度编程效应(over-program effect)。

对于某个页面的编程操作,即写操作,引起非相关的其他的页面的某个位跳变了。

读操作干扰产生的错误(Read-Disturb Errors)

此效应是,对一个页进行数据读取操作,却使得对应的某个位的数据,产生了永久性的变化,即Nand Flash上的该位的值变了。

对应位反转的类型,Nand Flash位反转的类型和解决办法,有两种:
一种是nand flash物理上的数据存储的单元上的数据,是正确的,只是在读取此数据出来的数据中的某位,发生变化,出现了位反转,即读取出来的数据中,某位错了,本来是0变成1,或者本来是1变成0了。此处可以成为软件上位反转。此数据位的错误,当然可以通过一定的校验算法检测并纠正。

另外一种,就是nand flash中的物理存储单元中,对应的某个位,物理上发生了变化,原来是1的,变成了0,或原来是0的,变成了1,发生了物理上的位的数据变化。此处可以成为硬件上的位反转。此错误,由于是物理上发生的,虽然读取出来的数据的错误,可以通过软件或硬件去检测并纠正过来,但是物理上真正发生的位的变化,则没办法改变了。不过个人理解,好像也是可以通过擦除Erase整个数据块Block的方式去擦除此错误,不过在之后的Nand Flash的使用过程中,估计此位还是很可能继续发生同样的硬件的位反转的错误。

以上两种类型的位反转,其实对于从Nand Flash读取出来的数据来说,解决其中的错误的位的方法,都是一样的,即通过一定的校验算法,常称为ECC,去检测出来,或检测并纠正错误。

如果只是单独检测错误,那么如果发现数据有误,那么再重新读取一次即可。

实际中更多的做法是,ECC校验发现有错误,会有对应的算法去找出哪位错误并且纠正过来。

其中对错误的检测和纠正,具体的实现方式,有软件算法,也有硬件实现,即硬件Nand Flash的控制器controller本身包含对应的硬件模块以实现数据的校验和纠错的。

Nand Flash引脚功能的中文说明


在数据手册中,你常会看到,对于一个引脚定义,有些字母上面带一横杠的,那是说明此引脚/信号是低电平有效,比如你上面看到的RE头上有个横线,就是说明,此RE是低电平有效,此外,为了书写方便,在字母后面加“#”,也是表示低电平有效,比如我上面写的CE#;如果字母头上啥都没有,就是默认的高电平有效,比如上面的CLE,就是高电平有效。

本文参考和引用文档如下:
《NAND FLASH1》百度文库 作者不详
《NAND Flash 和 NOR Flash原理和差异对比》CSDN xzengwei1313
《Nand flash 三种类型SLC,MLC,TLC》CSDN fc34235
《隧道效应:穿墙而过不是梦》书问

来源: 硬件十万个为什么

围观 925

NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。

相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

一.存储区别比较

NOR的特点是芯片内执行(XIP, execute In Place),这样应用程序可以接在flash闪存内运行,不必再把代码读到系统RAM中。

NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。

NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。

二.性能比较

flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。

由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。

执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。

● NOR的读速度比NAND稍快一些。

● NAND的写入速度比NOR快很多。

● NAND的4ms擦除速度远比NOR的5s快。

● 大多数写入操作需要先进行擦除操作。

● NAND的擦除单元更小,相应的擦除电路更少。

三.接口差别

NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。

NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。

四.容量和成本

NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。

五.可靠性和耐用性

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

六.寿命(耐用性)

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

七.位交换问题

所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。

一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。

当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。

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

八.坏块处理

NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。

NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。 易于使用可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。

由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。

在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

九.软件支持

当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。

在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。

使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。

驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗。

来源:网络

围观 481
订阅 RSS - Nand