快速确定闪存错误分布的方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种快速确定闪存错误分布的方法及装置。
背景技术
目前,随着Flash存储产品的广泛应用以及Flash存储技术的快速发展,Flash制造工艺节点逐步演进,其已迅速从70nm、52nm缩小到42nm甚至3xnm、2xnm;单die容量也成倍增长为1G、2G、4G、8G以及16G等,其类型相应的有SLC、MLC以及TLC等。但是,在获得高容量的同时,由于生产工艺的缺陷,不能保证Flash的Memory Array在其生命周期中保持性能的可靠,而在生产和使用过程中同样不可避免的在Flash中产生不能使用的坏区域,使得Flash产品实际使用中数据出错的几率越来越大。如果在U盘或存储卡等Flash产品中要使用这种存在坏区域的Flash,就必须要确定Flash的错误分布,把超出纠错能力的区域标记成不能使用的区域。
传统的纠错方法是使用ECC(Error Correcting Code,错误检查和纠正)对Flash进行读写,即以ECC能编解码的最大长度为单位,开启ECC编码,把数据和ECC的Parity一同写入Flash,然后读取Flash的数据和Parity给ECC进行解码,使用ECC来确定其错误的个数和错误的位置。目前业内通常采用基于BCH算法的ECC,其存在以下缺点:
1.解码确定错误个数花费时间长;
2确定错误最大个数有限;
3.如果要确定错误的具体位置,则花费的时间更长;
4.基于硬件成本和技术的限制,目前ECC能编解码的最大长度一般在1.5K bytes以下,确定错误个数取决于ECC的纠错能力;
5.硬件逻辑复杂,且成本高,能耗大。
发明内容
本发明的主要目的在于提供一种快速确定闪存错误分布的方法及装置,旨在缩短确定Flash错误分布的时间。
为了达到上述目的,本发明提出一种快速确定闪存错误分布的方法,包括:
启动随机数发生器进行扫描,按照预先设定的随机数种子,输出预定长度的随机数据,并通过DMA控制器写入Flash Page;
按照所述随机数种子,从所述Flash Page读出所述预定长度的Flash数据至所述DMA控制器;
将读出的所述预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据进行比较,确定闪存错误分布。
优选地,所述将读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据进行比较,确定闪存错误分布的步骤包括:
当读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据不一致时,将所述Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器;
统计所述缓存器中的错误地址和/或错误个数;
判断所述Flash中所有Flash数据是否处理完毕或者所述错误个数是否达到预定阀值,若否,则返回当读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据不一致时,将所述Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器步骤;若是,则
终止DMA控制器进程。
优选地,所述预定长度为64比特;从随机数发生器输出64比特的数据,分8次每次写入Flash Page8比特的数据。
优选地,所述随机数发生器一次扫描的数据长度小于或等于Flash Page的长度。
优选地,所述缓存器为RAM或寄存器。
本发明还提出一种快速确定闪存错误分布的装置,包括:
数据写入模块,用于启动随机数发生器进行扫描,按照预先设定的随机数种子,输出预定长度的随机数据,并通过DMA控制器写入Flash Page;
数据读出模块,用于按照所述随机数种子,从所述Flash Page读出所述预定长度的Flash数据至所述DMA控制器;
错误分布确定模块,用于将读出的所述预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据进行比较,确定闪存错误分布。
优选地,所述错误分布确定模块包括:
错误地址缓存单元,用于当读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据不一致时,将所述Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器;
统计单元,用于统计所述缓存器中的错误地址和/或错误个数;
判断操作单元,用于判断所述Flash中所有Flash数据是否处理完毕或者所述错误个数是否达到预定阀值,若否,则当读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据不一致时,由错误地址缓存单元将所述Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器;若是,则终止DMA控制器进程。
优选地,所述预定长度为64比特;从随机数发生器输出64比特的数据,分8次每次写入Flash Page8比特的数据。
优选地,所述随机数发生器一次扫描的数据长度小于或等于Flash Page的长度。
优选地,所述缓存器为RAM或寄存器。
本发明提出一种快速确定闪存错误分布的方法及装置,通过随机数发生器对Flash Page进行数据读写扫描,代替传统的ECC扫描,使用随机数发生器来确定Flash错误的个数和错误的位置,一次可以确定Flash一个Page中数据的错误分布,大大缩短确定Flash错误分布的时间,而且硬件成本低,能耗低。
附图说明
图1是本发明快速确定闪存错误分布的方法一实施例流程示意图;
图2是本发明快速确定闪存错误分布的方法一实施例中将读出的预定长度的Flash数据与随机数发生器输出的预定长度的随机数据进行比较,确定闪存错误分布的流程示意图;
图3是本发明快速确定闪存错误分布的装置一实施例结构示意图;
图4是本发明快速确定闪存错误分布的装置一实施例中错误分布确定模块的结构示意图。
为了使本发明的技术方案更加清楚、明了,下面将结合附图作进一步详述。
具体实施方式
本发明实施例解决方案主要是:通过随机数发生器对Flash Page进行数据读写扫描,确定Flash错误的个数和错误的位置,一次可以确定Flash一个Page中数据的错误分布,以缩短确定Flash错误分布的时间。
如图1所示,本发明一实施例提出一种快速确定闪存错误分布的方法,包括:
步骤S101,启动随机数发生器进行扫描,按照预先设定的随机数种子,输出预定长度的随机数据,并通过DMA控制器写入Flash Page;
为避免传统使用ECC对Flash进行读写确定Flash数据错误的个数以及错误的位置而产生的花费时间长的缺陷,本实施例通过PRNG(Pseudo-RandomNumber Generator,伪随机数发生器)即本实施例中所称随机数发生器对FlashPage进行数据读写扫描,达到确定纠错分布的目的。
首先,设定随机数发生器写入Flash数据的随机数种子即随机数发生器输出数据的序列规则,然后启动随机数发生器,输出预定长度的随机数据,本实施例中预定长度为64比特;通过DMA(Direct Memory Access,直接存储器访问)控制器将随机数发生器一次输出的64比特数据写入Flash的一个Page,从随机数发生器输出的64比特的数据,分8次每次写入Flash Page 8比特的数据。
步骤S102,按照随机数种子,从Flash Page读出预定长度的Flash数据至DMA控制器;
在读出Flash中的数据到DMA控制器的过程中,同时启动随机数发生器,并按照与写入Flash数据的随机数种子一致的读出Flash数据的随机数种子,从Flash中读出64比特的数据到DMA控制器,即读出Flash数据与写入Flash数据的序列一致。
步骤S103,将读出的预定长度的Flash数据与随机数发生器输出的预定长度的随机数据进行比较,确定闪存错误分布。
当设定好随机数发生器写入和读出Flash数据的随机数种子后,随机数发生器以一次64比特的数据的频率循环输出64比特的随机数据,并通过DMA控制器对输出数据进行读写,为了确定闪存错误分布,本实施例将读出的数据和随机数发生器对应输出的数据进行比较,即随机数发生器当前输出64比特的随机数据,通过DMA控制器写入Flash的一个Page中,紧接着,按照随机数发生器写入Flash数据的随机数种子,DMA控制器从Flash Page中读出DMA控制器当前写入的随机数据,并将读出的数据与随机数发生器当前输出的64比特的随机数据进行比较,如果准确无误,则表明读出数据所在的Flash Page中对应的地址可用,若不一致,则确定错误数据的位置即错误地址,同时统计错误数据的个数即错误个数,重复以上过程,当Flash的一个Page中所有写入的数据均通过随机数发生器进行扫描纠错之后,则可停止DMA控制器进程。或者,可以设置Flash的一个Page中错误个数的阀值,当错误个数达到预定阀值即终止DMA控制器进程。
如图2所示,步骤S103包括:
步骤S1031,当读出的预定长度的Flash数据与随机数发生器输出的预定长度的随机数据不一致时,将Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器;
步骤S1032,统计缓存器中的错误地址和/或错误个数;
步骤S1033,判断Flash中所有Flash数据是否处理完毕或者错误个数是否达到预定阀值,若是,则进入步骤S1034;否则,返回步骤S1031;
步骤S1034,终止DMA控制器进程。
在本实施例中,错误地址或错误个数等错误信息的存储进程与DMA控制器读写过程同步,DMA控制器进程结束即完成错误信息的统计,错误个数和错误地址可以分别独立统计,也可以只统计错误个数或错误位置,也可以同时统计。PRNG一次扫描的数据长度可以为小于或等于Flash Page的长度任意长度。本实施例中缓存器可以为RAM(RandomAccess Memory,随机存取存储器)或寄存器或者其他存储器。
本实施例使用PRNG扫描代替传统的ECC扫描,一次可以确定Flash一个Page中数据的错误分布,大大缩短确定Flash错误分布的时间,而且硬件成本低,能耗低。
如图3所示,本发明一实施例提出一种快速确定闪存错误分布的装置,包括:数据写入模块301、数据读出模块302以及错误分布确定模块303,其中:
数据写入模块301,用于启动随机数发生器进行扫描,按照预先设定的随机数种子,输出预定长度的随机数据,并通过DMA控制器写入Flash Page;
本实施例通过PRNG即本实施例中所称随机数发生器对Flash Page进行数据读写扫描,达到确定纠错分布的目的。首先,设定随机数发生器写入Flash数据的随机数种子即随机数发生器输出数据的序列规则,然后启动随机数发生器,输出预定长度的随机数据,本实施例中预定长度为64比特;数据写入模块301通过DMA控制器将随机数发生器一次输出的64比特数据写入Flash的一个Page,从随机数发生器输出的64比特的数据,分8次每次写入FlashPage 8比特的数据。
数据读出模块302,用于按照所述随机数种子,从Flash Page读出预定长度的Flash数据至DMA控制器;
数据读出模块302在读出Flash中的数据到DMA控制器的过程中,同时启动随机数发生器,并按照与写入Flash数据的随机数种子一致的读出Flash数据的随机数种子,从Flash中读出64比特的数据到DMA控制器,即读出Flash数据与写入Flash数据的序列一致。
错误分布确定模块303,用于将读出的预定长度的Flash数据与随机数发生器输出的预定长度的随机数据进行比较,确定闪存错误分布。
当设定好随机数发生器写入和读出Flash数据的随机数种子后,随机数发生器以一次64比特的数据的频率循环输出64比特的随机数据,并通过DMA控制器对输出数据进行读写,为了确定闪存错误分布,本实施例通过错误分布确定模块303将读出的数据和随机数发生器对应输出的数据进行比较,即随机数发生器当前输出64比特的随机数据,通过DMA控制器写入Flash的一个Page中,紧接着,按照随机数发生器写入Flash数据的随机数种子,DMA控制器从Flash Page中读出DMA控制器当前写入的随机数据,并将读出的数据与随机数发生器当前输出的64比特的随机数据进行比较,如果准确无误,则表明读出数据所在的Flash Page中对应的地址可用,若不一致,则确定错误数据的位置即错误地址,同时统计错误数据的个数即错误个数。,重复以上过程,当Flash的一个Page中所有写入的数据均通过随机数发生器进行扫描纠错之后,则可停止DMA控制器进程。或者,可以设置Flash的一个Page中错误个数的阀值,当错误个数达到预定阀值即终止DMA控制器进程。
如图4所示,错误分布确定模块303包括:错误地址缓存单元3031、统计单元3032、判断操作单元3033,其中:
错误地址缓存单元3031,用于当读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据不一致时,将所述Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器;
统计单元3032,用于统计所述缓存器中的错误地址和/或错误个数;
判断操作单元3033,用于判断所述Flash中所有Flash数据是否处理完毕或者所述错误个数是否达到预定阀值,若否,则当读出的预定长度的Flash数据与所述随机数发生器输出的预定长度的随机数据不一致时,由错误地址缓存单元3031将Flash Page中对应不同的Flash数据比特地址作为错误地址存入缓存器;若是,则终止DMA控制器进程。
在本实施例中,错误地址或错误个数等错误信息的存储进程与DMA控制器读写过程同步,DMA控制器进程结束即完成错误信息的统计,错误个数和错误地址可以分别独立统计,也可以只统计错误个数或错误位置,也可以同时统计。PRNG一次扫描的数据长度可以为小于或等于Flash Page的长度任意长度。本实施例中缓存器可以为RAM或寄存器或者其他存储器。
本发明实施例快速确定闪存错误分布的方法及装置,通过随机数发生器对Flash Page进行数据读写扫描,代替传统的ECC扫描,使用随机数发生器来确定Flash错误的个数和错误的位置,一次可以确定Flash一个Page中数据的错误分布,大大缩短确定Flash错误分布的时间,而且硬件成本低,能耗低。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。