CN111863107B - 闪存纠错方法及装置 - Google Patents
闪存纠错方法及装置 Download PDFInfo
- Publication number
- CN111863107B CN111863107B CN201910351232.4A CN201910351232A CN111863107B CN 111863107 B CN111863107 B CN 111863107B CN 201910351232 A CN201910351232 A CN 201910351232A CN 111863107 B CN111863107 B CN 111863107B
- Authority
- CN
- China
- Prior art keywords
- error
- error correction
- correction method
- voltage value
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请公开了一种闪存纠错方法及装置,属于固态存储技术领域。本申请实施例提供的一种闪存纠错方法,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型,根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法,通过纠错方法序列,对当前出错信息进行纠错。该方法根据错误类型确定与该错误类型对应的纠错方法序列,不同错误类型的出错信息通过不同的纠错方法序列进行纠错,从而对出错信息进行有针对性的纠错,缩短了纠错的时间,提高了纠错效率。
Description
技术领域
本申请涉及固态存储技术领域。特别涉及一种闪存纠错方法及装置。
背景技术
NAND Flash(与非门型闪存)存储器是Flash(闪存)存储器的一种,适用于大量数据的存储,在固态存储技术领域得到了越来越广泛的应用。NAND Flash存储器主要以Die(裸片)、Block(块)、Page(页)这三种形式存储数据。其中,一个Die中包括多个Block,一个Block中包括多个Page,一个Page中包括多个Bit(比特)。而当一个Page中错误的Bit数超过闪存存储器的硬件纠错能力时,就需要进行纠错。
常见的纠错方法主要有Calibration(校准)纠错方法,Read Retry(读重试)纠错方法,SLDPC(Soft Low Density Parity Check,软件低密度校验码)纠错方法以及RAID(Redundant Arrays of Inexpensive Disks,独立冗余磁盘阵列)纠错方法。相关技术中主要根据预先设置的纠错顺序,使用以上纠错方法依次进行纠错,在每次纠错时,都是按照预先设置的纠错顺序,使用以上纠错方法依次进行纠错。例如预先设置的纠错顺序为Calibration纠错方法-Read Retry纠错方法-SLDPC纠错方法-RAID纠错方法。
但相关技术中每次进行纠错时,都是按照预先设置的纠错顺序,使用以上纠错方法依次进行纠错,导致纠错的时间较长,纠错效率低。
发明内容
本申请实施例提供了一种闪存纠错方法及装置,能够解决纠错的时间长,纠错效率低的问题。所述技术方案如下:
一方面,提供了一种闪存纠错方法,所述方法包括:
接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
当接收到所述闪存存储器返回的错误指示时,确定当前出错信息的错误类型;
根据所述错误类型和多个纠错方法,确定纠错方法序列,所述纠错方法序列包括至少一个纠错方法;
通过所述纠错方法序列,对所述当前出错信息进行纠错。
在一种可能的实现方式中,所述根据所述错误类型和多个纠错方法,确定纠错方法序列之前,所述方法还包括:
获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;
获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;
相应的,所述根据所述错误类型和多个纠错方法,确定纠错方法序列,包括:
根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述纠错方法序列。
在另一种可能的实现方式中,所述根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述纠错方法序列,包括:
当所述第二出错个数大于所述第一出错个数,且错误类型为读到不可更正的错误Read UNECC Error错误类型时,从所述多个纠错方法中选择软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法,将所述SLDPC纠错方法和所述RAID纠错方法组成所述纠错方法序列。
在另一种可能的实现方式中,所述根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述纠错方法序列,包括:
当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的纠错方法序列。
在另一种可能的实现方式中,所述纠错方法序列包括读重试Read Retry纠错方法;
所述通过所述纠错方法序列,对所述当前出错信息进行纠错,包括:
根据所述Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对所述当前出错信息进行纠错;
当根据所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述当前出错信息纠错成功时,则根据所述参考电压值和第二重试表中的第二偏移电压值,对所述当前出错信息进行纠错,所述第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。
在另一种可能的实现方式中,所述纠错方法序列还包括校准Calibration纠错方法;
所述通过所述纠错方法序列,对所述当前出错信息进行纠错,包括:
根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述所述当前出错信息的电压调节范围;
从所述电压调节范围中确定第三电压值;
根据所述第三电压值,对所述当前出错信息进行纠错。
在另一种可能的实现方式中,所述纠错模块序列还包括所述SLDPC纠错方法和所述RAID纠错方法;
所述通过所述纠错方法序列,对所述当前出错信息进行纠错,包括:
在当前第一时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述SLDPC纠错方法对所述当前出错信息进行纠错;
当通过所述SLDPC纠错方法纠错失败,且在当前第二时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述RAID纠错方法对所述当前出错信息进行纠错。
在另一种可能的实现方式中,当所述错误类型为读到不可更正的错误Read UNECCError错误类型时,所述纠错方法序列包括所述Read Retry纠错方法-所述Calibration纠错方法-所述SLDPC纠错方法-所述RAID纠错方法;
当所述错误类型为介质循环冗余校验错误Media CRC Error错误类型或读到空白页Read Empty Page错误类型时,所述纠错方法序列包括所述RAID纠错方法。
另一方面,提供了一种闪存纠错装置,所述装置包括:
接收模块,用于接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
第一确定模块,用于当接收到所述闪存存储器返回的错误指示时,确定当前出错信息的错误类型;
第二确定模块,用于根据所述错误类型和多个纠错方法,确定纠错方法序列,所述纠错方法序列包括至少一个纠错方法;
纠错模块,用于通过所述纠错方法序列,对所述当前出错信息进行纠错。
在一种可能的实现方式中,所述第二确定模块,用于获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述纠错方法序列。
在另一种可能的实现方式中,所述第二确定模块,还用于当所述第二出错个数大于所述第一出错个数,且错误类型为读到不可更正的错误Read UNECC Error错误类型时,从所述多个纠错方法中选择软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法,将所述SLDPC纠错方法和所述RAID纠错方法组成所述纠错方法序列。
在另一种可能的实现方式中,所述第二确定模块,还用于当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的纠错方法序列。
在另一种可能的实现方式中,所述纠错方法序列包括读重试Read Retry纠错方法;
所述纠错模块,还用于根据所述Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对所述当前出错信息进行纠错;当根据所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述当前出错信息纠错成功时,则根据所述参考电压值和第二重试表中的第二偏移电压值,对所述当前出错信息进行纠错,所述第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。
在另一种可能的实现方式中,所述纠错方法序列还包括校准Calibration纠错方法;
所述纠错模块,还用于根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述所述当前出错信息的电压调节范围;从所述电压调节范围中确定第三电压值;根据所述第三电压值,对所述当前出错信息进行纠错。
在另一种可能的实现方式中,所述纠错方法序列还包括所述SLDPC纠错方法和所述RAID纠错方法;
所述纠错模块,还用于在当前第一时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述SLDPC纠错方法对所述当前出错信息进行纠错;当通过所述SLDPC纠错方法纠错失败,且在当前第二时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述RAID纠错方法对所述当前出错信息进行纠错。
在另一种可能的实现方式中,当所述错误类型为读到不可更正的错误Read UNECCError错误类型时,所述纠错方法序列包括所述Read Retry纠错方法-所述Calibration纠错方法-所述SLDPC纠错方法-所述RAID纠错方法;
当所述错误类型为介质循环冗余校验错误Media CRC Error错误类型或读到空白页Read Empty Page错误类型时,所述纠错方法序列包括所述RAID纠错方法。
另一方面,提供了一种计算设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序,实现上述闪存纠错方法中任一项所述的方法步骤。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述闪存纠错方法中任一项所述的方法步骤。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例提供了一种闪存纠错方法,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型,根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法,通过纠错方法序列,对当前出错信息进行纠错。该方法根据错误类型确定与该错误类型对应的纠错方法序列,不同错误类型的出错信息通过不同的纠错方法序列进行纠错,从而对出错信息进行有针对性的纠错,缩短了纠错的时间,提高了纠错效率。
附图说明
图1是本申请实施例提供的一种闪存纠错的应用场景的示意图;
图2是本申请实施例提供的一种闪存纠错方法的流程图;
图3是本申请实施例提供的一种闪存纠错方法的流程图;
图4是本申请实施例提供的一种Read Retry纠错方法状态切换的示意图;
图5是本申请实施例提供的一种Calibration纠错方法状态切换的示意图;
图6是本申请实施例提供的一种SLDPC纠错方法状态切换的示意图;
图7是本申请实施例提供的一种RAID纠错方法状态切换的示意图;
图8是本申请实施例提供的一种通过RAID纠错方法纠错过程的示意图;
图9是本申请实施例提供的一种通过Read Retry纠错方法、Calibration纠错方法、SLDPC纠错方法和RAID纠错方法纠错过程的示意图;
图10是本申请实施例提供的一种通过SLDPC纠错方法和RAID纠错方法纠错过程的示意图;
图11是本申请实施例提供的一种闪存纠错装置的结构示意图;
图12是本申请实施例提供的一种计算设备的结构框图。
具体实施方式
为使本申请的技术方案和优点更加清楚,下面对本申请实施方式作进一步地详细描述。
本申请实施例提供了一种闪存纠错的应用场景,参见图1,该应用场景包括:终端101、计算设备102。终端101和计算设备102之间可以通过无线连接或者有线连接。计算设备102中包括闪存存储器,闪存存储器用于存储数据。其中,计算设备102可以为终端或服务器。为了便于区分,计算设备102为终端时,可以称为第一终端;终端101可以称为第二终端。当计算设备102为第一终端时,该应用场景为第二终端从第一终端的闪存存储器中获取数据。当计算设备102为服务器时,该应用场景为终端101从服务器的闪存存储器中获取数据。在本申请实施例中,以计算设备102为服务器进行说明。
当终端101从计算设备102中的闪存存储器中读取数据时,会向计算设备102发送读请求,该读请求中携带闪存存储器的第一位置的位置标识,用于请求读取第一位置上存储的数据。计算设备102接收该读请求,读取第一位置上存储的数据。但由于闪存存储器中出现坏Block或者,由于存储的时间和读取的时间之间的时间间隔较长,闪存存储器中存储单元的电子流失,电子的实际电压值偏离参考电压值,导致计算设备102在读取第一位置的数据时出错。当该第一位置的数据的错误的Bit数不大于第一阈值时,可以直接通过闪存存储器的硬件进行纠错,从而得到第一位置上存储的数据。但当该第一位置的数据的错误的Bit数大于第一阈值时,超过了闪存存储器中的硬件纠错能力时,就会发生数据出错。当发生数据出错时,闪存存储器会向计算设备102返回读取错误的错误指示,计算设备102接收到闪存存储器返回的错误指示后,需要通过纠错方法对读请求的出错信息进行纠错。
在本申请实施例中,计算设备在通过纠错方法对读请求的多个出错信息进行纠错时,对于读请求的多个出错信息中的每个出错信息,先确定当前出错信息的错误类型,根据当前出错信息的错误类型,确定与该错误类型对应的纠错方法序列,不同错误类型的出错信息通过不同的纠错方法序列进行纠错,从而对出错信息进行有针对性的纠错,缩短了纠错时间,提高了纠错效率。
当计算设备102通过纠错方法对读请求的出错信息纠错成功,得到第一位置的数据后,可以直接向终端101输出该第一位置的数据,从而终端101成功获取该第一位置的数据;计算设备102也可以在得到该第一位置的数据后,不直接输出该第一位置的数据,在终端101下次获取该第一位置的数据时,向终端101输出该第一位置的数据。
需要说明的一点是,一个Die包括多个Block,一个Block包括多个Page,一个Page中包括多个Bit数,数据以Bit数的形式被写入Page中。当读取第一位置上的数据出错时,可能有多个Bit数出错,一般出错的Bit数以mKB为单位。则计算设备102以mKB为单位确定mKB的Bit数所在的Page,根据该Page确定该Page所在的Block,根据该Block确定该Block所在的Die,也即确定mKB的Bit数所对应的存储地址,将该mKB的Bit数对应的存储地址进行封装得到一个出错信息。而第一位置的数据包括至少一个Die上的数据,当基于读请求读取第一位置的数据出错时,该读请求对应的出错信息为多个。对于每个出错信息,计算设备102可以采用本申请实施例提供的闪存纠错方法进行纠错。并且,本申请实施例中对出错信息纠错的实质是根据出错信息中mKB的Bit数对应的存储地址,从闪存存储器重新读取该存储地址对应的数据。
本申请实施例提供了一种闪存纠错方法,参见图2,该方法包括:
步骤201:接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于请求读取第一位置上存储的数据。
步骤202:当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型。
步骤203:根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法。
步骤204:通过纠错方法序列,对当前出错信息进行纠错。
在一种可能的实现方式中,根据错误类型和多个纠错方法,确定纠错方法序列之前,方法还包括:
获取闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;
获取当前发生数据出错时出错Block中出错信息的第二出错个数;
相应的,根据错误类型和多个纠错方法,确定纠错方法序列,包括:
根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定纠错方法序列。
在另一种可能的实现方式中,根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定纠错方法序列,包括:
当第二出错个数大于第一出错个数,且错误类型为读到不可更正的错误ReadUNECC Error错误类型时,从多个纠错方法中选择软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法,将SLDPC纠错方法和RAID纠错方法组成纠错方法序列。
在另一种可能的实现方式中,根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定纠错方法序列,包括:
当第二出错个数不大于第一出错个数时,根据错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与错误类型对应的纠错方法序列。
在另一种可能的实现方式中,纠错方法序列包括读重试Read Retry纠错方法;
通过纠错方法序列,对当前出错信息进行纠错,包括:
根据Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对当前出错信息进行纠错;
当根据参考电压值和第一重试表中的每个第一偏移电压值均不能对当前出错信息纠错成功时,则根据参考电压值和第二重试表中的第二偏移电压值,对当前出错信息进行纠错,第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。
在另一种可能的实现方式中,纠错方法序列还包括校准Calibration纠错方法;
通过纠错方法序列,对当前出错信息进行纠错,包括:
根据Calibration纠错方法的参考电压值和第一偏移间隔确定当前出错信息的电压调节范围;
从电压调节范围中确定第三电压值;
根据第三电压值,对当前出错信息进行纠错。
在另一种可能的实现方式中,纠错方法序列还包括SLDPC纠错方法和RAID纠错方法;
通过纠错方法序列,对当前出错信息进行纠错,包括:
在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过SLDPC纠错方法对当前出错信息进行纠错;
当通过SLDPC纠错方法纠错失败,且在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过RAID纠错方法对当前出错信息进行纠错。
在另一种可能的实现方式中,当错误类型为读到不可更正的错误Read UNECCError错误类型时,纠错方法序列包括Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法;
当错误类型为介质循环冗余校验错误Media CRC Error错误类型或读到空白页Read Empty Page错误类型时,纠错方法序列包括RAID纠错方法。
本申请实施例提供了一种闪存纠错方法,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型,根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法,通过纠错方法序列,对当前出错信息进行纠错。该方法根据错误类型确定与该错误类型对应的纠错方法序列,不同错误类型的出错信息通过不同的纠错方法序列进行纠错,从而对出错信息进行有针对性的纠错,缩短了纠错的时间,提高了纠错效率。
本申请实施例提供了一种闪存纠错方法,应用于计算设备,参见图3,该方法包括:
步骤301:计算设备接收读请求,该读请求携带闪存存储器的第一位置的位置标识,用于请求读取第一位置上存储的数据。
计算设备中可以包括闪存存储器,闪存存储器中存储了多个数据,多个数据在闪存存储中的存储位置不同。当终端从计算设备上读取数据时,终端向计算设备发送读请求,该读请求携带闪存存储器的第一位置的位置标识,用于请求读取第一位置上存储的数据。计算设备接收终端发送的读请求,根据读请求中携带的第一位置的位置标识,读取闪存存储器中该第一位置的位置标识对应的第一位置上存储的数据。
计算设备根据读请求中携带的第一位置的位置标识,读取第一位置上存储的数据。当该第一位置的数据的错误Bit数不大于第一阈值时,可以直接通过闪存存储器的硬件进行纠错,从而得到第一位置上存储的数据。但当该第一位置的数据的错误的Bit数大于第一阈值时,超过了闪存存储器中的硬件纠错能力时,就发生了数据出错,此时闪存存储器向计算设备发送读取错误的错误指示。
需要说明的一点是,一个Die包括多个Block,一个Block包括多个Page,一个Page中包括多个Bit数,数据以Bit数的形式被写入Page中。当读取第一位置上的数据出错时,可能有多个Bit数出错,一般出错的Bit数以mKB为单位。则计算设备以mKB单位确定mKB的Bit数所在的Page,根据该Page确定该Page所在的Block,根据该Block确定该Block所在的Die,也即确定mKB的Bit数所对应的存储地址,将该mKB的Bit数对应的存储地址进行封装得到一个出错信息。而第一位置的数据包括至少一个Die上的数据,当第一位置的数据读取出错时,对应的出错信息为多个。对于每个出错信息,计算设备可以采用本申请实施例提供的闪存纠错方法进行纠错。并且,本申请实施例中对出错信息纠错的实质是根据出错信息中mKB的Bit数对应的存储地址,从闪存存储器重新读取该存储地址对应的数据。
m为正整数,可以根据需要进行设置并更改,在本申请实施例中,对此不作具体限定。例如,m为4。
步骤302:当接收到闪存存储器返回的错误指示时,计算设备确定当前出错信息的错误类型。
对于多个出错信息中的每个出错信息,计算设备确定当前出错信息的错误类型。
在一种可能的实现方式中,计算设备确定当前出错信息的错误类型的步骤可以为:计算设备根据错误指示中携带当前出错信息的错误类型标识,确定当前出错信息的错误类型。在另一种可能的实现方式中,计算设备确定当前出错信息的错误类型的步骤可以为:闪存存储器向计算设备直接反馈错误类型,计算设备接收闪存存储器发送的当前出错信息的错误类型。
在本申请实施例中,错误类型主要包括以下几类:Media CRC Error(MediaCyclic Redundancy Check Error,介质循环冗余校验错误)错误类型、Read UNECC Error(Read Uncorrectable Error,读到不可更正的错误)错误类型、Read Empty Page(读到空页)错误类型和Read ECC Over(Read Error Checking and Correction Over,读到错误检查和更正,结束)错误类型。
步骤303:计算设备获取闪存存储器上一次发生数据出错时出错Block中出错信息的第一出错个数。
计算设备在每次发生数据出错时,存储发生数据出错时出错Block中出错信息的出错个数。本步骤中,在当前发生数据出错时,计算设备从存储的出错Block中出错信息的出错个数中获取上一次发生数据出错时出错Block中出错信息的第一出错个数。
步骤304:计算设备获取当前发生数据出错时该出错Block中出错信息的第二出错个数。
本步骤中计算设备在当前发生数据出错时,获取当前数据出错的出错Block中出错信息的第二出错个数。
需要说明的一点是,计算设备执行完步骤302后,可以执行步骤303,再执行步骤304;也可以执行完步骤302后,执行步骤304,再执行步骤303。步骤303和步骤304无先后顺序。在本申请实施例中,对此不作具体限定。
步骤305:计算设备根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定纠错方法序列。
计算设备执行本步骤时可能存在不同情况,不同情况下采用不同的实现方式。计算设备确定第一出错个数和第二出错个数的大小关系,当第二出错个数大于第一出错个数,且错误类型为Read UNECC Error错误类型时,计算设备执行第一种实现方式;当第二出错个数不大于第一出错个数时,计算设备执行第二种实现方式。
第一种实现方式,当第二出错个数大于第一出错个数,且错误类型为Read UNECCError错误类型时,计算设备从多个纠错方法中选择SLDPC(软件低密度校验码)纠错方法和RAID(独立冗余磁盘阵列)纠错方法,将SLDPC纠错方法和RAID纠错方法组成纠错方法序列。
在该实现方式中,当闪存存储器掉电后上电,第二出错个数大于第一出错个数时,计算设备确定当前出错信息的错误类型。当第二出错个数大于第一出错个数,且错误类型为Read UNECC Error错误类型时,计算设备从多个纠错方法中选择至少一个纠错方法,将该至少一个纠错方法组成纠错方法序列。其中,当选择的纠错方法包括SLDPC纠错方法和RAID纠错方法时,纠错方法序列可以为SLDPC纠错方法-RAID纠错方法。如果SLDPC纠错方法纠错成功,则不需要再通过RAID纠错方法进行纠错;如果SLDPC纠错方法纠错失败,则通过RAID纠错方法进行纠错。如果在通过RAID纠错方法进行纠错过程中再次出现Read UNECCError错误类型,则计算设备启动Read Retry(读重试)纠错方法和Calibration(校准)纠错方法。其中,在通过RAID纠错方法进行纠错过程中,启动Read Retry纠错方法和Calibration纠错方法属于RAID纠错方法。当Read Retry纠错方法纠错成功,则不需要Calibration纠错方法进行纠错。
需要说明的一点是,当Data Retention(数据保存)出现问题时,可能导致第二出错个数大于第一出错个数。
第二种实现方式,当第二出错个数不大于第一出错个数时,计算设备基于错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与该错误类型对应的纠错方法序列,该纠错方法序列中包括至少一个纠错方法。
在该实现方式中,计算设备中可以预先存储多个纠错方法序列。
本申请实施例中,纠错方法可以根据需要进行设置并更改,例如,纠错方法可以为Read Retry纠错方法、Calibration纠错方法、SLDPC纠错方法和RAID纠错方法。在本申请实施例中,对纠错方法不作具体限定。当错误类型为Read UNECC Error错误类型时,得到的纠错方法序列可以为Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法。当错误类型为Media CRC Error错误类型或Read Empty Page错误类型,得到的纠错方法序列可以为RAID纠错方法。
本步骤中,计算设备根据第一出错个数、第二出错个数、错误类型和多个纠错方法,动态调度纠错方法,降低了纠错延迟,提高了纠错效率。
在一种可能的实现方式中,计算设备基于错误类型以及错误类型和纠错方法的对应关系,从多个纠错方法中选择至少一个纠错方法,将选择的至少一个纠错方法组成纠错方法序列。
在该实现方式中,计算设备可以预先存储多个纠错方法以及错误类型和纠错方法的对应关系。该对应关系中,一个错误类型可能和多个纠错方法对应,当一个错误类型和多个纠错方法对应时,计算设备可以从该多个纠错方法中选择至少一个纠错方法。当错误类型为Read UNECC Error错误类型时,对应的纠错方法可以包括Read Retry纠错方法、Calibration纠错方法、SLDPC纠错方法和RAID纠错方法。当错误类型为Media CRC Error错误类型或Read Empty Page错误类型时,对应的纠错方法可以包括RAID纠错方法。
计算设备将选择的至少一个纠错方法按照顺序组成纠错方法序列。例如,当错误类型为Read UNECC Error错误类型,选择的纠错方法为Read Retry纠错方法、Calibration纠错方法、SLDPC纠错方法和RAID纠错方法时,纠错方法序列可以为Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法。当错误类型为Media CRC Error错误类型或Read Empty Page错误类型,选择的纠错方法为RAID纠错方法,纠错方法序列可以为RAID纠错方法。不同错误类型的出错信息确定的纠错方法序列不同,从而可以对出错信息进行有针对性的纠错,缩短了纠错的时间,提高了纠错效率。
需要说明的一点是,计算设备可以根据错误类型和多个纠错方法,确定纠错方法序列;或者计算设备也可以根据出错个数、错误类型和多个纠错方法,确定纠错方法序列。在本申请实施例中,对此不作具体限定。当计算设备根据出错个数、错误类型和多个纠错方法,确定纠错方法序列时,在第二出错个数和第一出错个数的大小关系不同时,即使同一错误类型,确定的纠错方法序列也不同,该方法可以避免确定的纠错方法序列中包括无用的纠错方法,浪费纠错资源。例如,本步骤中,当错误类型为Read UNECC Error错误类型时,在第二出错个数不大于第一出错个数时,确定的纠错方法序列为Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法。而在第二出错个数大于第一出错个数时,确定的纠错方法序列为SLDPC纠错方法-RAID纠错方法。这是由于在第二出错个数大于第一出错个数时,可能是Data Retention出现问题,这种情况下,采用Read Retry纠错方法和Calibration纠错方法纠错成功的概率较低,因此,直接采用SLDPC纠错方法和RAID纠错方法,在很大程度上可以降低纠错的延迟,缩短纠错时间,提高纠错效率。
步骤306:计算设备通过纠错方法序列,对当前出错信息进行纠错。
在一种可能的实现方式中,纠错方法序列中包括Read Retry纠错方法。计算设备通过Read Retry纠错方法,对当前出错信息进行纠错的步骤可以通过以下步骤(1-1)至(1-2)实现,包括:
(1-1)计算设备根据Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对当前出错信息进行纠错。
第一重试表为Read Retry纠错方法中的快速重试表,第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。第一重试表中可以存储多个第一偏移电压值,计算设备可以实时地更新或周期性更新第一重试表。计算设备中还存储了每个第一偏移电压值成功纠错的时间和当前出错信息出错时的时间之间的时间间隔。
计算设备从第一重试表中选择第一偏移电压值的过程可以为:计算设备根据该时间间隔,从多个第一偏移电压值中,选择时间间隔最短时对应的第一偏移电压值。在一种可能的实现方式中,计算设备根据该时间间隔,对多个第一偏移电压值进行排序,时间间隔最短对应的第一偏移电压值为第一重试表中的第一个偏移电压值,时间间隔次短对应的第一偏移电压值为第一重试表中的第二个偏移电压值,依次排列,时间间隔最长对应的第一偏移电压值为第一重试表中的最后一个偏移电压值。计算设备按照顺序,依次选择第一重试表中的第一偏移电压值。在另一种可能的实现方式中,计算设备也可以从第一重试表中随机选择一个偏移第一电压值。
第一重试表中第一偏移电压值的数量可以根据需要进行设置并更改,例如,第一偏移电压值的数量可以为3、4或者5等。在本申请实施例中,对此不作具体限定。当第一偏移电压值的数量为3时,3个第一偏移电压值可以分别为时间间隔最短的第一偏移电压值、时间间隔次短的第一偏移电压值和时间间隔最长的第一偏移电压值,参见表1。计算设备可以从3个第一偏移电压值中选择时间间隔最短的第一偏移电压值,基于该时间间隔最短的第一偏移电压值对当前出错信息进行纠错。参考电压值可以根据需要进行设置并更改,在本申请实施例中,对此不作具体限定。例如,参考电压值可以为0。
计算设备从第一重试表中选择一第一偏移电压值,根据选择的第一偏移电压值对当前出错信息进行纠错。其中,计算设备在Executing状态下确定纠错采用的第一偏移电压值,通过第一偏移电压值读取当前出错信息对应的数据,读取数据后,将状态从Executing状态切换到Single State Done(单一状态完成)状态,在Single State Done状态下确定读取数据是否成功。如果读取成功,则保存该第一偏移电压值,将状态从Single State Done状态经Executing状态切换到Done状态;如果读取失败,在Executing状态下从第一重试表中重新选择第一偏移电压值,根据重新选择的第一偏移电压值进行纠错。计算设备通过Read Retry纠错方法纠错时,状态之间的切换可以参见图4。
在一种可能的实现方式中,在步骤(1-1)之前,计算设备可以先确定在当前是否通过Read Retry纠错方法进行纠错,在当前没有通过Read Retry纠错方法进行纠错时,计算设备将当前出错信息添加到Read Retry纠错方法的链表中,将状态从空闲状态切换为Executing(执行)状态,再执行步骤(1-1)。
表1
(1-2)当计算设备根据参考电压值和第一重试表中的每个第一偏移电压值均不能对当前出错信息纠错成功时,则计算设备根据参考电压值和第二重试表中的第二偏移电压值,对当前出错信息进行纠错。
当计算设备根据参考电压值和第一重试表中的每个第一偏移电压值均不能对当前出错信息纠错成功时,则计算设备从第二重试表中选择第二偏移电压值进行纠错。
第二重试表为计算设备统计之前的出错信息,将之前成功读取数据时的偏移电压值进行存储生成的表。计算设备从第二重试表中选择第二偏移电压值的步骤和上述步骤(1-1)中选择第一偏移电压值的步骤可以相同或者不同。在本申请实施例中,对此不作具体限定。计算设备基于选择的第二偏移电压值对当前出错信息进行纠错。
本步骤中,计算设备根据第二偏移电压值读取数据时,状态之间的切换和上述采用第一偏移电压值读取数据时,状态之间的切换过程相似,可以继续参见图4,在此不再赘述。当计算设备根据选择的第二偏移电压值纠错失败时,从第二重试表重新选择一个第二偏移电压值,通过重新选择的第二偏移电压值读取数据。如果读取成功,则计算设备将该第二偏移电压值更新到第一重试表中,将该第二偏移电压值作为第一重试表中的第一个偏移电压值;如果读取失败,则计算设备重新选择第二偏移电压值读取数据。
当计算设备基于每个第二偏移电压值均不能纠错成功或读取次数达到第二阈值时,计算设备确定纠错失败。
第二阈值可以根据需要进行设置并更改,在本申请实施例中,对第二阈值不作具体限定。例如,第二阈值可以为127次、128次或者130次。并且,第二阈值可以等于或者小于第二重试表中第二偏移电压值的数量。在本申请实施例中,对此不作具体限定。例如,第二阈值可以与第二重试表中第二偏移电压值的数量相等,均为128次。另外,计算设备从第二重试表中选择第二偏移电压值时,可以依次选择第二偏移电压值,也可以随机选择第二偏移电压值,在本申请实施例中,对此不作具体限定。
在本申请实施例中,在通过Read Retry纠错方法进行纠错时,优先采用第一重试表中的偏移电压值,第一重试表中存储了多个离当前时间最近的历史时间段内成功纠错时对应的偏移电压值,因此,采用第一重试表中的偏移电压值纠错成功的概率较高,可以在更短时间内实现对当前出错信息的成功纠错,提高了纠错效率。
在另一种可能的实现方式中,当计算设备通过Read Retry纠错方法纠错失败时,可以直接结束操作;或者通过其他纠错方法进行纠错。当计算设备通过其他纠错方法进行纠错时,纠错方法序列中还包括Calibration纠错方法。相应的,计算设备通过Read Retry纠错方法纠错失败时,将当前出错信息添加到Calibration纠错方法中的链表中,计算设备通过Calibration纠错方法,对当前出错信息进行纠错的步骤可以通过以下步骤(2-1)至(2-3)实现,包括:
(2-1)计算设备基于Calibration纠错方法的参考电压值和第一偏移间隔确定当前出错信息的电压调节范围。
第一偏移间隔为在参考电压值的基础上,对参考电压值左偏调节或右偏调节的幅度。例如,在参考电压值的基础上,左偏第一偏移间隔;或者在参考电压值的基础上,右偏第一偏移间隔。
本步骤可以通过以下步骤(2-1-1)至(2-1-4)实现,包括:
(2-1-1)计算设备基于Calibration纠错方法的参考电压值,从闪存存储器中读取数据,根据读取的数据中1的个数或0的个数与第三阈值的差值,将参考电压值左偏调节第一偏移间隔或者右偏调节第一偏移间隔,得到第四电压值。
本步骤中,计算设备在Executing状态下采用参考电压值读取数据,读取数据后,计算设备将状态从Executing状态切换到Single State Done状态,在Single State Done状态下确定读取的数据中1的个数或0的个数与第三阈值的差值,根据该差值,将参考电压值左偏调节第一偏移间隔或右偏调节第一偏移间隔,得到第四电压值。例如,在本申请实施例中,计算设备根据1的个数与第三阈值的差值,确定将参考电压值左偏调节还是右偏调节。
当1的个数大于第三阈值时,计算设备将参考电压值左偏调节第一偏移间隔,得到第四电压值;当1的个数小于第三阈值时,计算设备将参考电压值右偏调节第一偏移间隔,得到第四电压值。
第一偏移间隔可以根据需要进行设置并更改,在本申请实施例中,对第一偏移间隔不作具体限定。例如,第一偏移间隔可以为10mV、16mV、20mV。
需要说明的一点是,闪存存储器未发生数据出错时,数据中1的个数和0的个数是相等时,该第三阈值即为1的个数和0的个数相等时对应的数量。例如,未发生数据出错时,数据中1的个数和0的个数相等,均为5000个,即第三阈值为5000。发生数据出错后,读取的数据中1的个数为5200个,大于第三阈值,此时,就需要通过对参考电压值进行左偏调节,从而使1的个数尽可能地接近第三阈值;当读取的数据中1的个数为4800个,小于第三阈值,此时,就需要对参考电压值进行右偏调节,从而使1的个数尽可能地接近第三阈值。
(2-1-2)计算设备基于第四电压值读取数据,根据读取的数据中1的个数或0的个数与第三阈值的差值,将第四电压值左偏调节第一偏移间隔或者右偏调节第一偏移间隔,得到第五电压值。
在步骤(2-1-1)中,计算设备在Single State Done状态确定第四电压值,然后将状态从Single State Done状态切换到Executing状态,在Executing状态下采用第四电压值读取数据。读取数据后,计算设备将状态从Executing状态切换到Single State Done状态,在Single State Done状态下确定读取的数据中1的个数或0的个数与第三阈值的差值,将第四电压值左偏调节第一偏移间隔或右偏调节第一偏移间隔,得到第五电压值。
例如,步骤(2-1-1)中1的个数大于第三阈值,计算设备左偏调节参考电压值,得到第四电压值;当计算设备根据第四电压值,再次读取的数据中1的个数仍大于第三阈值,则计算设备将第四电压值左偏调节第一偏移间隔,得到第五电压值。
(2-1-3)计算设备基于第五电压值读取数据,直至当前读取的数据中1的个数或0的个数与第三阈值的差值大于上一次读取的数据中1的个数或0的个数与第三阈值的差值,确定当前读取数据的电压值和上一次读取数据的电压值。
计算设备在Single State Done状态下确定第五电压值后,将状态从SingleState Done状态切换到Executing状态,在Executing状态下采用第五电压值读取数据后,将状态从Executing状态切换到Single State Done状态,在Single State Done状态下确定读取的数据中1的个数或0的个数与第三阈值的差值,重复上述步骤,直至该差值大于上一次读取的数据中1的个数或0的个数与第三阈值的差值,确定当前读取数据的电压值和上一次读取数据的电压值。计算设备通过Calibration纠错方法纠错时,状态之间的切换可以参见图5。
例如,闪存存储器发生数据出错时,计算设备采用参考电压值读取数据后,数据中1的个数为5200个,第三阈值为5000个,1的个数大于第三阈值,差值为200个。计算设备将参考电压值左偏调节第一偏移间隔16mV,得到第四电压值,通过第四电压值读取数据后,1的个数为5050个,第三阈值为5000个,1的个数仍大于第三阈值,该差值为50个;计算设备将第四电压值左偏调节第一偏移间隔16mV,得到第五电压值,通过第五电压值读取数据后,1的个数为5100个,差值为100个,大于上一次的差值,则计算设备确定当前读取数据的第五电压值和上一次读取数据的第四电压值。
(2-1-4)计算设备根据当前读取数据的电压值和上一次读取数据的电压值,确定电压调节范围。
计算设备将当前读取数据的电压值和上一次读取数据的电压值组成该电压调节范围。
Calibration纠错方法的参考电压值和Read Retry纠错方法的参考电压值可以相同或者不同,在本申请实施例中,对此不作具体限定,例如,Calibration纠错方法的参考电压值和Read Retry纠错方法的参考电压值相同,可以均为0。
在一种可能的实现方式中,计算设备在执行步骤(2-1)之前,可以先确定在当前是否通过Calibration纠错方法进行纠错,在当前没有通过Calibration纠错方法进行纠错时,计算设备将当前出错信息添加到Calibration纠错方法的链表中,将状态从空闲状态切换为Calibration纠错方法中的Executing状态,执行步骤(2-1),计算设备在Executing状态确定第一偏移间隔。
(2-2)计算设备从电压调节范围中确定第三电压值。
其中,计算设备在确定第三电压值时,可以先从电压调节范围中选择一电压值作为基础电压值,对该基础电压值进行进行微调,得到第三电压值。其中,第三电压值的取值在该电压调节范围内。
例如,计算设备可以选择电压调节范围的中间值作为基础电压值,或者将电压调节范围进行三等分,选择靠近当前读取数据电压值的电压值作为基础电压值。在本申请实施例中,对此不作具体限定。
计算设备对该基础电压值进行微调,得到第三电压值的步骤可以为:计算设备可以以基础电压值为中心,左偏调节第二偏移间隔或者右偏调节第二偏移间隔,得到第三电压值。第二偏移间隔小于第一偏移间隔。例如,第一偏移间隔为16mV,第二偏移间隔可以为比16mV小的任一间隔,例如,第二偏移间隔为1mV、2mV、3mV等。在本申请实施例中,对此不作具体限定。
计算设备对基础电压值可以进行多次调节,每调节一次得到一个对应的电压值。计算设备通过该电压值在Executing状态下读取数据,在Single State Done状态下确定读取的数据中1的个数或0的个数与第三阈值的差值,重复调节电压值、读取数据,直至1的个数或0的个数与第三阈值相等,计算设备将此时对应的电压值作为第三电压值。例如,当前读取数据的电压值为第四电压值,上一次读取数据的电压值为第五电压值,则第三电压值的数值在第四电压值和第五电压值之间。如果通过电压调节范围内的每个电压值,均不能使得1的个数或0的个数与第三阈值相等,则确定1的个数或0的个数与第三阈值的差值最小时对应的电压值,将该电压值作为第三电压值。
其中,计算设备对基础电压值左偏调节第二偏移间隔或右偏调节第二偏移间隔,最终得到第三电压值的过程和步骤(2-1)中计算设备基于参考电压值和第一偏移间隔,确定电压调节范围的过程相似,在此不再赘述。
需要说明的一点是,步骤(2-1)中计算设备先粗略对参考电压值进行调节,得到一电压调节范围,在该电压调节范围选择第三电压值,实现了对电压值的有目的性的选择和调节,提高了纠错效率。
(2-3)计算设备根据第三电压值,对当前出错信息进行纠错。
计算设备在Single State Done状态下确定第三电压值后,将状态从SingleState Done状态切换到Executing状态,在Executing状态下采用第三电压值读取数据后,将状态从Executing状态切换到Single State Done状态,在Single State Done状态下确定当前出错信息对应的数据是否全部读出。如果当前出错信息对应的数据全部读出,则将状态从Single State Done状态经Executing状态切换到Current Page Done(当前页完成)状态,再切换到Done状态,在Done状态下确定纠错是否成功。如果成功读出当前出错信息对应的数据,则确定纠错成功,结束操作;如果未成功读出当前出错信息对应的数据,则确定纠错失败,计算设备对Calibration纠错方法进行初始化,将状态从Done状态切换到空闲状态,用于对下一个出错信息进行纠错。计算设备通过Calibration纠错方法纠错时,状态之间的切换可以继续参见图5。
在本申请实施例中,在通过Calibration纠错方法进行纠错时,先确定一个纠错的电压调节范围,在该电压调节范围内进行调节,可以避免盲目调节,实现有效范围内的,有目的性的调节,可以缩短纠错时间,提高纠错效率。
在另一种可能的实现方式中,当计算设备通过Calibration纠错方法纠错失败时,可以直接结束操作;或者通过其他纠错方法进行纠错。当计算设备通过其他纠错方法进行纠错时,纠错方法序列中还包括SLDPC纠错方法和RAID纠错方法。相应的,计算设备通过Calibration纠错方法纠错失败时,在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,将当前出错信息添加到SLDPC纠错方法的链表中,计算设备通过SLDPC纠错方法,对当前出错信息进行纠错的步骤可以通过以下步骤(3-1)至(3-2)实现,包括:
(3-1)计算设备确定在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错的出错信息。
本步骤中,计算设备在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,计算设备执行步骤(3-2);当在当前第一时间通过SLDPC纠错方法或RAID纠错方法进行纠错时,计算设备则等待,直到没有通过SLDPC纠错方法和RAID纠错方法进行纠错的出错信息时,执行步骤(3-2)。
需要说明的一点是,SLDPC纠错方法和RAID纠错方法中在进行纠错时,同一时间只能有一个纠错方法进行纠错。计算设备在通过其中一个纠错方法纠错时,没有通过另一个纠错方法进行纠错,从而可以避免两个纠错方法同时进行纠错时,占用过多资源,提高了纠错效率。
(3-2)当在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,计算设备通过SLDPC纠错方法对当前出错信息进行纠错。
计算设备将当前出错信息添加到SLDPC纠错方法的链表中,将状态从空闲状态切换至第一SLDPC State Manual SD(SLDPC State Manual Soft Decode,软件低密度校验码的手动软解码)状态。在第一SLDPC State Manual SD状态下,计算设备从SLDPC纠错方法的LLR(Log Likelihood Ratio,对数似然比)表中获取第三偏移间隔,然后将状态从第一SLDPC State Manual SD状态切换到第二SLDPC State Manual SD状态,在第二SLDPCState Manual SD状态下,基于参考电压值和第三偏移间隔读取数据。在第二SLDPC StateManual SD状态下,从LLR表中获取第四偏移间隔后,将状态从第二SLDPC State Manual SD状态切换到第三SLDPC State Manual SD状态,在第二SLDPC State Manual SD状态下,基于参考电压值和第四偏移间隔,读取数据。在第三SLDPC State Manual SD状态下,从LLR表中获取下一个偏移间隔后,将状态从第三SLDPC State Manual SD状态切换到下一个SLDPCState Manual SD状态,重复以上步骤,直至将状态切换为第五SLDPC State Manual SD状态。在第五SLDPC State Manual SD状态下,确定读取数据时采用的参考电压值和偏移间隔,将状态从第五SLDPC State Manual SD状态切换到SD State Done(Soft Decode StateDone,软解码完成)状态,在SD State Done状态下读取数据。由于硬件资源的限制,SLDPC纠错方法纠错时,每次只能对一个CW(Codeword,代码字)进行纠错,一个CW一般为2KB,而纠错一般以4KB为单位,因此计算设备在SD State Done状态下确定4KB的数据是否都处理完成,当处理完成时,计算设备将状态从SD State Done状态切换到Done状态。当未处理完成时,计算设备将状态从SD State Done状态切换到第一SLDPC State Manual SD状态,继续进行纠错。计算设备通过SLDPC纠错方法纠错时,状态之间的切换可以参见图6。
其中,当计算设备将状态从SD State Done状态切换到Done状态后,确定是否成功读取数据。当成功读取数据时,确定纠错成功,计算设备结束操作。当未成功读取数据时,确定纠错失败,计算设备对SLDPC纠错方法进行初始化,将状态从Done状态切换到空闲状态,用于对下一个出错信息进行纠错。
需要说明的一点是,在本申请实施例中,计算设备通过SLDPC纠错方法纠错时,是采用串行,单路径的方式进行纠错,即一次只能对一个出错信息进行纠错,且优先处理先添加到链表中的出错信息。
在另一种可能的实现方式中,当计算设备通过SLDPC纠错方法纠错失败时,可以直接结束操作;或者通过RAID纠错方法进行纠错。当计算设备通过RAID纠错方法进行纠错时,在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,将当前出错信息添加到RAID纠错方法的链表中,计算设备通过RAID纠错方法,对当前出错信息进行纠错。相应的,该步骤可以通过以下步骤(4-1)至(4-3)实现,包括:
(4-1)计算设备确定在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错的出错信息。
计算设备确定在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错的出错信息的步骤与步骤(3-1)相似,在此不再赘述。
(4-2)当在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,计算设备通过RAID纠错方法对当前出错信息进行纠错。
计算设备将当前出错信息添加到RAID纠错方法的链表中,将状态从空闲状态切换到Executing状态。进入到Executing状态后,计算设备确定当前出错信息所在的Die,然后读取未出错Die上的数据,当成功读取未出错Die上的数据时,则将状态从Executing状态切换到RAID纠错方法中的Decode State Done(解码完成)状态,再将状态切换到Done状态,并对进行RAID纠错方法进行初始化,将状态切换到空闲状态,用于处理下一个出错信息。计算设备通过RAID纠错方法纠错时,状态之间的切换可以参见图7。
当计算设备读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,则启动Read Retry纠错方法。通过Read Retry纠错方法进行纠错,当Read Retry纠错方法纠错成功,则将状态从Decode State Done状态切换到Executing状态,在Executing状态下读取下一个未出错Die上的数据,当成功读取下一个未出错Die上的数据时,计算设备将状态从Executing状态切换到RAID纠错方法中的Decode State Done状态。该过程中状态之间的切换可以继续参见图7。
如果Read Retry纠错方法失败,则将状态切换到Calibration纠错方法。进入Calibration纠错方法后,无论纠错是否成功,都将状态从Calibration纠错方法切换到Decode State Done状态。
当未出错Die上的数据全部读取完成或无法读取未出错Die上的数据时,计算设备将状态从Decode State Done状态切换到Done状态。进入Done状态后,无论是否成功读取未出错Die上的数据,都结束纠错,对RAID纠错方法进行初始化,将状态从Done状态切换到空闲状态。该过程中状态之间的切换可以继续参见图7。
需要说明的一点是,本步骤中当计算设备读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,计算设备启动Read Retry纠错方法和Calibration纠错方法进行纠错属于RAID纠错方法。计算设备通过RAID纠错方法对当前出错信息进行纠错的过程可以参见图8。图8中的错误类型为Media CRC Error错误类型或Read Empty Page错误类型,图8中的裸片N表示RAID纠错方法读取未出错Die上的数据时失败,但错误类型为Read UNECC Error错误类型,对其进行单独处理的裸片。
另外,未出错Die是指闪存存储器中除当前出错信息所在的Die之外的其余未出错的Die,计算设备可以通过读取未出错Die上的数据,然后通过异或操作,得到出错Die上的数据,进而实现对当前出错信息的纠错。并且,计算设备通过RAID纠错方法纠错时,是采用串行,单路径的方式进行纠错,即一次只能对一个出错信息进行纠错,且优先处理先添加到链表中的数据出错的任务。未出错Die的数量可以为一个或多个,在本申请实施例中,对此不作具体限定。
当计算设备通过RAID纠错方法对当前出错信息纠错成功时,计算设备可以直接结束操作,也可以执行步骤307。
当纠错失败时,计算设备确定无法读取数据,结束操作。
本步骤中,当第二出错个数不大于第一出错个数,错误类型为Read UNECC Error错误类型时,纠错方法序列为Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法。计算设备通过该纠错方法序列对当前出错信息进行纠错的过程可以参见图9。图9中,在RAID纠错方法纠错过程中,RAID纠错方法读取未出错Die上的数据,当RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,计算设备启动Read Retry纠错方法和Calibration纠错方法进行纠错。图9中的裸片N表示RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型,对其进行单独处理的裸片。
当第二出错个数大于第一出错个数,且错误类型为Read UNECC Error错误类型时,纠错方法序列为SLDPC纠错方法-RAID纠错方法。计算设备通过该纠错方法序列对当前出错信息进行纠错的过程可以参见图10。图10中,在RAID纠错方法纠错过程中,RAID纠错方法读取未出错Die上的数据,当RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,计算设备启动Read Retry纠错方法和Calibration纠错方法进行纠错。图10中的裸片N表示RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型,对其进行单独处理的裸片。
需要说明的一点是,上述步骤302-306是对一个出错信息进行纠错的过程,计算设备可以通过上述步骤302-306对多个出错信息中的每个出错信息进行纠错。当计算设备对该读请求的每个出错信息均纠错成功时,得到该第一位置上存储的数据,计算书设备执行步骤307。当计算设备只对多个出错信息中的部分出错信息纠错成功时,计算设备只能得到第一位置上存储的部分数据。
步骤307:当计算设备对读请求的每个出错信息纠错成功时,计算设备输出第一位置上存储的数据。
当计算设备成功读取第一位置上存储的数据后,可以直接输出第一位置上存储的数据,从而实现对第一位置上存储的数据的读取。
本申请实施例提供了一种闪存纠错方法,计算设备接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型,根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法,通过纠错方法序列,对当前出错信息进行纠错。该方法根据错误类型确定与该错误类型对应的纠错方法序列,不同错误类型的出错信息通过不同的纠错方法序列进行纠错,从而对出错信息进行有针对性的纠错,缩短了纠错的时间,提高了纠错效率。
本申请实施例提供了一种闪存纠错装置,应用于计算设备,参见图11,该装置包括:
接收模块1101,用于接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于请求读取第一位置上存储的数据;
第一确定模块1102,用于当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型;
第二确定模块1103,用于根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法;
纠错模块1104,用于通过纠错方法序列,对当前出错信息进行纠错。
在一种可能的实现方式中,第二确定模块1103,用于获取闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;获取当前发生数据出错时出错Block中出错信息的第二出错个数;根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定纠错方法序列。
在另一种可能的实现方式中,第二确定模块1103,还用于当第二出错个数大于第一出错个数,且错误类型为读到不可更正的错误Read UNECC Error错误类型时,从多个纠错方法中选择软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法,将SLDPC纠错方法和RAID纠错方法组成纠错方法序列。
在另一种可能的实现方式中,第二确定模块1103,还用于当第二出错个数不大于第一出错个数时,根据错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与错误类型对应的纠错方法序列。
在另一种可能的实现方式中,纠错方法序列包括读重试Read Retry纠错方法;
纠错模块1104,还用于根据Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对当前出错信息进行纠错;当根据参考电压值和第一重试表中的每个第一偏移电压值均不能对当前出错信息纠错成功时,则根据参考电压值和第二重试表中的第二偏移电压值,对当前出错信息进行纠错,第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。
在另一种可能的实现方式中,纠错方法序列还包括校准Calibration纠错方法;
纠错模块1104,还用于根据Calibration纠错方法的参考电压值和第一偏移间隔确定当前出错信息的电压调节范围;从电压调节范围中确定第三电压值;根据第三电压值,对当前出错信息进行纠错。
在另一种可能的实现方式中,纠错方法序列还包括SLDPC纠错方法和RAID纠错方法;
纠错模块1104,还用于在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过SLDPC纠错方法对当前出错信息进行纠错;当通过SLDPC纠错方法纠错失败,且在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过RAID纠错方法对当前出错信息进行纠错。
在另一种可能的实现方式中,当错误类型为读到不可更正的错误Read UNECCError错误类型时,纠错方法序列包括Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法;
当错误类型为介质循环冗余校验错误Media CRC Error错误类型或读到空白页Read Empty Page错误类型时,纠错方法序列包括RAID纠错方法。
本申请实施例提供了一种闪存纠错装置,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,确定当前出错信息的错误类型,根据错误类型和多个纠错方法,确定纠错方法序列,纠错方法序列包括至少一个纠错方法,通过纠错方法序列,对当前出错信息进行纠错。该方法根据错误类型确定与该错误类型对应的纠错方法序列,不同错误类型的出错信息通过不同的纠错方法序列进行纠错,从而对出错信息进行有针对性的纠错,缩短了纠错的时间,提高了纠错效率。
需要说明的是:上述实施例提供的闪存纠错装置在闪存纠错时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的闪存纠错装置与闪存纠错方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图12是本发明实施例提供的一种计算设备的结构示意图,该计算设备1200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)1201和一个或一个以上的存储器1202,其中,所述存储器1202中存储有至少一条指令,所述至少一条指令由所述处理器1201加载并执行以实现上述各个方法实施例提供的方法。当然,该计算设备还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该计算设备还可以包括其他用于实现设备功能的部件,在此不做赘述。
本申请实施例还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例的闪存纠错方法的步骤。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅是为了便于本领域的技术人员理解本申请的技术方案,并不用以限制本申请。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种闪存纠错方法,其特征在于,所述方法包括:
接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
当接收到所述闪存存储器返回的错误指示时,确定当前出错信息的错误类型;获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;
根据所述第一出错个数、所述第二出错个数、所述错误类型和多个纠错方法,确定纠错方法序列,所述纠错方法序列包括至少一个纠错方法;
通过所述纠错方法序列,对所述当前出错信息进行纠错。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一出错个数、所述第二出错个数、所述错误类型和多个纠错方法,确定所述纠错方法序列,包括:
当所述第二出错个数大于所述第一出错个数,且错误类型为读到不可更正的错误ReadUNECC Error错误类型时,从所述多个纠错方法中选择软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法,将所述SLDPC纠错方法和所述RAID纠错方法组成所述纠错方法序列。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第一出错个数、所述第二出错个数、所述错误类型和多个纠错方法,确定所述纠错方法序列,包括:
当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的纠错方法序列。
4.根据权利要求1所述的方法,其特征在于,所述纠错方法序列包括读重试Read Retry纠错方法;
所述通过所述纠错方法序列,对所述当前出错信息进行纠错,包括:
根据所述Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对所述当前出错信息进行纠错;
当根据所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述当前出错信息纠错成功时,则根据所述参考电压值和第二重试表中的第二偏移电压值,对所述当前出错信息进行纠错,所述第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。
5.根据权利要求1或4所述的方法,其特征在于,所述纠错方法序列还包括校准Calibration纠错方法;
所述通过所述纠错方法序列,对所述当前出错信息进行纠错,包括:
根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述当前出错信息的电压调节范围;
从所述电压调节范围中确定第三电压值;
根据所述第三电压值,对所述当前出错信息进行纠错。
6.根据权利要求1所述的方法,其特征在于,所述纠错方法序列包括SLDPC纠错方法和RAID纠错方法;
所述通过所述纠错方法序列,对所述当前出错信息进行纠错,包括:
在当前第一时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述SLDPC纠错方法对所述当前出错信息进行纠错;
当通过所述SLDPC纠错方法纠错失败,且在当前第二时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述RAID纠错方法对所述当前出错信息进行纠错。
7.根据权利要求1或3所述的方法,其特征在于,当所述错误类型为读到不可更正的错误Read UNECC Error错误类型时,所述纠错方法序列包括Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法;
当所述错误类型为介质循环冗余校验错误Media CRC Error错误类型或读到空白页Read Empty Page错误类型时,所述纠错方法序列包括所述RAID纠错方法。
8.一种闪存纠错装置,其特征在于,所述装置包括:
接收模块,用于接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
第一确定模块,用于当接收到所述闪存存储器返回的错误指示时,确定当前出错信息的错误类型;
第二确定模块,用于获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;根据所述第一出错个数、所述第二出错个数、所述错误类型和多个纠错方法,确定纠错方法序列,所述纠错方法序列包括至少一个纠错方法;
纠错模块,用于通过所述纠错方法序列,对所述当前出错信息进行纠错。
9.根据权利要求8所述的装置,其特征在于,所述第二确定模块,还用于当所述第二出错个数大于所述第一出错个数,且错误类型为读到不可更正的错误Read UNECC Error错误类型时,从所述多个纠错方法中选择软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法,将所述SLDPC纠错方法和所述RAID纠错方法组成所述纠错方法序列;
所述第二确定模块,还用于当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的纠错方法序列。
10.根据权利要求8所述的装置,其特征在于,所述纠错方法序列包括读重试ReadRetry纠错方法;所述纠错模块,还用于根据所述Read Retry纠错方法的参考电压值和第一重试表中的第一偏移电压值,对所述当前出错信息进行纠错;当根据所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述当前出错信息纠错成功时,则根据所述参考电压值和第二重试表中的第二偏移电压值,对所述当前出错信息进行纠错,所述第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值;
所述纠错方法序列还包括校准Calibration纠错方法;所述纠错模块,还用于根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述当前出错信息的电压调节范围;从所述电压调节范围中确定第三电压值;根据所述第三电压值,对所述当前出错信息进行纠错。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910351232.4A CN111863107B (zh) | 2019-04-28 | 2019-04-28 | 闪存纠错方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910351232.4A CN111863107B (zh) | 2019-04-28 | 2019-04-28 | 闪存纠错方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111863107A CN111863107A (zh) | 2020-10-30 |
CN111863107B true CN111863107B (zh) | 2022-08-02 |
Family
ID=72965306
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910351232.4A Active CN111863107B (zh) | 2019-04-28 | 2019-04-28 | 闪存纠错方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111863107B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112558871B (zh) * | 2020-12-11 | 2022-12-20 | 成都佰维存储科技有限公司 | 闪存数据保存分析方法、装置、可读存储介质及电子设备 |
CN113707211B (zh) * | 2021-07-21 | 2024-05-10 | 深圳市宏旺微电子有限公司 | 一种闪存Read Retry纠错的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101656541A (zh) * | 2009-09-15 | 2010-02-24 | 中兴通讯股份有限公司 | Rs码的译码方法和装置 |
CN104798047A (zh) * | 2012-12-26 | 2015-07-22 | 英特尔公司 | 错误检测和校正装置及方法 |
CN107430538A (zh) * | 2015-03-27 | 2017-12-01 | 英特尔公司 | 基于错误类型的ecc的动态应用 |
CN108241549A (zh) * | 2016-12-27 | 2018-07-03 | 北京京存技术有限公司 | 基于ECC的NAND数据Read Retry纠错方法和NAND控制器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10445171B2 (en) * | 2016-02-29 | 2019-10-15 | Seagate Technology Llc | On-the-fly error detection algorithm during retry procedure |
-
2019
- 2019-04-28 CN CN201910351232.4A patent/CN111863107B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101656541A (zh) * | 2009-09-15 | 2010-02-24 | 中兴通讯股份有限公司 | Rs码的译码方法和装置 |
CN104798047A (zh) * | 2012-12-26 | 2015-07-22 | 英特尔公司 | 错误检测和校正装置及方法 |
CN107430538A (zh) * | 2015-03-27 | 2017-12-01 | 英特尔公司 | 基于错误类型的ecc的动态应用 |
CN108241549A (zh) * | 2016-12-27 | 2018-07-03 | 北京京存技术有限公司 | 基于ECC的NAND数据Read Retry纠错方法和NAND控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN111863107A (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8397116B2 (en) | Decoding method and memory system device using the same | |
JP5529751B2 (ja) | メモリアレイにおけるエラー訂正 | |
US20140223256A1 (en) | Error detection and correction unit, error detection and correction method, information processor, and program | |
CN111143107B (zh) | 一种fpga单粒子反转校验电路和方法 | |
KR20060039771A (ko) | 데이터 신뢰성을 향상시킬 수 있는 메모리 관리 기법 | |
US20210028795A1 (en) | Memory Controller and Method for Decoding Memory Devices with Early Hard-Decode Exit | |
US20190220348A1 (en) | Memory system and control method | |
KR101819152B1 (ko) | 오류 정정 코드를 디코딩하기 위한 방법 및 이와 관련된 디코딩 회로 | |
CN111863107B (zh) | 闪存纠错方法及装置 | |
US10353770B2 (en) | Memory system and error correcting method of the same | |
KR102688423B1 (ko) | 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 시스템의 동작 방법 | |
US20240184665A1 (en) | Data processing method and apparatus | |
US9164831B2 (en) | Memory controller, semiconductor storage device, and decoding method | |
CN113168882B (zh) | 一种编码方法、译码方法以及存储控制器 | |
CN109766214A (zh) | 一种最优h矩阵生成方法及装置 | |
CN114220474A (zh) | 一种数据处理方法、设备及存储介质 | |
KR102688433B1 (ko) | 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 시스템의 동작 방법 | |
CN111863106B (zh) | 闪存纠错方法及装置 | |
JP2013131095A (ja) | メモリコントローラ、記憶装置およびメモリ制御方法 | |
US20210273655A1 (en) | Memory system | |
CN110011670B (zh) | 基于ssd数据保护的ldpc译码方法和装置 | |
KR20200120524A (ko) | 메모리 시스템 및 메모리의 동작 방법 | |
US20240333308A1 (en) | Memory, memory module, memory system, and operation method of memory system | |
US12119841B2 (en) | G-LDPC decoder and G-LDPC decoding method | |
CN116662063B (zh) | 一种闪存的纠错配置方法、纠错方法、系统、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |