基于扩序列的NAND闪存坏块重复利用方法及装置技术领域
本发明属于通讯技术领域,涉及一种NAND闪存坏块重复利用方法及装置,特别涉
及一种基于扩序列的NAND闪存坏块重复利用方法及装置,可用于U盘和固态硬盘等存储设
备。
背景技术
闪存(Flash)是一种非挥发性的半导体存储芯片,具有体积小、功耗低、不易受物
理破坏的优点,是移动数码产品的理想存储介质。
Flash存储器按照内部架构和具体实现技术可以分为AND、NAND、NOR和DiNOR等几
种,目前以NAND闪存为主流存储器。NAND闪存具有容量大、体积小、功耗低、随机读写性能
好、性价比高等优点,从而得到了广泛应用。NAND闪存从架构上来说又分为三种:SLC
(Single Level Cell)、MLC(Multi Level Cell)以及TLC(Triple Level Cell),由于MLC架
构的NAND闪存在速度、寿命以及价格等方面的综合优势,得到了业界的普遍采用。NAND闪存
技术中的基本存储单元为“页”,若干页组成一个块,块容量等于页容量与块内页数的乘积,
不同闪存的块内页数不尽相同,通常为16页~512页。闪存的编程以页为单位,在写之前必
须先擦除;闪存的擦除则以块为单位,NAND闪存是由多个块串行排列组成。NAND闪存是一种
顺序读取的设备,它仅用8或16比特的I/O端口就可以存取按页为单位的数据。NAND闪存在
读和擦写连续大容量文件时,速度优势明显,但随机存取时速度比较慢,因为它不能按字节
写。NAND闪存容易产生坏块,坏块损坏的物理机制一般是页中某些比特位不能被编程,通常
是1不能被编程为0,它发生比特错误是离散独立的。如果一页中的不能被编程比特数超过
了该芯片设定的ECC最大校验能力时,就会被称为“坏块”而被抛弃。比如镁光公司的
MT29F512G08芯片,它的ECC校验能力为1100字节纠错40比特,即当每1100字节中的错误比
特数超过40时,这个块就会被认定为坏块而不被使用,造成了大量的浪费。
目前对坏块的处理方法主要分为两种,分别是替换法和重复利用法。
替换法是指在设计时,用一个控制器管理坏块,当向坏块存取数据时,控制器即将
数据转移到预定备用替换区域,以保证数据安全完整。例如中国专利申请,授权公告号为
CN103593301B,公开了一种坏块管理方法及系统,包括操作系统执行从目标地址的读取数
据,监控到从该目标地址读取的数据并与原始写入的数据相对比后不一致;将该目标地址
指向的存储区域设置为坏块区域,并建立与该坏块区域对应的替换区域;将要存储的数据
写入到所述替换区域中。此方法虽然可以保证数据的正确存储,但是在实现过程中完全抛
弃了仍旧拥有大多数正常存储单元的坏块,造成存储空间的浪费。
重复利用法是指通过相关算法或工具对坏块进行利用。例如中国专利申请,授权
公告号为CN101859604B,公开了一种闪存坏块的利用方法,该方法首先借助量产工具软件
扫描闪存,发现其中的坏块并记录在闪存控制器内;再对量产工具软件扫描发现的闪存坏
块根据事先设定的“可供利用”之筛选条件再次扫描,符合筛选条件的所述坏块被标记并记
录在闪存控制器内,等待使用;不符合筛选条件的坏块则标记为真正的坏块被记录在闪存
控制器内,不再使用;重复所述扫描和标记过程直到所有闪存坏块都被标记和记录;最后将
闪存中符合“可供利用”之筛选条件的坏块放在替换区等待使用。该发明可以利用那些只是
对某些数据敏感的坏块,也就是坏块中特殊的很小一部分,而对剩下占大多数的普通坏块
还只能是弃之不用。这在闪存容量不断增加的情况下,浪费的闪存空间就会越来越大。可
见,现有技术利用闪存坏块的适应性很差,并不能适应于所有坏块,找到一种可以无限制的
对闪存坏块进行利用的方法显得尤为重要。
发明内容
本发明的目的在于克服上述现有技术存在的缺陷,提出了一种基于扩序列的NAND
闪存坏块重复利用方法及装置,旨在提高坏块的利用率,改善坏块重复利用的适应性差的
问题,延长NAND闪存的使用寿命。
为了实现上述目的,本发明采取的技术方案为:
基于扩序列的NAND闪存坏块重复利用方法,包括以下步骤:
(1)数据获取模块获得外部存储设备中将要写入坏块的数据,得到原始测试数据;
(2)设置扩序列码的初始长度L为3,判决门限P为2,其中L=2n-1,P=L-n+1,n为扩
序列码的阶数,且n≥2;
(3)扩序列模块利用扩序列码,对原始测试数据进行扩序列,得到扩序列后数据;
(4)数据写入模块将扩序列后数据写入NAND闪存的坏块中;
(5)数据读出模块读出NAND闪存坏块中的数据,得到待解扩数据;
(6)解扩模块利用扩序列码对待解扩数据进行解扩处理,得到解扩后数据;
(7)数据恢复模块依据判决门限P对每L比特数据依次进行判决,得到恢复数据;
(8)数据检测模块将恢复数据和原始测试数据进行比对,并判断该两种数据是否
一致,若是,则实现了坏块重复利用,结束;若否,则将n改为n+1,执行步骤3。
上述基于扩序列的NAND闪存坏块重复利用方法,步骤1中所述的获得外部存储设
备中将要写入坏块的数据,是由直接内存访问方式获得的。
上述基于扩序列的NAND闪存坏块重复利用方法,步骤3中所述的扩序列后数据,是
通过原始测试数据与扩序列码进行按位异或处理得到的,步骤6中所述的解扩后数据,是通
过待解扩数据与扩序列码进行按位异或处理得到的。
上述基于扩序列的NAND闪存坏块重复利用方法,所述坏块,是指超出闪存控制器
ECC纠错范围的闪存块。
上述基于扩序列的NAND闪存坏块重复利用方法,步骤1~步骤8,均是基于FPGA实
现的。
上述基于扩序列的NAND闪存坏块重复利用方法,步骤7中所述的对每L比特数据依
次进行判决,其判决方法为,每L比特数据中若有P个或大于P个的1,则恢复数据为1,若有P
个或大于P个的0,则恢复数据为0。
上述基于扩序列的NAND闪存坏块重复利用方法,步骤8中所述的将恢复数据和原
始测试数据进行比对,是指将恢复数据和原始测试数据进行按位异或处理,并对处理结果
进行分析实现的。
一种基于扩序列的NAND闪存坏块重复利用装置,其特征在于,包括数据获取模块、
扩序列模块、数据写入模块、数据读出模块、解扩模块、数据恢复模块和检测模块,其中,
数据获取模块,用于获取外部存储设备中的原始测试数据;
扩序列模块,用于通过长度为L的扩序列码对将要写入坏块的数据进行扩序列;
数据写入模块,用于将扩序列后数据写入到相应NAND闪存坏块中;
数据读出模块,用于读出坏块中的扩序列后数据;
解扩模块,用于对从坏块中读出的数据通过同样长度为L的扩序列码进行解扩处
理;
数据恢复模块,用于将解扩后的数据进行数据恢复;
数据检测模块,用于检测恢复数据和原始测试数据是否一致。
本发明与现有技术相比,具有如下优点。
本发明由于在NAND闪存中存在坏块不能被利用的情况下,通过将写入NAND闪存坏
块的数据进行扩序列后再写入,经过后续的解扩处理和数据恢复,理论上可以实现对所有
超过闪存控制器ECC校验能力的NAND闪存坏块重复利用,扩展了NAND闪存的可用存储容量,
增大了NAND闪存的写入数据量,与现有技术相比,提高了闪存坏块的利用率,改善了坏块重
复利用的适应性差的问题,从而减少了NAND闪存擦除的次数,进而延长了NAND闪存的使用
寿命。
附图说明
图1为本发明基于扩序列的NAND闪存坏块重复利用方法的实现流程框图;
图2为本发明基于扩序列的NAND闪存坏块重复利用装置的结构示意图;
图3为图2实施例中n=2时的扩序列模块及数据写入模块的工作示意图;
图4为图2实施例中n=2时的解扩模块和数据恢复模块工作示意图;
图5为图2实施例中数据检测模块工作原理示意图。
具体实施方式
以下结合附图和实施例,对本发明作进一步详细说明;
参照图1,一种基于扩序列的NAND闪存坏块重复利用方法,包括以下步骤:
步骤S10,获得原始测试数据;
本实施例中NAND闪存芯片采用镁光公司的MT29F512G08,该芯片每页为16K+1216
字节,每个块由512页组成,大小为8192K+608K字节,芯片总容量为512Gb。
本实施例中,获得原始测试数据是指,获取外部存储设备中将要写入坏块的数据,
截取一段,作为原始测试数据;由于本实施例中用的闪存每页大小为16K,所以选择截取
(16/L)K字节的数据作为原始测试数据,这样当扩序列码长度为L时,经过扩序列处理后,要
写入数据变成16K,正好一页,方便数据写入。
本实施例中,外部存储设备为具有存储空间的电子设备如台式机。具体地,可通过
PCI-e接口通过直接内存访问的方式将台式机中存储的数据传输至FPGA的缓存中;直接内
存访问是指外部设备不通过CPU而直接与系统内存交换数据,数据读取速度快,效率高;
步骤S11,设置初始扩序列码长度L和判决门限P;
本实施例中,将初始扩序列码长度L设置为3,判决门限P设置为2,其中扩序列码长
度L=2n-1,判决门限P=L-n+1,n≥2;长度为3的扩序列码采用110序列,此扩序列码为2阶
伪随机码,长度为5的扩序列码采用10011序列,此码为3阶伪随机码的截短码;将初始扩序
列码长度L设置为3判决门限P设置为2,是因为这样既可以解决坏块中离散单比特错误也可
以最大效率的增加写入数据量;当扩序列码长度为3时,坏块的有效写入数据量变为原始坏
块大小的三分之一,同理当扩序列码长度为L时,坏块的有效写入数据量变为原始坏块大小
的L分之一;扩序列码采用伪随机序列是因为伪随机序列有良好的随机性和平衡性;
步骤S12,对原始测试数据用长度为L的扩序列码进行扩序列处理;
本实施例中,扩序列处理为原始测试数据与扩序列码进行按位异或运算;
本实施例中,扩序列处理的具体工作模式参考图3上半部分;
步骤S13,将扩序列后的数据写入NAND闪存的坏块中;
本实施例中所述坏块是指超出ECC校验能力的NAND闪存坏块,至于坏块是不是对
哪些数据敏感本发明没有限制;ECC(Error Correcting Code)是一种数据检错纠错算法,
通过增加冗余数据的方式对存储数据进行编译码,用来解决NAND闪存中存在少量比特翻转
的问题;超过ECC校验能力是指,每个闪存控制器的ECC校验都有最大纠错能力,如本实施例
中的ECC纠错能力就是每1100字节纠错40比特,即当1100字节中的错误比特数超过40时,这
个块就被认定为坏块;
本实施例中数据写入是通过FPGA实现NAND闪存接口写入时序,将扩序列后的数据
写入NAND闪存的坏块中。需要注意的是,在数据写入之前应当对该坏块进行擦除,保持坏块
中的正常比特为全1状态,如图3第四行所示;本实施例中块擦除操作需要3个地址周期,首
先由FPGA发送块擦除第一个命令字60H,然后发送3个周期的需要擦除的块地址,最后发送
块擦除的第二个命令字D0H;数据写入操作需要5个地址周期,首先由FPGA发送数据写入第
一个命令字80H,然后发送5个周期的块内地址,接着发送16K待写入数据,最后发送数据写
入的第二个命令字10H;
本实施例中,数据写入的具体工作模式参考图3下半部分;
步骤S14,将数据从该坏块读出,得到待解扩数据;
本实施例中数据读出是通过FPGA实现NAND闪存接口读出时序,将数据从NAND闪存
的坏块中读出;本实施例中数据读出操作需要5个地址周期,首先由FPGA发送数据读出的第
一个命令字00H,然后发送5个地址周期的块内地址,最后发送数据读出的第二个命令字
30H;
步骤S15,将待解扩数据用扩序列码进行解扩处理;
本实施例中,解扩处理是将待解扩的数据与原扩序列码进行按位异或处理;
本实施例中,解扩处理的具体工作模式参考图4上半部分;
步骤S16,将解扩后的数据进行数据恢复;
本实施例中,扩序列码长度L为3,判决门限P为2,数据恢复的具体工作模式参考图
4下半部分;
步骤S17,检测恢复数据和原始测试数据是否一致;
本实施例中,数据检测是通过将原数据和恢复数据进行按位异或运算,结果中若
有1出现则说明恢复数据和原始测试数据不完全相同,说明此扩序列方法的容错能力还不
能用来对坏块重复利用,需要换一个容错能力更大的扩序列方法;若没有1出现,则说明数
据读写正确,此扩序列方案的容错能力可以对坏块进行重复利用;
本实施例中,数据检测的具体工作模式参考图5;
本实施例中,数据检测采用的是将原始测试数据与恢复数据进行按位异或处理,
通过分析处理结果得到检测结果;应当知道通过原始测试数据与恢复数据相减也可以达到
同样功能,为了达到数据检测采用其他类似操作也在本发明的保护范围内;
步骤S18,将与扩序列码长度L和判决门限P对应的n改为n+1;
本实施例中,当步骤S17存在问题时,说明NAND闪存坏块中有连续2比特错误,初始
情况下的扩序列方法不能规避连续2比特错误,应将扩序列长度增大,并更改相应的判决门
限值,使其容错能力更强。当n为2时,此NAND闪存坏块重复利用方法的容错能力为1比特,容
错能力具体表现为L-P,随着n的增加,容错能力也在增加;
参照图2,一种基于扩序列的NAND闪存坏块重复利用装置,包括数据获取模块
B100、扩序列模块B101、数据写入模块B102、数据读出模块B103、解扩模块B104、数据恢复模
块B105和数据检测模块B106;其中各个模块是有序连接在一起,相互连接顺序不能颠倒和
替换;
数据获取模块B100,用于获取外部存储设备中将要写入坏块的数据;
本实施例中,FPGA通过PCI-e接口用直接内存访问的方式将台式机中存储的数据
传输至FPGA的数据寄存器中;
扩序列模块B101,对从外部存储设备中获取的数据用长度为L的扩序列码进行扩
序列处理;
扩序列是指通过利用序列通过相应运算将原始数据扩长的操作,本实施例中,扩
序列处理为源数据与扩序列码进行按位异或运算;
数据写入模块B102,用于将扩序列后的数据写入NAND闪存的坏块中;
数据写入模块是指通过某种工具按照芯片的相应时序要求,将数据写入到存储单
元中;本实施例中数据写入是通过FPGA实现NAND闪存接口写入时序,将扩序列后的数据写
入NAND闪存的坏块中。需要注意的是,在数据写入之前应当对该坏块进行擦除,保持坏块中
的正常存储单元为全1状态;
数据读出模块B103,将写入的数据从该坏块中读出;
数据读出模块是指通过某种工具按照芯片的相应时序要求,将数据从存储单元中
读出;本实施例中数据读出是通过FPGA实现NAND闪存接口读出时序,将数据从NAND闪存的
坏块中读出。
解扩模块B104,用于将待解扩数据用同样长度为L的扩序列码进行解扩处理;
数据解扩操作和数据扩序列操作用的算法相同,用的扩序列也相同;本实施例中,
解扩处理是将待解扩的数据与原扩序列码进行按位异或处理;
数据恢复模块B105,用于将解扩后的数据进行数据恢复;
数据恢复是指通过某种恢复标准对原数据进行判决,得到恢复数据;本实施例中,
当扩序列码长度L为3,判决门限P为2时,数据恢复即依次对每3比特数据进行判决,若有2个
或2个以上1出现,则恢复原始数据为1;若有2个或2个以上0出现,则恢复原始数据为0;
数据检测模块B106,检测恢复数据和原始测试数据是否一致;
数据检测是指通过相关运算,分析运算结果得出判断结果;本实施例中,数据比对
是通过将原数据和恢复出来的数据进行按位异或处理,结果中若有1出现则说明恢复数据
和原始数据不完全相同,说明此扩序列方案的容错能力还不能用来处理这个坏块,需要换
一个容错能力更大的扩序列方案;若没有1出现,则说明数据读写正确;
本实施例中,当B106检测出问题时,说明NAND闪存中有连续2比特错误,初始情况
下的扩序列模式不能规避连续2比特错误,应将扩序列码长度增大,并更改相应的判决门限
值,使其容错能力增强;
参照图3,为图2实施例中n=2时的扩序列模块及数据写入模块的工作示意图,其
中;
第一行代表原始测试数据,本实施例中,将外部存储设备中获得的数据截取16/3K
大小的一段作为原始测试数据;
第二行代表扩序列码长度L为3的扩序列码,本实施例中选用110序列作为初始扩
序列码;
第三行为原始测试数据与扩序列码进行按位异或处理后得到的扩序列后的数据,
其中原始测试数据为16/3K大小,扩序列码长度L为3,所以得到的扩序列后数据大小为16K,
正好是本实施例中闪存一页的大小;
第四行模拟了NAND闪存中的存储单元,其中每个方框代表一个存储单元,粗体方
框表示不能被编程的错误比特;
第五行是扩序列后数据写入坏块中的状态,可见除了错误比特其他正常存储单元
的数据因为数据写入而改变;
参照图4,为图2实施例中n=2时的解扩模块和数据恢复模块工作示意图,其中;
第一行表示从坏块中读出的待解扩数据;
第二行表示数据扩序列操作时用的初始扩序列码;
第三行表示待解扩数据与扩序列码进行按位异或操作后得到的解扩后数据;
第四行表示数据恢复后的恢复数据,对第三行中的解扩后数据,每3比特数据进行
判决,如果有2个或2个以上为1,则恢复数据为1。如果有2个或2个以上数据为0,则恢复数据
为0,得到的恢复数据的大小为解扩后数据的三分之一;
参照图5,为图2实施例中数据检测模块工作原理示意图,其中;
第一行表示原始测试数据;
第二行表示经过数据恢复得到的恢复数据;
第三行表示原始测试数据和恢复数据进行按位异或后得到的检测结果,显示全0
则表示原始测试数据与恢复数据完全相同,证明对坏块的读写完全正确,若检测结果中有1
出现,则表示数据读写出现问题;
以上仅为本发明的优选实施例,并非因此限制本发明的保护范围,凡是利用本发
明说明书及附图内容所做的等效结构和等效流程变换,或直接或间接运用在其他相关的技
术领域,均同理包括在本发明的保护范围内。