数据记录器中NAND Flash的坏块管理方法*
2016-09-09郁聪冲
邢 旺 郁聪冲
(92941部队95分队 葫芦岛 125000)
XING Wang YU Congchong
(Unit 95, No.92941 Trops of PLA, Huludao 125000)
数据记录器中NAND Flash的坏块管理方法*
邢旺郁聪冲
(92941部队95分队葫芦岛125000)
NAND Flash作为数据记录器中的数据存储芯片,其在应用时容易受到坏块问题的影响。大量的应用表明坏块能够降低存储芯片的稳定性,造成存储数据的错误,因此为了保证存储数据正确,对NAND Flash芯片中坏块的管理具有重要意义。介绍了NAND Flash的物理结构,归纳了坏块跳过法和动态坏块管理法,为NAND Flash的坏块管理提供了依据。
NAND Flash; 坏块识别; 坏块替换; 坏块跳过; 动态坏块管理
XING WangYU Congchong
(Unit 95, No.92941 Trops of PLA, Huludao125000)
Class NumberTN401
1 引言
随着电子技术的飞速发展,嵌入式系统已被广泛应用于工业生产与军事国防领域。基于嵌入式系统研发的数据记录器能够接收并存储工业设备的健康状态数据,为设备的安全运行提供保障;在武器装备试验中,数据记录器可以存储装备运行期间的各种试验参数,试验结束后可通过导出试验数据分析装备故障、测定航行路线等,为事后鉴定提供依据,尤其在飞行器的飞行试验与水下探测器的航行试验中,若数据记录器不能正常工作,不仅没有依据评定装备的性能,而且会造成不可估量的损失。现阶段,Flash闪存已成为各类便携型数字设备的存储介质,由于NAND Flash芯片具有存储速度快、容量大、可擦除次数多等优势,其在数据记录器中应用最为广泛。但是NAND Flash在出厂时便会存在稳定性无法保证的坏块,这是由于技术工艺问题造成的,并且无法克服,同时,在使用过程中,随着擦写次数的增多,也会出现坏块,这些坏块不允许进行擦除和写入操作,所以,坏块管理在NAND Flash中具有相当重要的作用[1~3]。
针对数据记录器中NAND Flash存在坏块的情况,本文主要研究NAND Flash的工作原理和芯片中坏块的管理方法,以满足不同的需求,为数据记录器中NAND Flash存储数据的正确性和芯片工作的稳定性提供可靠的保证。
2 NAND Flash的物理结构
现在很多公司都生产NAND Flash芯片,以三星公司生产的K9K8G08U0A芯片为例[4],其物理存储单元的阵列组织结构如图1所示,该芯片的存储结构包含8192个块,每块的存储空间大小为(128K+4K)字节。每一块又含有64页,每页的存储空间大小为(2K+64)字节,其中,2K为用户的数据存储区,最后64字节构成的区域为冗余区域,数据在读写时候相对容易出错,为了保证数据的正确性,必须要有对应的检测和纠错方法,而额外的错误校验等需要空间,所以设计了多余的区域,用于放置数据的校验值或坏块标记等信息[5]。
图1 K9K8G08U0A的物理存储单元的阵列组织结
页是NAND Flash的写入操作的基本单位,NAND Flash芯片中都有一个对应的区域,专门用于存放将要写入到物理存储单元中去的或者刚从存储单元中读取出来的一页数据,这个数据缓存区称为页寄存器,只有将数据写到了页寄存器中,等待编程确认命令到来时,实际的编程写入动作才开始。块则是NAND Flash擦除操作的最小单位,在发送一个擦除命令后,一次性地将一个块全部擦除为1,也就是0xFF。NAND Flash的数据流向步骤如图2所示。
图2 NAND Flash的数据流向
3 NAND Flash的坏块管理
3.1坏块识别和存储
NAND Flash的出厂坏块包含一个或更多个不可用的bit,生产NAND Flash的厂家通常会保证芯片的第0块是好块,并且一般相对比较耐用,做此保证的主要原因是很多种NAND Flash的坏块管理方法中,就是将坏块信息存储在第0块内。坏块的标记保存在冗余区的固定位置,对于现在常见的页大小为2K的NAND Flash,坏块标记位于块中第一页起始位置的第1个字节,如果该字节不是0xFF,就说明该块是坏块。在第一次启动时,NAND Flash通常会进行坏块扫描和建立坏块信息表的过程,该过程的流程图如图3所示。
图3 创建坏块信息表的流程
NAND Flash在使用过程中出现的坏块分为两种:1)当擦除或者编程操作失败时,会产生第一种使用坏块。具体过程就是在擦除和编程操作过后读状态寄存器,如果失败就将该块标记为坏块。2)读某块内的某页数据时,如果数据出错位数超出了ECC(Error Correcting Code)校验能力,则产生第二种使用坏块。具体过程就是在读操作后,如果ECC不能校验回原数据就标记该块为坏块[6]。
3.2坏块的替换
通常情况下,创建坏块表的同时会创建一个坏块和好块的对应关系表并保存在NAND Flash的第0块中。在存储数据时,首先读出坏块表中的信息,然后根据坏块表中的信息跳过固有坏块进行数据的存储;同样,在NAND Flash使用过程产生坏块时,通过坏块和好块的对应关系表,把坏块中的数据转存到与之对应的好块中,同时跳过此坏块,将此坏块进行标记并更新无效块表的信息[7]。坏块替换过程如图4所示。
图4 坏块替换过程
在编程或者写入过程中,如果发现块A的第n页出现错误时,首先复制第A块中第1页到第(n-1)页的数据,同时转存到好块B的相同位置,然后将缓存中块A第n页的数据复制到块B的第n页,并在块B中继续存储数据,完成坏块的替换。
3.3坏块跳过法
坏块跳过法的思想在于运行前首先建立坏块信息标记表,如果在运行中经查询某块是坏块时,则跳过该块,对下一个块地址进行操作。如果在NAND Flash使用过程中突发出现坏块,也将该坏块的数据存储在下一个好块里。这种方法实现简单,查询标记和坏块替换速度快,一般适用于高速顺序的场合[8~9]。其具体过程为:上电时先将第0块的坏块表信息读出并存入相应的寄存器中,在写数据之前调用检测好块地址函数,将检测到的好块地址存到寄存器中,读取寄存器中好块地址进行写操作的同时继续调用检测好块地址函数,如果检测到下一块是好块就直接存到寄存器中,如果是下一块是坏块则将块加一,并再次调用检测好块地址函数,直到检测到好块并将其地址存到寄存器中,这样循环下去,不断更新和读出寄存器中的内容,便可以成功跳过坏块。坏块跳过法的时序仿真图如图5所示。
图5 坏块跳过法时序仿真图
以K9K8G08U0A芯片为例,该芯片的每一块含有64页,将地址加64,即16进制的0040,就可以实现块数增加1,即跳过一块。图5中clock为时钟信号,bad_block为坏块信号,addr为起始地址,addr_add为地址的增加值。当输入的起始地址为16进制数1100时,若在地址1102处检测到坏块,则发出bad_block坏块信号,同时地址的增加值addr_add由0000变为0040,操作地址也由1101加上0040变为1141,则成功跳过坏块,对下一块进行操作。
3.4动态坏块管理法
动态坏块管理法的思想在于当NAND Flash存储空间出现坏块时,采取动态坏块管理法标记坏块,将坏块放入映射表的坏块区,从替换块区选择一个好块,代替坏块进行操作,同时,更新逻辑-物理块地址映射表。在对已用块进行写入操作时,改为对交换块进行操作,有利于NAND Flash存储空间的管理及逻辑-物理地址映射表的更新[10~11]。
动态坏块管理法首先将NAND Flash整个的存储空间划分成若干个组,每个组包含相同数量的块,同时为每个组建立一张逻辑-物理块地址映射表,并将映射表划分为四个区:1)数据存储区:用于存储数据、系统应用程序等;2)交换块区:所有对已用块的写入操作均改为对交换块的写入;3)替换块区:替换块用于当写入块是一个坏块时,可以从替换块中找一个好块,代替坏块进行编程操作;4)坏块区:坏块区用于存放初始上电扫描发现的坏块以及使用过程中出现的坏块。在映射过程中将坏块放在映射表的最后。每一组的逻辑-物理块地址映射空间划分如图6所示。
图6 映射空间的划分
动态坏块管理法的关键环节在于更新逻辑-物理块地址映射表,需要更新逻辑-物理地址映射表的状况有两种:1)当对某一块进行编程、擦除操作失败时,则认定该块为坏块,此时需要从替换块区选择一个好块,将坏块的逻辑地址赋给替换块区选定的好块,并对替换块进行写入数据的操作,同时将坏块和替换块进行标记,并将坏块的逻辑地址对应到地址映射表的坏块区;2)若没有出现坏块,而是将要进行编程写入操作的块是已用块时,便要从交换块区选择一个块代替已用块进行操作,将交换块的地址映射到数据块中,并擦除此已用块,将其作为新的交换块进行使用。每次完成对一个块的写入操作后,要更新映射表,实现动态的映射地址更新。最后,当对若干个块构成的某个组全部完成操作后,系统自动更新NAND Flash存储的地址映射表。
4 结语
针对目前NAND Flash大量应用于数据记录器的现状以及NAND Flash存在坏块问题的限制,本文介绍了坏块跳过法以及动态坏块管理法。坏块跳过法实现简单且完成速度快,适用于高速场合,而动态坏块管理法能够实现逻辑-物理地址映射表的实时更新,同时引入了交换块的概念,在频繁进行写入擦除操作时能及时找到替换块。通过使用合适的坏块管理方法,可以对NAND Flash中
产生的坏块进行有效管理,提高了存储系统的稳定性,为存储数据的准确性提供了可靠保障。
[1] 薛瑶.某飞行器数据记录器的优化设计[D].太原:中北大学,2009:8-10.
[2] 李士照.某水下用数据记录器的设计及实现[D].太原:中北大学,2013:1-6.
[3] 王安,钱晓亮,樊文侠.基于ARM的USB接口数据记录器的设计[J].计算机应用,2007,27(1):254-256.
[4] Samsung. K9K8G08U0A [EB/OL]. http://www.samsung.com/Products/Semiconductor, 2006-1-10.
[5] 宁飞.大容量存储中NAND Flash坏块的管理方法[J].电子测试,2012(12):64-68.
[6] 周军.NAND Flash的坏块管理设计[J].单片机与嵌入式系统应用,2010(9):15-20.
[7] 彭兵,步凯,徐欣.NAND Flash坏块管理研究[J].微处理器,2009(4):113-115.
[8] 舒文丽,吴云峰.NAND Flash存储的坏块管理方法[J].电子器件,2011,34(5):580-583.
[9] 张胜勇,高世杰,吴志勇,等.基于FPGA的NAND Flash坏块处理方法[J].计算机工程,2010,36(6):239-243.
[10] 韩勇豪,王少云.一种NAND Flash动态坏块管理算法的设计与实现[J].信息化研究,2011,37(3):23-26.
[11] 张鹏.NAND Flash坏块管理算法研究与实现[D].哈尔滨:哈尔滨工业大学,2015:8-11.
Bad Block Management Methods of NAND Flash Memory in Data Recorder*
NAND Flash is used as memory chips of the data recorder. NAND Flash is easily affected by the bad block problem. Bad block could be able to reduce the stability of the memory chips and cause data errors. Therefore, bad block management of the NAND Flash is important. The physical structure of NAND Flash is introduced. Bad block skip method and dynamic bad block management method are summarized. Theoretic analysis can verify the truth of the bad block management methods of NAND Flash.
NAND Flash, bad block identification, bad block replacement, bad block skip, dynamic bad block management
2016年2月9日,
2016年3月21日
邢旺,男,硕士研究生,助理工程师,研究方向:卫星导航。郁聪冲,男,硕士研究生,助理工程师,研究方向:卫星导航。
TN401
10.3969/j.issn.1672-9730.2016.08.032