NAND Flash存储关键技术*

2016-09-07 02:25刘航航李晓颖杨云刚薛小乐中国兵器工业第203研究所西安710065
弹箭与制导学报 2016年1期
关键词:校验字节编程

刘航航,李晓颖,杨云刚,薛小乐(中国兵器工业第203研究所,西安 710065)

NAND Flash存储关键技术*

刘航航,李晓颖,杨云刚,薛小乐
(中国兵器工业第203研究所,西安710065)

为提高NAND Flash数据存储的可靠性,阐述了坏块管理的基本思想,探讨了坏块跳过、坏块替换和动态坏块管理三种方案,探究了基于汉明码的BCH码的数据校验算法。为提高NAND Flash存储效率,研究了Multi-Plane操作、Interleaved Die操作、多片Flash阵列流水线技术等方法。研究分析表明坏块管理策略和数据检验可提高NAND Flash数据存储可靠性,流水线操作等技术可提高NAND Flash存储效率。

NAND Flash;坏块管理;数据存储

0 引言

存储模块是决定嵌入式系统性能的核心模块之一,NAND Flash作为一种安全、快速的存储设备,具有小体积、大容量、低成本、擦除次数多以及保存寿命长等优点,在嵌入式系统的数据存储中广泛应用。但由于生产加工工艺水平有限及NAND Flash物理结构的特性,会导致芯片在出厂和使用过程中出现坏块,影响存储的可靠性。因此,在进行NAND Flash存储设计时需要考虑数据存储的可靠性与存储效率。文中首先介绍NAND Flash的物理结构及特性,在此基础上探讨存储关键技术[1]。

1 NAND Flash简介

NAND Flash分为SLC flash和MLC flash两种。SLC是指每一个存储单元只存储1位的信息。MLC并非单纯在存储单元中存储电荷,而是要精确控制存储电荷的多少,这导致其误码率高于SLC,相应的读写机制也更复杂,因而降低了读写速率。相对SLC,MLC使用寿命较短,存取速率较慢,能耗比SLC高,但存储容量较大[2]。

图1 芯片组织架构

文中结合Micron公司一款MLC架构的芯片MT29F128G08介绍其关键的存储技术。该芯片组织架构见图1所示,芯片内部包含两个Target,每个Target包含一个逻辑单元Logic Unit(LUN),LUN的组织架构见图2所示,图中给出了详细的存储结构。

图2 Logical Unit(LUN)组织架构

2 存储可靠性关键技术

NAND Flash出厂时被厂商确认的坏块在文中被称为固有坏块;在使用过程中,当对块的擦除或编程操作失败,或是发生超出数据校验算法纠错能力的块应被标记为坏块,这种块在文中被称为使用坏块。好的坏块管理策略和数据校验算法是保证存储可靠性最重要的关键技术,此外可通过牺牲空间换取存储的可靠性。

2.1坏块管理

坏块管理的主要思路避免对坏块进行操作,在遇到坏块时找到好的块来替代坏块;主要工作是创建和维护坏块管理表bad-block-table(BBT)以及对逻辑物理地址的管理。BBT的创建依据厂商的约定读取相应位置的坏块标记,经研究坏块管理的常用方法有如下几种[3-7]。

2.1.1坏块跳过

对于固有坏块,依据BBT判定待操作的块是否为坏块,若为坏块,则跳过该块,将数据存储在相邻的下一个好块上,如图3所示,第n块为坏块,第n+1块为好块,则跳过第n块将数据存储至第n+1块。如果是使用坏块,则将该块标记为坏块,同时跳过该块将数据存储在下一个好块,如有必要,将数据转存至好块中。

图3 坏块跳过示意图

2.1.2坏块替换

坏块替换的管理思路是遇到坏块时并不是跳过该块寻找最近的好块继续存储,而是通过修改其逻辑地址与物理地址的映射关系,将逻辑地址指向一个确定的好块,从而达到坏块替换的目的。该方案中需将所有块分为两个区:存储区与替换区,如图4所示。MT29F128G08芯片官方手册中指明在产品有效的生命周期内坏块的数目不会超过100块,按20%的余量设计,替换区预留的好块数目大于120块即可满足使用要求。在应用层,用户操作的是连续地址,易于操作与管理;在驱动层或逻辑层需要维护好存储区与替换区的映射关系。

图4 坏块替换示意图

2.1.3动态管理

为了保持NAND Flash的使用寿命足够长,必须避免擦写区域的不均衡,否则会因为局部达到擦写极限而报废,通过磨损均衡机制可有效延长闪存的使用寿命。

为了解决损耗均衡的问题而定期进行特殊整理。比较各个区域或块的擦除次数(块擦除次数可作为BBT的属性之一),对于使用频率明显低于平均水平的块,需提高其使用次数;对于使用频次明显高于平均水平的块应减少对其操作的频次。

2.2数据校验算法

如电路稳定,操作时序正常,NAND Flash出错时一般只是某个页中1 bit或几个bit发生错误。SLC Flash发生错误尤其是2 bit以上的错误的概率较低,一般使用汉明码进行校验和纠错[8]。而MLC Flash的错误一般都大于2 bit,需使用纠错能力更强的BCH算法。

2.2.1汉明码校验算法

1)校验算法

基于汉明码的ECC(error correction code,ECC)数据校验算法将数据块看作一个矩阵,利用矩阵的行、列奇偶信息生成校验码,能够纠正1位、发现2位的错误。以512字节的数据为例,生成3字节ECC校验数据共24位:6位的列校验码和18位行校验码,具体生成规则不再赘述[9],存放次序如表1所示,CP表示列校验码,RP表示行校验码。

表1 汉明码ECC校验码存放格式

2)纠错算法

向NAND Flash的页中写入数据时将生成的ECC校验和保存到页的OOB(out of band)数据区中。当从NAND Flash中读取数据时,在应用层对每512字节生成一个新的ECC校验和。将两校验和按位异或,结果分析如下:

a)若结果为0,则表示不存在错(或是出现了ECC无法检测的错误);

b)若结果中存在12个比特位为1,表示存在一个比特错误,且可纠正;

c)若结果中只存在1个比特位为1,表示OOB区出错;

d)其他情况均表示出现了无法纠正的错误。2.2.2BCH码校验算法简介

BCH码是一类重要的循环码,能纠正 NAND Flash中多个随机错误,基于BCH码的纠错过程由编码和译码两部分组成[10-11]。

1)BCH编码原理

设BCH(n,k)码的码元取自有限域GF(2m),能纠正t个错误,信息位有k位,校验位有r位,其原始多项式为:

其中mi∈{0,1},i=0,1,2,…,k-1。生成多项式为:

其中gi∈{0,1},i=0,1,2,…,r。生成的校验多项式为:

系统码的生成表达式为:

由此可以看出,系统编码的关键是求出校验多项式,其过程可描述如下:

a)信息多项式m(x)升 xn-k次幂变为 xn-k·m(x);

b)xn-k·m(x)除以生成多项式g(x)得到商q(x)和余数多项式r(x);

c)码元多项式即为:

2)BCH译码过程

BCH译码算法是BCH码研究中最关键的部分,其过程可分为3个步骤[12]:

a)由接收码字计算伴随式,如果伴随式的值不为0则有错误存在;

b)依据伴随式求出错误位置多项式σ(x);

c)求出σ(x)的根,得到错误位置并更正错误。

2.3取同舍异法

“取同舍异法”是笔者在实际应用过程中经常使用的一种方法。存储数据时存3份,读取数据时逐一比较3份数据的每个字节:如果3个字节相同,返回任一个即可;如果有一个字节不同,返回相同的两个字节中一个;如果3个字节都不相同,则返回任一个即可,但数据采信度低,这种情况发生的概率极低。

该方案是通过牺牲存储空间换取数据可靠性的方法,适用于数据量较小或是存储极其重要的数据的场合,如索引表或测试结果等。

3 存储效率关键技术

制约NAND Flash存储速率的主要因素是编程单位为页,完成一页的编程需要一定的时长。因此,如要提高编程效率或系统存储性能需要合理利用好页编程时间。

3.1单片Flash编程技术

1)Cache操作

对于普通的页操作,Cache Registers和Data Registers是一个整体(Cache Registers和Data Registers的关系见图2),而对于Cache操作,Cache Registers和Data Registers视为两个缓冲区,首先将数据传送至Cache Registers,Flash内部将数据从 Cache Registers搬移至Data Registers后进行编程。此时Cache Registers处于空闲状态,可以将下一次需要存储的数据传入Cache Registers,从而提高存储效率。

2)Multi-Plane操作

由图2可知,每个Plane都有独立的缓冲寄存器和数据寄存器,因而可以同时对多个Plane进行操作从而提高存储效率。Multi-Plane编程的过程是分别传入各个Plane需要编程的地址和数据,同时开启编程操作,共享编程时间,从而提高整体编程性能。

3)Interleaved Die操作

当一个Target包含有多个LUN时,由于各个LUN的片选、地址、数据、命令、状态总线都是独立的,当对两个LUN进行交互编程时,理论上存储效能可以提高2倍。具体过程为首先对LUN1发送编程指令和数据,当LUN1内部开始进行编程操作时对处于就绪态的LUN2发送编程指令和数据,LUN2内部开始编程操作之后查询LUN1编程是否已完成,如果完成开启下一次存储操作。如此循环交互操作LUN1 和LUN2,就可以有效的利用页编程时间,使得整体编程效率大大提高。

3.2多片流水线存储技术

在高速应用的场合,单片Flash不能满足存储速率要求。对Flash阵列采用分片流水线技术,可以大大提高存储效率[13-15]。在进行连续快速存储数据时,将数据块拆分成多个数据片,采用流水线方式将数据片分散写入各个Flash芯片,以消除各个Flash芯片写入的等待时间,加快写入速度。如图5所示,4 片Flash构成的存储阵列工作流程示意图,其存储速率可提高约4倍。

图5 Flash阵列流水线存储示意图

嵌入式系统中一般由FPGA产生Flash选择,控制信号将数据分散写入板卡上的相应的Flash存储器;应用程序实现Flash阵列存储的数据结构链表和文件管理。在多片流水线存储的过程中结合3.1小节中提到的常规方法,理论上速率会有更大的提高。

4 小结

1)坏块和位翻转是影响NAND Flash数据存储可靠性的主要因素,通过坏块管理、数据校验及取同舍异法可以提高产品的使用寿命和数据可靠性。

2)基于汉明码的ECC校验适用于SLC架构的NAND Flash,而MLC架构的Flash应选用BCH码校验算法。

3)页编程时间是限制NAND Flash存储效率的主要因素。通过Cache、Multi-Plane、Interleaved Die等操作可以有效提高单片Flash的存储效率;通过流水线技术可以提高Flash阵列的存储效率,满足高速应用的场合。

[1]杜家瑞,刘正强,李应春.NAND Flash在嵌入式系统中的应用[J].微机处理,2010(2):115-118.

[2]林刚.NAND Flash坏块管理算法及逻辑层驱动设计[D].西安:西安电子科技大学,2009.

[3]彭兵,步凯,徐欣.NAND Flash坏块管理研究[J].微机处理,2009(2):113-115.

[4]程道远.NAND Flash文件系统方案及其可靠性设计[J].电脑知识与技术,2007(9):1320.

[5]文燚,谢凯年.超大容量NAND FLASH坏区管理方法的设计与实现[J].现代电子技术,2007(16):55 -57.

[6]宁飞.大容量存储中 NAND Flash坏块的管理方法[J].电子测试,2012(12):64-68.

[7]朱念好,周玉洁.Flash存储管理的研究与设计[J].计算机工程与设计,2010,31(3):511-513.

[8]邢开宇,曹晓曼,方火能.基于FPGA和NAND Flash的存储器 ECC设计与实现[J].电子科技,2012,25 (10):70-73.

[9]李泽明,杨燕娇,张会新.一种NAND Flash ECC校验设计及FPGA实现[J].电视技术,2013,37(17):73 -75.

[10]殷民,易波.闪存控制器中BCH编解码器设计和验证[J].通信技术,2012,45(2):6-9.

[11]陈宗正.NAND Flash控制器中BCH编译码器的设计与硬件实现[D].武汉:华中科学技术大学,2012.

[12]赵淑明,王卫东,李彦强.BCH编译码的DSP实现[J].山西电子技术,2008(2):25-26.

[13]杜学亮,金西.NAND Flash的并行调度算法[J].小型微型计算机系统,2010,31(6):1171-1174.

[14] 贾源泉.基于NAND FLASH的多路并行存储系统的研究与实现[D].长沙:国防科学技术大学,2011.

[15]张燚翾,殷希梅,程洪涛.基于AT25DF641的弹载数据记录器的设计[J].弹箭与制导学报,2010,30 (5):209-210.

THe Key Technique of High-capacity NAND Flash Memory

LIU Hanghang,LI Xiaoying,YANG Yungang,XUE Xiaole
(No.203 Research Institute of China Ordnance Industries,Xi’an 710065,China)

In order to improve reliability of NAND Flash data storage,basic idea of bad block of NAND Flash was discussed,three management strategies including bad block skip,bad block replacement and dynamic management were analyzed;Error checking and correcting algorithm were also described.In order to enhance efficiency of NAND Flash memory,Multi-Plane operation,Interleaved Die operation,pipeline storage technology of multi-chip were studied.Analysis shows that the effective management strategies and data check-out algorithm can increase NAND Flash data storage reliability,several operations sharing the program time can raise efficiency of NAND Flash memory.

NAND Flash;error management;data storage

TP333.5

A

10.15892/j.cnki.djzdxb.2016.01.040

2015-04-21

刘航航(1988-),男,甘肃人,硕士,研究方向:测控与嵌入式系统设计。

猜你喜欢
校验字节编程
使用Excel朗读功能校验工作表中的数据
No.8 字节跳动将推出独立出口电商APP
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
No.10 “字节跳动手机”要来了?
轻量级分组密码Midori64的积分攻击
智能电能表的现场快速校验方法探讨
电子式互感器校验方式研究