发明内容
本发明的主要目的在于提供一种闪存纠错方法以及纠错装置,在平均错误率较低的闪存前期启用BCH进行纠错,在平均错误率达到预设阈值的闪存中后期启用LDPC进行纠错,旨在实现闪存在生命周期的不同时间段均有优越的纠错性能。
为实现上述目的,本发明提供一种闪存纠错方法,所述闪存纠错方法包括以下步骤:
在采用BCH循环纠错编解码进行纠错时,判断闪存的错误比特数是否大于或者等于预设阈值;
若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码。
优选地,所述将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码的步骤包括:
依次将所述闪存的各个存储区域的纠错方式由所述BCH切换为所述LDPC。
优选地,所述闪存纠错方法还包括:
在所述BCH切换为所述LDPC的过程中,若检测到读操作,则停止进行所述BCH至所述LDPC的切换。
优选地,所述闪存纠错方法还包括:
在所述BCH切换为所述LDPC的过程中,若检测到写操作,将所述闪存的写操作切换为所述LDPC进行编码。
优选地,所述若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码的步骤之后还包括:
若所述闪存所在的闪存通道中切换为所述LDPC的闪存数量等于或者大于预设数值,则将所述闪存通道中的所有闪存的纠错方式由所述BCH切换为所述LDPC。
优选地,所述闪存纠错方法还包括:
在采用所述BCH进行纠错时,关闭所述LDPC模块的供电;
在所述BCH切换为所述LDPC时,恢复所述LDPC模块的供电。
为实现上述目的,本发明还提供一种闪存纠错装置,所述闪存纠错装置包括:
闪存纠错模块、处理器及运行在所述处理器上用来控制闪存纠错模块的程序,所述闪存纠错模块及被所述处理器执行的程序实现如上述闪存纠错方法的步骤。
本发明提供的闪存纠错方法以及纠错装置,在采用BCH循环纠错编解码进行纠错时,判断闪存的错误比特数是否大于或者等于预设阈值,若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码。在平均错误率较低的闪存前期启用BCH进行纠错,在平均错误率达到预设阈值的闪存中后期启用LDPC进行纠错,这样,实现了闪存在生命周期的不同时间段均有优越的纠错性能。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种闪存纠错方法,在平均错误率较低的闪存前期启用BCH进行纠错,在平均错误率达到预设阈值的闪存中后期启用LDPC进行纠错,实现闪存在生命周期的不同时间段均有优越的纠错性能。
如图1所示,图1是本发明实施例方案涉及闪存的硬件运行环境的装置结构示意图。
本发明实施例装置是闪存模组。
如图1所示,该闪存模组可以包括:处理器1001,用户接口1003,控制芯片1004。其中,用户接口1003可以包括有线接口、无线接口。控制芯片1004可选的还可以是独立于前述处理器1001的存储装置,负责处理某种存储接口协议到闪存接口的转化,其中,存储接口协议可以是eMMC、USB、UFS、SATA、PCIE等。
本领域技术人员可以理解,图1中示出的装置结构并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,控制芯片1004中可以包括用户接口程序以及控制闪存纠错模块的程序。
在图1所示的装置中,用户接口1003主要用于连接终端,与终端进行数据通信,其可以是USB接口;而处理器1001可以用于操作运行控制芯片1004中存储的控制闪存纠错模块的程序,并执行以下操作:
在采用BCH循环纠错编解码进行纠错时,判断闪存的错误比特数是否大于或者等于预设阈值;
若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码。
进一步地,处理器1001可以操作运行控制芯片1004中存储的控制闪存纠错模块的程序,还执行以下操作:
依次将所述闪存的各个存储区域的纠错方式由所述BCH切换为所述LDPC。
进一步地,处理器1001可以操作运行控制芯片1004中存储的控制闪存纠错模块的程序,还执行以下操作:
在所述BCH切换为所述LDPC的过程中,若检测到读操作,则停止进行所述BCH至所述LDPC的切换。
进一步地,处理器1001可以操作运行控制芯片1004中存储的控制闪存纠错模块的程序,还执行以下操作:
在所述BCH切换为所述LDPC的过程中,若检测到写操作,将所述闪存的写操作切换为所述LDPC进行编码。
进一步地,处理器1001可以操作运行控制芯片1004中存储的控制闪存纠错模块的程序,还执行以下操作:
若所述闪存所在的闪存通道中切换为所述LDPC的闪存数量等于或者大于预设数值,则将所述闪存通道中的所有闪存的纠错方式由所述BCH切换为所述LDPC。
进一步地,处理器1001可以操作运行控制芯片1004中存储的控制闪存纠错模块的程序,还执行以下操作:
在采用所述BCH进行纠错时,关闭所述LDPC模块的供电;
在所述BCH切换为所述LDPC时,恢复所述LDPC模块的供电。
基于图1所示的硬件架构提出本发明闪存纠错方法的各个实施例。
参照图2,在一实施例中,所述闪存纠错方法包括:
步骤S10、在采用BCH循环纠错编解码进行纠错时,判断闪存的错误比特数是否大于或者等于预设阈值;
在本实施例中,闪存是一种长寿命的非易失性的存储器,其在断电情况下仍能保持所存储的数据信息,并且闪存数据的删除不是以单个的字节为单位而是以固定的区块为单位,区块大小一般为256KB到20MB(或者更大)。闪存是电子可擦除只读存储器的变种,不同的是,电子可擦除只读存储器能在字节水平上进行删除和重写而不是整个芯片擦写,而闪存的大部分芯片需要块擦除。由于其断电时仍能保存数据,闪存通常被用来保存设置信息,如在电脑的基本程序、个人数字助理、数码相机中保存资料等。在闪存使用初期,由于闪存介质寿命良好,出现错误的概率较小;而当闪存使用一段时间后,闪存介质由于编程-删除次数的增加,出现错误的概率逐渐增加。
需要说明的是,比特是信息量单位,在二进制数***中,每个0或1就是一个位,位是数据存储的最小单位。二进制数的一位所包含的信息就是一比特,比如二进制数0100就是4比特。
需要说明的是,纠错码是在接收端能自动地纠正数据传输中所发生差错的码。纠错码的基本思路是在所有的由发送符号组成的序列中,仅挑出其中一部分做为信息的代表向信道发送,并使得所挑出的这些序列之间有尽可能多的差异。每个被挑出的允许发送的序列被称为一个码字,而码字的总和称为码。在发送端把信息变换成码字的过程称为编码;在接收端从接收到的信号判定所发码字、从而恢复信息的过程称为解码。在解码时,若收到的信号不是码中的一个码字,则可以肯定在传输中出现了差错,从而着手对差错进行纠正。纠错的方法是找到与接收到的信号最接近的码字,并将其判定为发送信号。一般采用“距离”来度量信号间的接近程度,一种常用的“距离”称为汉明距离,它被定义为两码字间对应位不同的个数总和。一个给定码,其全部码字两两之间距离的最小值被称为这个码的码距。码距是一个码纠错能力的重要参数,例如在汉明距离下,若接收到的信号出错的位数不多于码距的一半,则接收端总能正确地恢复所发送的码字,从而正确地恢复所发送的信息。
具体地,BCH循环纠错编解码是用于校正多个随机错误模式的多级、循环、错误校正、变长数字编码。BCH码具有纠错速度快的优点,但是当其纠错能力提高的时候会导致更多的信息冗余位和更高的BCH译码器复杂度。因此,在错误比特数较低的闪存前期,利用BCH码进行纠错,可以达到纠错速度快、数据可靠性较高的效果。需要说明的是,在采用BCH解码后,判断闪存的错误比特数是否大于或者等于预设阈值。预设阈值是提前设置的数值,具体数值不做限定。当闪存的错误比特数小于所述预设阈值时,认为闪存处于生命周期的前期,当闪存的错误比特数等于或者大于所述预设阈值时,认为闪存进入生命周期的中后期。
步骤S20、若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码。
具体地,LDPC低密度奇偶校验码是通过校验矩阵定义的一类线性码,为使译码可行,在码长较长时需要校验矩阵满足“稀疏性”,即校验矩阵中1的密度比较低,并且码长越长,密度就要越低。
需要说明的是,相对于BCH码,LDPC码在相同的用户数据与纠错校验码之比下可以纠正更多的错误,并且LDPC码可以还具有耐久度、容量改善、延迟改善等优点。比如,闪存随着编程-删除周期而逐渐损耗,利用BCH码的闪存周期是1000个编程-删除周期,利用LDPC码的闪存周期是1500个编程-删除周期,这样,就可以实现闪存在耐久性上50%的提升。目前LDPC码相比于BCH码耐久性提升的技术极限可达200%。虽然LDPC码具有较强的纠错能力,但是其纠错速度慢,且目前闪存当中生成软信息的难度大且代价高。因此,在错误比特数较高的闪存中后期,利用LDPC码进行纠错,可以达到数据可靠性高的效果。
本发明提供的闪存纠错方法,在采用BCH循环纠错编解码进行纠错时,判断闪存的错误比特数是否大于或者等于预设阈值,若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码。在平均错误率较低的闪存前期启用BCH进行纠错,在平均错误率达到预设阈值的闪存中后期启用LDPC进行纠错,这样,实现了闪存在生命周期的不同时间段均有优越的纠错性能。
在一实施例中,如图3所示,在上述图2所示的实施例基础上,所述将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码的步骤包括:
步骤S21、依次将所述闪存的各个存储区域的纠错方式由所述BCH切换为所述LDPC。
具体地,在所述闪存的错误比特数大于或者等于所述预设阈值时,说明闪存进入了平均错误率较高的中后期,这时启用编解码切换模式,启用LDPC码进行纠错。具体的步骤是由主控在后台依次将各个存储区域的纠错方式由所述BCH切换为所述LDPC。
本实施例中,在所述闪存的错误比特数大于或者等于所述预设阈值时,依次将所述闪存的各个存储区域的纠错方式由所述BCH切换为所述LDPC。在平均错误率达到预设阈值的闪存中后期启用LDPC进行纠错,这样,实现了闪存在平均错误率较高的中后期具有优越的纠错性能。
在一实施例中,如图4所示,在上述图2所示的实施例基础上,所述闪存纠错方法还包括:
步骤S30、在所述BCH切换为所述LDPC的过程中,若检测到读操作,则停止进行所述BCH至所述LDPC的切换。
具体地,BCH码和LDPC码的编码模式是在原始信息后面加上一部分校验比特,因此利用BCH码编码的数据只能利用BCH码解码,利用LDPC码编码的数据只能利用LDPC码解码。如图5所示,在BCH码切换为LDPC码的过程中,如果检测到闪存的读操作,针对还没有切换完成的区域,则利用BCH码进行解码,然后重新利用LDPC进行编码;针对已经切换完成的区域,则利用LDPC码进行解码。
在本实施例中,在所述BCH切换为所述LDPC的过程中,若检测到读操作,则停止进行所述BCH至所述LDPC的切换。这样,避免了在BCH至LDPC的切换过程中出现乱码现象。
在一实施例中,如图6所示,在上述图2所示的实施例基础上,所述闪存纠错方法还包括:
步骤S40、在所述BCH切换为所述LDPC的过程中,若检测到写操作,将所述闪存的写操作切换为所述LDPC进行编码。
具体地,BCH码和LDPC码的编码模式是在原始信息后面加上一部分校验比特,因此利用BCH码编码的数据只能利用BCH码解码,利用LDPC码编码的数据只能利用LDPC码解码。在将闪存的纠错方式由BCH码切换为LDPC码时,若检测到写操作,则将写操作切换为LDPC码进行编码。
在本实施例中,在BCH切换为LDPC的过程中,若检测到写操作,将闪存的写操作全部切换为LDPC进行编码。这样,避免了在由BCH切换至LDPC的过程中出现乱码现象。
在一实施例中,如图7所示,在上述图2所示的实施例基础上,所述闪存纠错方法还包括:
步骤S50、若所述闪存所在的闪存通道中切换为所述LDPC的闪存数量等于或者大于预设数值,则将所述闪存通道中的所有闪存的纠错方式由所述BCH切换为所述LDPC。
需要说明的是,本发明主要由几个部分组成:控制单元、BCH编解码模块、LDPC编解码模块以及各个闪存通道。其中,每个模块含有多个闪存通道,每个闪存通道可以支持多片闪存。不同通道支持的闪存数量可以不相同。在所述闪存的错误比特数大于或者等于所述预设阈值时,控制单元可以单独将该片闪存的纠错方式由BCH切换为LDPC,也可以利用一定的算法将闪存通道中的所有闪存的纠错方式由BCH切换为LDPC,比如,当有一定数量的闪存已经进入编码切换模式后,可以将所有闪存的纠错方式由BCH切换为LDPC。
需要说明的是,预设数值是提前设置的数值,具体数值不做限定。
在本实施例中,若所述闪存所在的闪存通道中切换为所述LDPC的闪存数量等于或者大于预设数值,则将所述闪存通道中的所有闪存的纠错方式由所述BCH切换为所述LDPC。这样,实现了闪存在生命周期的不同时间段均有优越的纠错性能。
在一实施例中,如图8所示,在上述图2所示的实施例基础上,所述闪存纠错方法还包括:
步骤S60、在采用所述BCH进行纠错时,关闭所述LDPC模块的供电;
步骤S70、在所述BCH切换为所述LDPC时,恢复所述LDPC模块的供电。
具体地,在闪存模组的生命前期采用BCH编解码模块,为了功耗考虑,可以将LDPC编解码模块的供电关闭掉。在工作过程中,当控制单元检测到某片闪存的错误比特数达到预设数值,这时恢复LDPC码模块的供电,启动LDPC编解码引擎。
本实施例中,首先,在采用所述BCH进行纠错时,关闭所述LDPC模块的供电,然后,在所述BCH切换为所述LDPC时,恢复所述LDPC模块的供电。这样,不仅使得闪存在生命周期的不同时间段均有优越的纠错性能,并且节省了功耗。
本发明实施例还提供一种闪存纠错装置,所述闪存纠错装置包括闪存纠错模块、处理器及运行在所述处理器上用来控制闪存纠错模块的程序,所述控制闪存纠错模块的程序被处理器执行实现如下操作:
在采用BCH循环纠错编解码进行纠错时,判断闪存的错误比特数是否大于或者等于预设阈值;
若所述闪存的错误比特数大于或者等于所述预设阈值,则将所述闪存的纠错方式由所述BCH切换为LDPC低密度奇偶校验码。
进一步地,所述控制闪存纠错模块的程序被处理器执行时还实现如下操作:
依次将所述闪存的各个存储区域的纠错方式由所述BCH切换为所述LDPC。
进一步地,所述控制闪存纠错模块的程序被处理器执行时还实现如下操作:
在所述BCH切换为所述LDPC的过程中,若检测到读操作,则停止进行所述BCH至所述LDPC的切换。
进一步地,所述控制闪存纠错模块的程序被处理器执行时还实现如下操作:
在所述BCH切换为所述LDPC的过程中,若检测到写操作,将所述闪存的写操作切换为所述LDPC进行编码。
进一步地,所述控制闪存纠错模块的程序被处理器执行时还实现如下操作:
若所述闪存所在的闪存通道中切换为所述LDPC的闪存数量等于或者大于预设数值,则将所述闪存通道中的所有闪存的纠错方式由所述BCH切换为所述LDPC。
进一步地,所述控制闪存纠错模块的程序被处理器执行时还实现如下操作:
在采用所述BCH进行纠错时,关闭所述LDPC模块的供电;
在所述BCH切换为所述LDPC时,恢复所述LDPC模块的供电。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。