掌握ECC/坏区块管理眉角 NAND Flash嵌入式应用效能增
NAND Flash记忆体在出厂时是允许部分晶片含有坏区块,或者好的区块中含有一些错误位元,因此在实际应用时,须搭配使用控制器,透过硬体与软体进行坏区块管理,以及利用错误更正编码(ECC)演算法修正错误位元,方能提升嵌入式系统储存效能。
本文引用地址://m.amcfsurvey.com/article/284148.htmNAND型快闪记忆体(NAND Flash) IC的技术演进快速,平均每1∼2年就前进一个制程世代来降低成本,在售价大幅下降情况下,愈来愈多嵌入式系统,例如:蓝光播放器、电视、数位相机、印表机等应用均采用NAND低成本的优势,取代原本使用的NOR型快闪记忆体(以下简称NOR),来因应大容量记忆体的需求并且降低成本。然而品质考量是否有被兼顾,让产品可以达到高品质,是值得探讨的。
本文将先简介NAND与NOR的基本结构与使用观念,接着针对NAND的使用上常见问题或使用规格,提出讨论,进而提醒使用者在应用上应该注意事项,避免衍生不必要困扰,加速上市的时程。
NAND与NOR型快闪记忆体特性
快闪记忆体(Flash)是电子抹除式可程式唯读记忆体(EEPROM)的衍生产品,但是Flash和EEPROM的主要差异在于,EEPROM是以位元组(Byte)为资料抹除单位,抹除速度相当缓慢。
Flash则使用较大区块(例128K Bytes)为抹除单位,因此在写入大量资料时有显着的速度优势,而被命名为Flash。Flash依记忆单元阵列(Memory Cell Array)架构及操作方式又可分为NOR和NAND二种型式:
.NOR:
可随机存取(Random Access)并且速度快,多使用于储存程式码。记忆单元阵列架构为并联模式,可比拟为集合式透天房社区,占用土地面积大,但是访客可以很快地随机访问任何一户房子。在应用方面,NOR具备稳定的品质特性,大多是以储存程式码为主,特别是开机时的程式码(Boot Code)。
.NAND:
以页面式(Page Read)顺序存取,随机存取速度慢,多用于大量数据资料存取,例如:影像和音乐储存记忆卡、固态硬碟等。记忆单元阵列架构为串联模式,可比拟为一栋高层集合式公寓,好处是可以在一小块土地住很多人,缺点是访客一定要透过一楼门口往上依续找到某户房子。NAND应用以资料(Data)储存为主。
最早期NAND技术是SLC(Single-Level Cell),原理是在一个记忆单元中存放一个位元(Bit)的资料,直到MLC(Multi-Level Cell)技术接棒后,演进为一个记忆单元存放两个位元。
TLC(Triple-Level Cell)技术是MLC技术的延伸,于2009年正式问世,一个记忆单元可存放三个位元,成本进一步大幅降低,但存取速度较慢。至于NOR目前以SLC为主流,因为其设计较MLC简单且可靠度较佳,NOR的MLC技术难度高且可靠度较差,市场投入厂商较少。
快闪记忆体基本使用观念
快闪记忆体中储存的资料为二进位格式,内含0与1两种态位(State),在Flash为空白未写入状态的时候,资料逻辑态位为1,写入(Program)资料后资料态位变为0,但无法将0直接写成1,必须下达抹除指令(Erase Command)进行抹除才可将该位址资料态自0改写成1。但是资料抹除必须是以区块(Block或Sector)为最小单位,而不是以位元组为单位,也无法Partial Erase。
因此,Flash无法像EEPROM以Byte进行抹除,必须有Erase Before Write的重要观念。然而Flash的写入抹除有次数限制,例如NOR一般大约为十万次(100K),NAND则大约为数千到数万次(视制程技术而有差别),制造商会在Datasheet上注明这个Program/Erase Cycling Endurance规格。
使用者必须避免或减少每次更新写入小范围资料(例:数Bytes)就抹除整个区块,应该等到该区块资料写入累积达到一定容量后再抹除,以免某些区块在产品使用年限内就已经超过最高的写入抹除次数规格。而Flash IC一般出厂时整个记忆体均为空白(例:FFh),第一次的使用,可以不须抹除就可写入资料,之后的写入则必须Erase Before Write。
相较于NOR,在低成本的背景下,NAND是一种不完美(Imperfect)的记忆体,出厂时是允许部份的晶片(Chip)就含有坏区块(Bad or Invalid Block),或者好的区块(Good or Valid Block)中也含有一些错误位元(Error Bit)。
以上两点是与NOR Perfect记忆体要求的最大不同。因此NAND使用一定要搭配控制器(Controller),透过Hardware(H/W)与Software(S/W)进行坏区块管理(Bad Block Management),以及利用错误更正编码(ECC)修正错误位元。
然而,部份使用者未能查觉这两个基本的先天使用限制,仍然依照NOR或EEPROM的使用习惯进行产品设计,于是导致嵌入式系统在设计验证、生产、甚至于是在终端客户发现问题。在早期NAND多用于储存应用(例USB-drive、Memory card等),这种使用模式也与嵌入式系统应用有一些差别。
坏区块产生原因与管理
NAND中若出厂含有坏区块,制造商会在坏区块的Spare Area(Spare Column)或Data Area(Main Array)指定的位址写入非FFh的资料(例00h),通常为每个区块的第一个Page(或第二个Page或最后一个Page)的第一个Byte含有非FFh的资料,则该区块为坏区块,用以识别出厂时的好区块与坏区块,这就是所谓的坏区块标示(Bad或Invalid Block Mark)。见图1,如果深色区域其中含非FFh资料,则该区块为坏区块。
![](http://m.amcfsurvey.com/editerupload/201512/2b7f45aeeceac8379c315c9488c22a78.jpg)
图1 常见的NAND坏区块标示位址
使用者在使用的最初阶段,须先进行整颗晶片的坏区块扫描(Scan),建立每颗晶片的坏区块清单(Bad Block Table)。如果使用NOR的概念,直接执行坏区块的抹除(Erase),则该坏区块的坏区块标示将会被同步抹除,因而永久性地遗失坏区块标示,造成后续使用时误用了坏区块,导致应用的问题。因此,在进行任何区块的抹除或写入之前,必须先参照Bad Block Table或确定是否为坏区块。
造成坏区块的原因通常是因为无法写入资料、无法抹除资料、错误位元数超过规格、无法符合AC/DC参数规格、可靠度不良、或在某个温度下无法正常读写等问题而被标示为坏区块。
晶片制造商在出厂测试时,均会依严格测试条件进行筛选(Screen),进而标示出坏区块(通常每颗晶片坏区块比例小于2%),并保留一定Margin,使得产品即使累积的写入抹除次数到了最高限制次数,晶片内坏区块总数仍符合2%规格。
例如表1中,2Gb NAND总共含有两千零四十八个区块,至少会有两千零八个好区块,表示其中可能最多含有四十个坏区块。为了避免使用到坏区块而造成问题,使用者不可只依靠自行抹除坏区块后的功能测试,来判断那些区块是坏区块。应该完全依照制造商出厂时的坏区块标示,避免使用坏区块,因为坏区块可能含有潜在的功能偏差或可靠度问题。
![](http://m.amcfsurvey.com/editerupload/201512/e48317a80b34692f1171722f90e880e1.jpg)
除此之外,对于出厂时为好的区块,若在使用时发现其功能异常,也要进行坏区块退役(Retirement)的管理。唯一保证的是,出厂时每颗晶片的Block 0均为好区块,以方便使用者建立开机所需的程式码或参数设定,可储存于Block 0。而各区块之间是完全独立,写入抹除功能不会互相影响Data(NAND的最小抹除单位为一个区块)。
针对使用者可能误抹除坏区块,而导致坏区块标示遗失的问题,已有NAND制造商在晶片加入了防止被抹除的设计,即使是对坏区块误做了抹除,出厂时的坏区块标示仍然不会消失。但是对于出厂后因老化产生的坏区块,仍然会因误做了抹除而永久性地遗失了坏区块标示。
分区划分在嵌入式系统使用上是必要的,用以区分不同属性的程式码(Code)或资料(Data),例如某个分区是Boot Lader区,某区是Data Logging区,某区是User Data区,或者定义File Size大小。
区分不同属性程式码 分区划分不可或缺
NAND可能含有坏区块,各分区必须保留足够的记忆空间。因为如果坏区块集中在某些分区,使得该分区的记忆容量空间太小而无法满足运作所需,将导致系统故障。因此在分区时,必须确保各分区记忆容量不会太小,建议使用者在每一个分区必须先行预测估算可能的坏区块数目,保留足够的运作空间。但这个保留区块数量也牵涉到NAND常见的制程缺陷。
例如:图2为典型的NAND金属线制程缺陷种类,其中之一的缺陷为位元线接触井短路或串连线接触井断路(Bit-Line Contacts Short或String Contact Open),当发生以上这种缺陷时,会有两条位元线短路或一条位元线断路,造成某个Chunk(例:512Bytes)有两个或一个Error Bit,若在高品质要求的规格下,可能因为有含有较高的Bit Error Rate而将这连续两个区块均标示为坏区块。
![](http://m.amcfsurvey.com/editerupload/201512/22cfb2f020749b3b036a18371041f0a8.jpg)
图2 典型的NAND阵列金属线制程缺陷种类
又或像图3中,假设Block 1~4为某个Boot Loader File的分区,可能含两个坏区块,使用者必须考量当四个区块中剩下两个区块或更少区块时可否正常运作。尤其是对于低容量的NAND,因为总记忆容量以及区块数较少,在使用弹性较小情况下,更需注意最小File Size或Partition的使用限制。以下为实际使用案例说明:
![](http://m.amcfsurvey.com/editerupload/201512/e43255979e2f1f94aa5d78d603fd5217.jpg)
图3 分区划分示意图,若某一分区中含较高的坏区块比例
(a)Partition table 1(表2):
![](http://m.amcfsurvey.com/editerupload/201512/268de1656892e8ad6a59ef01c6e21be1.jpg)
标准与正确的使用NAND,每个分区均保留足够空间来容许坏区块。
(b)Partition table 2(表3):
![](http://m.amcfsurvey.com/editerupload/201512/0185c77bfb6ba93bcd753439dab44ba8.jpg)
虽然是正确的设定且允许坏区块的发生,但容许率不足,可能造成量产良率不稳定。
如同本文前面段落,Partition 2~6只允许一个坏区块是不够的,建议每个分区至少有4% x Partition Size加两个Block(4舍5入),之所以使用4%是为了保护系统,预留一定的Guardband,如果因为容量有限,使用者可与制造商讨论如何预留。
例如若Partion-8含有两百个Block,至少需允许十个坏区块。本案例中,为1Gb NAND的应用,扣除己经划分指定的Block以后,至少还有超过四百个Block未使用,如果能够适当的分配这些Block到各个Partition,可以让NAND天生的坏区块特性获得充分解决。
未正确启动错误修正码将产生三种状况
NAND的好区块中也可能含有错误位元,必须利用ECC来修正资料,目前大多数系统均使用主晶片(SoC/ASIC/Controller)提供的H/W来完成,以获取较好的效能,特别是系统须要处理较高的ECC Bit数时。而不同的半导体制程技术、产品设计、产品测试、以及制程控制都可能影响NAND出厂时所含的错误位元。
各NAND制造商均会依产品能力,订定所需的错误修正码位元数(Required ECC Bit)。通常以SLC技术来说,在4xnm以上(≥40奈米)制程技术,约需至少一个ECC Bit(每528Bytes=512Bytes Data+16 Bytes Parity),在3xnm(30∼39奈米)制程技术,约需四个ECC Bit(每528Bytes),在2xnm(20∼29奈米)制程技术,约需至少八个ECC Bit(每528Bytes)。
然而因4xnm以上制程技术宽限度(Margin)较大,在出厂状态下含有的Error Bit数量较少(平均Bit Error Rate约1x10-8),所以可能大部份区块是完全没有Error Bit。若未能正确使用会有以下情况:
1.开机载入程式时F/W未启动ECC,导致载入的程式含有错误资料,系统无法如预期操作,进而造成产品故障。这部份可能对于只需要1-Bit ECC规格的NAND影响较低,但对于先进制程NAND(需要较多Bits ECC)的影响就不容忽略。
2.在烧录器(Programmer)写入资料到NAND时,由于没有搭配Controller,因此未启动ECC,使得某些含Error Bit的晶片在烧录时被判定为坏品,造成不必要的良率损失。
3.使用者未能体认不同NAND产品所需ECC Bit数本来就可能不同,如果某个微控制器(Micro-controller)只有修正1-Bit Error能力,但是采用了需要4-Bit ECC的NAND,产品很容易产生资料错误,而无法正常运作。
因此,以使用者必须严格确实遵守NAND Datasheet中规定的ECC Bit数,启动错误修正码,否则可能造成资料错误或产品故障。就是因为NAND制程技术进步很快,在2012∼2014年制程转换从4xnm、3xnm、2xnm进展到1xnm,所以所需的ECC Bit数也大不相同。
如果使用者仍然以4xnm以上的经验及观念进行产品设计,而不是完全依照Datasheet规定,将无法发挥NAND的优点,也就经常发生使用者对ECC使用不正确而造成的问题。建议使用者如果有特别需要,应该与NAND制造了解及澄清。
采用特殊ECC演算法须注意资料保护/修正
AND中含有的错误位元,可能含有Data 1(Erased State),同时也含有Data 0 (Programmed State)的Error Bit。因此,不管是Data 1或是0,都要以ECC修正错误。
对SLC NAND来说通常Data 1的Error来自于写入或读取的干扰,造成NAND内某个记忆单元的储存电荷增加(Charge Gain),使得资料错误;Data 0的Error则可能是制程缺陷使得某个记忆单元固定态位在Data1(Stuck-at-1),或者因为长期资料保存,使得记忆单元中电荷泄漏(Charge Loss)造成资料错误。
通常产品在写入资料时,一并也会编码(Encode)写入ECC Code到同一Page的Spare Column上,所以Data 0都能得到资料保护。另外针对空白资料(Blank Data,FFh)的Page因为该Page的Spare Column上即使没有写进ECC Code,通常也会得到ECC保护而修正错误位元。
然而,部份使用者采用的ECC演算法较特殊,例如采用Data Polarity Inversion。对于空白资料的Page,如果没有对应写入ECC Code,User Data并不会得到ECC保护,修正资料中的错误位元。因此,使用者如果使用特殊的演算法,须特别注意不同资料需要修正和保护的资料内容。
未能考虑写入干扰之限制
NOP(Number of Program)是NAND的重要规格之一(NOR没有此限制,经常被忽略),通常制造商会标示NOP的最高限制,表示每个Page部份写入资料(Partial Program)的次数上限,例如:SLC NAND通常NOP为4∼8次,MLC和TLC NAND通常NOP规格为1,也就是说不允许分次写入资料到同一个Page中。
使用者必须依照NOP规格,以不超过NOP的次数规格之下,进行Page Program,例如NOP=4表示每个Page最多可多四次写入资料(Erase之后此规格Reset)。使用者必须注意NOP规格,不可进行超过NOP次数的Partial Page Program,以免因写入干扰而造成太多Error Bits进而可能超过最高ECC可以修正的能力。
Randomization Scheme减少区块资料不平均
因为NAND通常是将三十二个Flash Cell以串联方式连结起来,当读取其中某个Cell时,其他位于同一串联(String)的Cells,就当作是Pass Gate。然而Cell在写入资料后,因为储存电子多,其临限电压(Threshold Voltage)升高,导通电流相对会降低,因此该串String的bit-line电流下降明显。如果某一个String中大部份的Cells均为Data 0,该String的电流下降就更明显。
当电流下降到低于资料读取判断的电流值时,读取的资料就会产生错误问题。部份使用者因为对资料逻辑的定义,对于空(Void)的资料均填入Data 0,如此当某一个Block中绝大部份Bit都是Data 0的情况下,某些String就可能产生读取Data 1错误的问题。因此最理想的资料是使用者能平均分配Data 1与0的比率,避免过多的0出现在同一个String。
但这也不是代表完全不能有部份的String含有较多的Data 0,而是愈多的String中含有较多的Data 0,愈容易使Read Error,就容易超过ECC可以修补的Bit Error上限。目前己有Randomization Scheme技术可以将高重复性的使用者资料配合位址加以乱数化,减少相同资料接续写进同一Block的情况。
例如表4(a)中,资料看起来每个位址的资料都是相当地杂乱,然而在Column 0与Column 1(相当于Flash内部的Bit-line或String)中,可以发现其中的IO6与IO3各都有连续四个0;另外Row2(相当于Flash内部的Word-line)的IO6均含有0,可能造成较高Bit Error Rate,因此使用者应注意这种可能性。
![](http://m.amcfsurvey.com/editerupload/201512/f1d15bdcd38ced3f8594724932cc545a.jpg)
表4(b)中,某个Block中绝大部份Bit都是Data 0,除了Row 0之外其他Row的资料均为0。此时读取Row0的Data 1容易发生错误。
![](http://m.amcfsurvey.com/editerupload/201512/34def3195738f4073171295f3a6bea2b.jpg)
至于表4(c)是另一种极端,在同一个Block中除了Row0有资料之外,其他Row均为空白(FFh),短期的使用不太会有问题,也就是偶而有一次是这种Pattern是不会有问题。
![](http://m.amcfsurvey.com/editerupload/201512/bfac9b81e610084f4534319f7198b4a2.jpg)
但是如果将这个Block长期只有写入Row0(例:该Block只做Parameter储存用),其他Row的资料均为空白,则对可靠度可能有不良影响,这是因为每次这个Block只有Row0有写入资料,其他Row的资料均为空白,Row0的老化会比其他Row来得严重一些,造成同一个Block中老化速度极度分布不均,最后可能会影响data0与1态位的Sensing Margin。
不适当之验证方法
随着NAND半导体制程微缩使得成本下降的同时,品质和可靠的宽容度也大幅下降,因为在仅存非常微小的设计和操作空间之下,NAND的使用限制日渐复杂,尤其是MLC和TLC更是复杂,需要晶片制造商和使用者之间有非常紧密的沟通,以下列举常见的不正确验证方法与使用限制:
(1)单纯比较RBER
某些使用者评估NAND的方法是单纯地比较绝对的RBER(Raw Bit Error Rate,未经过ECC修正前的Bit Error Rate),做为产品能力及品质的比较,可能会以过于严格的标准去认定NAND能力,有失客观性也不必要,因为不同制程世代的NAND,RBER差异相当大,所需的ECC修正Bit数也大不相同。
例如4xnm的RBER比3xnm低,但是经过4-Bit ECC修正后,可能3xnm的UBER (Uncorrectable Bit Error Rate,经过ECC修正后的Bit Error Rate)比4xnm经过1-Bit ECC修正后的UBER更低。因此使用者应该根据应用的需求,考虑UBER,才不会限制了使用先进产品的机会。正确启动主晶片对应到NAND的ECC Bit,可以确保NAND的使用品质。(注:SSD可接受的UBER为≥1×10-15)
(2)依照特定位址顺序写入指示
针对先进制程产品(例2xnm MLC & TLC)写入资料顺序须依指示,而非传统上依Logical Sequence自0,1,2..60, 61,62,63..依续写入,而是有特定的位址顺序。
(3)写入资料需是Random Pattern
进行写入抹除耐久性(Endurance)与资料保存寿命(Data Retention Lifetime)实验的写入资料必须是Random Pattern(才可以模拟一般真实使用情况)而不是使用像F0F0h或0F0Fh等重复性的资料,否则某些Cell可能被过度Stress将会使Bit Error Rate上升或资料保存寿命Lifetime下降。
(4)须模拟10年寿命内分散式进行
写入抹除实验必须模拟在10年寿命内分散式(Distributed)的进行,而不是在短时期内,很快地做完额定的最高写入抹除规格;此外,如果短时间内频繁进行写入抹除,得到的可靠度数据通常会比较差,其原因在于写入抹除过程中所快速产生的老化无法在短时间内被释放或回复,因此而累积了过多的老化。所以相关的验证方法,必须能对应到系统的实际工作行为模式。
JEDEC固态技术协会定义了相关验证标准,制造商大多是依据这个工业标准所定义的方法、程序、温度、和时间等条件进行各种实验评估,使用者也应参照JEDEC标准做为NAND验证条件,否则经常会过度Stress而突增困扰。
(5)依JEDEC条件评估
资料保存验证也和前项类似,进行资料保存实验前所做的写入抹除实验须依JEDEC或依制造商提供的温度和各种实验条件进行评估,实务上常有使用者先以常温快速进行写入抹除实验(例如一周内完成100k Program/Erase Cycling),再接着进行高温烘烤实验,评估资料保存寿命。
这种方式会严重低估了资料保存寿命。因为大多数情况下,所需的资料保存寿命是两次写入抹除之间的时间,如果很频繁地进行写入抹除,实际上所需的资料保存寿命是较短的。一般来说写入抹除和资料静止不变更的温度通常是接近的,如果做写入抹除在常温,却以高温做资料保存测试是过度的Stress,导致实验程序与实际User Mode的偏差。JEDEC验证标准建议在高温进行写入抹除循环测试,接着以高温做资料保存测试,才符合现实应用。
NAND已经广泛运用在嵌入式系统,然而由常见的NAND使用问题,可见使用NAND必须注意的要点及限制比起NOR多很多,而且随着制程演进限制更多。使用者若不能正确使用NAND,幸运的情况在设计验证阶段就发现问题,如果一直到量产出货后才发现问题,可能造成相常严重的后果,因此必须非常小心谨慎,如果有任何疑问应与制造商仔细沟通了解NAND的使用特性与规格。
评论