CN111863106B - 闪存纠错方法及装置 - Google Patents

闪存纠错方法及装置 Download PDF

Info

Publication number
CN111863106B
CN111863106B CN201910351203.8A CN201910351203A CN111863106B CN 111863106 B CN111863106 B CN 111863106B CN 201910351203 A CN201910351203 A CN 201910351203A CN 111863106 B CN111863106 B CN 111863106B
Authority
CN
China
Prior art keywords
error
error correction
correction method
information
header
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
Application number
CN201910351203.8A
Other languages
English (en)
Other versions
CN111863106A (zh
Inventor
彭攀来
霍文捷
秦义
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Hikstorage Technology Co ltd
Original Assignee
Wuhan Hikstorage Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Hikstorage Technology Co ltd filed Critical Wuhan Hikstorage Technology Co ltd
Priority to CN201910351203.8A priority Critical patent/CN111863106B/zh
Publication of CN111863106A publication Critical patent/CN111863106A/zh
Application granted granted Critical
Publication of CN111863106B publication Critical patent/CN111863106B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • 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数超过闪存存储器的硬件纠错能力时,就需要通过纠错方法进行数据纠错。
相关技术在进行纠错时,主要将出错数据对应的出错信息添加到一个链表中,然后通过纠错方法对该链表中的出错信息逐一进行纠错。
但相关技术中每次进行纠错时,都只能对链表中的一个出错信息进行纠错,导致纠错的时间较长,纠错效率低。
发明内容
本申请实施例提供了一种闪存纠错方法及装置,能够解决纠错的时间长,纠错效率低的问题。所述技术方案如下:
一方面,提供了一种闪存纠错方法,所述方法包括:
接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
当接收到所述闪存存储器返回的错误指示时,将所述读请求的多个出错信息添加到多个第一纠错链表中;
根据所述多个第一纠错链表中的出错信息,并行进行纠错。
在一种可能的实现方式中,所述将所述读请求的多个出错信息添加到多个第一纠错链表中,包括:
确定每个出错信息所在的裸片Die;
对于每个出错信息,根据所述出错信息所在的Die,将所述出错信息添加到所述Die对应的纠错链表中。
在另一种可能的实现方式中,所述根据所述多个第一纠错链表中的出错信息,并行进行纠错,包括:
对第一个第一纠错链表的出错信息进行纠错;
在纠错过程中,对所述多个第一纠错链表中其他第一纠错链表中的出错信息并行进行纠错。
在另一种可能的实现方式中,所述对第一个第一纠错链表的出错信息进行纠错,包括:
根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列,所述第一纠错方法序列包括至少一个纠错方法;
通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错;
当对所述表头中的出错信息纠错成功,或者通过所述第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除所述表头中的出错信息;
将所述第一个第一纠错链表中表头之后的下一个出错信息,添加到所述表头中,然后执行所述根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列的步骤,直到对所述第一个第一纠错链表中的最后一个出错信息纠错结束为止。
在另一种可能的实现方式中,所述根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列,包括:
确定所述表头中的出错信息的错误类型;
根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列。
在另一种可能的实现方式中,所述根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列之前,所述方法还包括:
获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;
获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;
相应的,所述根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列,包括:
根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述第一纠错方法序列。
在另一种可能的实现方式中,所述根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述第一纠错方法序列,包括:
当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的第一纠错方法序列。
在另一种可能的实现方式中,所述第一纠错方法序列包括读重试Read Retry纠错方法;
所述通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错,包括:
从第一重试表中选择一第一偏移电压值,基于所述Read Retry纠错方法的参考电压值和选择的第一偏移电压值对所述表头中的出错信息进行纠错;
当通过所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述表头中的出错信息纠错成功时,从第二重试表中选择一第二偏移电压值,通过所述参考电压值和选择的第二偏移电压值对所述表头中的出错信息进行纠错。
在另一种可能的实现方式中,所述第一纠错方法序列还包括校准Calibration纠错方法;
所述通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错,包括:
根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述第一个出错信息的电压调节范围;
从所述电压调节范围中确定第三电压值;
根据所述第三电压值,对所述表头中的出错信息进行纠错。
在另一种可能的实现方式中,所述方法还包括:
将通过所述第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中;
通过第二纠错方法序列,对所述第二纠错链表中的出错信息进行逐一纠错,所述第二纠错方法序列包括至少一个纠错方法。
在另一种可能的实现方式中,所述第二纠错方法序列包括软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法;
所述通过第二纠错方法序列,对所述第二纠错链表中的出错信息进行逐一纠错,包括:
在当前第一时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述SLDPC纠错方法,对所述第二纠错链表中的出错信息进行逐一纠错;
对于当前通过所述SLDPC纠错方法纠错失败的出错信息,当在当前第二时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述RAID纠错方法,对通过所述SLDPC纠错方法纠错失败的出错信息进行纠错。
另一方面,提供了一种闪存纠错装置,所述装置包括:
接收模块,用于接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
添加模块,用于当接收到所述闪存存储器返回的错误指示时,将所述读请求的多个出错信息添加到多个第一纠错链表中;
纠错模块,用于根据所述多个第一纠错链表中的出错信息,并行进行纠错。
在一种可能的实现方式中,所述添加模块,还用于确定每个出错信息所在的裸片Die;对于每个出错信息,根据所述出错信息所在的Die,将所述出错信息添加到所述Die对应的纠错链表中。
在另一种可能的实现方式中,所述纠错模块,还用于对第一个第一纠错链表的出错信息进行纠错;在纠错过程中,对所述多个第一纠错链表中其他第一纠错链表中的出错信息并行进行纠错。
在另一种可能的实现方式中,所述纠错模块,还用于根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列,所述第一纠错方法序列包括至少一个纠错方法;通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错;当对所述表头中的出错信息纠错成功,或者通过所述第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除所述表头中的出错信息;将所述第一个第一纠错链表中表头之后的下一个出错信息,添加到所述表头中,然后执行所述根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列的步骤,直到对所述第一个第一纠错链表中的最后一个出错信息纠错结束为止。
在另一种可能的实现方式中,所述纠错模块,还用于确定所述表头中的出错信息的错误类型;根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列。
在另一种可能的实现方式中,所述装置还包括:
获取模块,用于获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;
所述纠错模块,还用于根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述第一纠错方法序列。
在另一种可能的实现方式中,所述纠错模块,还用于当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的第一纠错方法序列。
在另一种可能的实现方式中,所述第一纠错方法序列包括读重试Read Retry纠错方法;
所述纠错模块,还用于从第一重试表中选择一第一偏移电压值,基于所述ReadRetry纠错方法的参考电压值和选择的第一偏移电压值对所述表头中的出错信息进行纠错;当通过所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述表头中的出错信息纠错成功时,从第二重试表中选择一第二偏移电压值,通过所述参考电压值和选择的第二偏移电压值对所述表头中的出错信息进行纠错。
在另一种可能的实现方式中,所述第一纠错方法序列还包括校准Calibration纠错方法;
所述纠错模块,还用于根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述第一个出错信息的电压调节范围;从所述电压调节范围中确定第三电压值;根据所述第三电压值,对所述表头中的出错信息进行纠错。
在另一种可能的实现方式中,所述添加模块,还用于将通过所述第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中;
所述纠错模块,还用于通过第二纠错方法序列,对所述第二纠错链表中的出错信息进行逐一纠错,所述第二纠错方法序列包括至少一个纠错方法。
在另一种可能的实现方式中,所述第二纠错方法序列包括软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法;
所述纠错模块,还用于在当前第一时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述SLDPC纠错方法,对所述第二纠错链表中的出错信息进行逐一纠错;对于当前通过所述SLDPC纠错方法纠错失败的出错信息,当在当前第二时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述RAID纠错方法,对通过所述SLDPC纠错方法纠错失败的出错信息进行纠错。
另一方面,提供了一种计算设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序,实现上述闪存纠错方法中任一项所述的方法步骤。。
另一方面,提供了一种计算机可读存储介质,其特征在于,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述闪存纠错方法中任一项所述的方法步骤。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例提供了一种闪存纠错方法,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,将读请求的多个出错信息添加到多个第一纠错链表中,根据多个第一纠错链表中的出错信息,并行进行纠错。该方法通过将多个出错信息添加到多个第一纠错链表中,对多个第一纠错链表中的出错信息并行纠错,缩短了纠错的时间,提高了纠错效率。
附图说明
图1是本申请实施例提供的一种闪存纠错的应用场景的示意图;
图2是本申请实施例提供的一种闪存纠错方法的流程图;
图3是本申请实施例提供的一种闪存纠错方法的流程图;
图4是本申请实施例提供的一种Read Retry纠错方法状态切换的示意图;
图5是本申请实施例提供的一种Calibration纠错方法状态切换的示意图;
图6是本申请实施例提供的一种SLDPC纠错方法状态切换的示意图;
图7是本申请实施例提供的一种RAID纠错方法状态切换的示意图;
图8是本申请实施例提供的一种通过RAID纠错方法纠错过程的示意图;
图9是本申请实施例提供的一种通过第一纠错方法序列和第二纠错方法序列对出错信息进行纠错的示意图;
图10是本申请实施例提供的一种通过第二纠错方法序列对出错信息进行纠错的示意图;
图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:根据多个第一纠错链表中的出错信息,并行进行纠错。
在一种可能的实现方式中,将读请求的多个出错信息添加到多个第一纠错链表中,包括:
确定每个出错信息所在的裸片Die;
对于每个出错信息,根据出错信息所在的Die,将出错信息添加到Die对应的纠错链表中。
在另一种可能的实现方式中,根据多个第一纠错链表中的出错信息,并行进行纠错,包括:
对第一个第一纠错链表的出错信息进行纠错;
在纠错过程中,对多个第一纠错链表中其他第一纠错链表中的出错信息并行进行纠错。
在另一种可能的实现方式中,对第一个第一纠错链表的出错信息进行纠错,包括:
根据第一个第一纠错链表的表头中的出错信息,确定表头中的出错信息的第一纠错方法序列,第一纠错方法序列包括至少一个纠错方法;
通过第一纠错方法序列,对表头中的出错信息进行纠错;
当对表头中的出错信息纠错成功,或者通过第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除表头中的出错信息;
将第一个第一纠错链表中表头之后的下一个出错信息,添加到表头中,然后执行根据第一个第一纠错链表的表头中的出错信息,确定表头中的出错信息的第一纠错方法序列的步骤,直到对第一个第一纠错链表中的最后一个出错信息纠错结束为止。
在另一种可能的实现方式中,根据第一个第一纠错链表的表头中的出错信息,确定表头中的出错信息的第一纠错方法序列,包括:
确定表头中的出错信息的错误类型;
根据错误类型和多个纠错方法,确定错误类型对应的第一纠错方法序列。
在另一种可能的实现方式中,根据错误类型和多个纠错方法,确定错误类型对应的第一纠错方法序列之前,方法还包括:
获取闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;
获取当前发生数据出错时出错Block中出错信息的第二出错个数;
相应的,根据错误类型和多个纠错方法,确定错误类型对应的第一纠错方法序列,包括:
根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定第一纠错方法序列。
在另一种可能的实现方式中,根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定第一纠错方法序列,包括:
当第二出错个数不大于第一出错个数时,根据错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与错误类型对应的第一纠错方法序列。
在另一种可能的实现方式中,第一纠错方法序列包括读重试Read Retry纠错方法;
通过第一纠错方法序列,对表头中的出错信息进行纠错,包括:
从第一重试表中选择一第一偏移电压值,基于Read Retry纠错方法的参考电压值和选择的第一偏移电压值对表头中的出错信息进行纠错;
当通过参考电压值和第一重试表中的每个第一偏移电压值均不能对表头中的出错信息纠错成功时,从第二重试表中选择一第二偏移电压值,通过参考电压值和选择的第二偏移电压值对表头中的出错信息进行纠错。
在另一种可能的实现方式中,第一纠错方法序列还包括校准Calibration纠错方法;
通过第一纠错方法序列,对表头中的出错信息进行纠错,包括:
根据Calibration纠错方法的参考电压值和第一偏移间隔确定第一个出错信息的电压调节范围;
从电压调节范围中确定第三电压值;
根据第三电压值,对表头中的出错信息进行纠错。
在另一种可能的实现方式中,方法还包括:
将通过第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中;
通过第二纠错方法序列,对第二纠错链表中的出错信息进行逐一纠错,第二纠错方法序列包括至少一个纠错方法。
在另一种可能的实现方式中,第二纠错方法序列包括软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法;
通过第二纠错方法序列,对第二纠错链表中的出错信息进行逐一纠错,包括:
在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过SLDPC纠错方法,对第二纠错链表中的出错信息进行逐一纠错;
对于当前通过SLDPC纠错方法纠错失败的出错信息,当在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过RAID纠错方法,对通过SLDPC纠错方法纠错失败的出错信息进行纠错。
本申请实施例提供了一种闪存纠错方法,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,将读请求的多个出错信息添加到多个第一纠错链表中,根据多个第一纠错链表中的出错信息,并行进行纠错。该方法通过将多个出错信息添加到多个第一纠错链表中,对多个第一纠错链表中的出错信息并行纠错,缩短了纠错的时间,提高了纠错效率。
本申请实施例提供了一种闪存纠错方法,应用于计算设备,参见图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:当接收到闪存存储器返回的错误指示时,计算设备将读请求的多个出错信息添加到多个第一纠错链表中。
计算设备接收到闪存存储器返回的错误指示时,将读请求的多个出错信息添加到多个第一纠错链表中,一个第一纠错链表中添加至少一个出错信息。
在一种可能的实现方式中,本步骤可以通过以下步骤(1)至(2)实现,包括:
(1)计算设备确定每个出错信息所在的Die。
多个出错信息可能对应不同的Die,计算设备根据出错信息中mKB的Bit数对应的存储地址,确定mKB的Bit数所在的Page,根据mKB的Bit数所在的Page,确定该Page所在的Block,根据该Block确定该Block所在的Die。
(2)对于每个出错信息,计算设备根据该出错信息所在的Die,将该出错信息添加到该Die对应的纠错链表中。
闪存存储器中包括多个Die,对于每个出错信息,计算设备可以根据出错信息对应的数据出错时的先后顺序,将该出错信息添加到该出错信息所在的Die对应的纠错链表中。当有多个出错信息所在的Die为同一个Die时,计算设备根据该出错信息对应的数据出错时的先后顺序,将该多个出错信息添加到同一个Die对应的纠错链表中。后续计算设备在纠错时,根据添加出错信息的先后顺序进行纠错,先对添加到纠错链表中的出错信息进行纠错。另外,计算设备根据出错信息所在的Die划分纠错链表,也即对出错信息按照存储地址划分,后续对不同Die上的出错信息进行纠错时互不干扰,有利于提高纠错效率。
例如,闪存存储器中包括3个Die,分别为Die0、Die1和Die2。对于每个出错信息,计算设备确定该出错信息所在的Die为Die0、Die1或Die2,例如,计算设备确定该出错信息所在的Die为Die0,则计算设备将该出错信息添加到Die0对应的纠错链表中。
在一种可能的实现方式中,多个第一纠错链表的数量可以和闪存存储器中Die的数量相同或不同。当第一纠错链表的数量和Die的数量相同时,例如,该闪存存储器中包括3个Die,则第一纠错链表的数量为3,每个Die对应一个第一纠错链表。当第一纠错链表的数量和Die的数量不同时,第一纠错链表的数量可以根据需要进行设置并更改,例如,第一纠错链表的数量为2或4。
步骤303:计算设备对第一个第一纠错链表的出错信息进行纠错,在纠错过程中,对多个第一纠错链表中的其他第一纠错链表中的出错信息并行进行纠错。
对于多个第一纠错链表中的每个第一纠错链表,每个第一纠错链表都存在表头,计算设备将每个第一纠错链表中的第一个出错信息添加到该第一纠错链表的表头中,得到每个第一纠错链表的表头中的出错信息。不同的第一纠错链表的表头中的出错信息不同。计算设备对第一个第一纠错链表的表头中的出错信息进行纠错时,还同时对其他第一纠错链表的表头中的出错信息并行进行纠错。当计算设备对第一个第一纠错链表的表头中的出错信息纠错结束后,计算设备将该出错信息从该表头中删除,将第二个出错信息添加到该表头中,对新添加到表头中的出错信息进行纠错。在该过程中,当计算设备对其他第一纠错链表的表头中的出错信息也纠错结束后,还可以同时将其他第一纠错链表的表头中的出错信息从其对应的表头中删除,将其他第一纠错链表中每个第一纠错链表的第二个出错信息添加到其对应的表头中,对新添加到其他第一纠错链表的表头中的出错信息并行进行纠错。
在一种可能的实现方式中,计算设备可以通过一个指定纠错方法序列对第一个第一纠错链表的表头中的出错信息进行纠错。当计算设备通过该指定纠错方法序列对第一个第一纠错链表的表头中的出错信息进行纠错时,还可以同时对其他第一纠错链表的表头中的出错信息进行纠错。在另一种可能的实现方式中,计算设备还可以通过多个指定纠错方法序列对该多个第一纠错链表并行进行纠错。例如,计算设备通过第一个指定纠错方法序列对第一个第一纠错链表的表头中的出错信息进行纠错时,还可以通过其他指定纠错方法序列同时对其他第一纠错链表的表头中的出错信息进行纠错。
例如,计算设备将读请求的多个出错信息添加到4个第一纠错链表中,则计算设备可以通过一个指定纠错方法序列同时对该4个第一纠错链表的表头中的出错信息进行纠错;或者,计算设备通过4个指定纠错方法序列同时对该4个第一纠错链表的表头中的出错信息进行纠错,一个指定纠错方法序列对应一个第一纠错链表。其中,指定纠错方法序列可以根据需要进行设置并更改,例如,指定纠错方法序列可以为:Calibration纠错方法-RAID纠错方法-Read Retry纠错方法-SLDPC纠错方法;或者RAID纠错方法;或者SLDPC纠错方法-Calibration纠错方法。在本申请实施例中,对此不作具体限定。
在另一种可能的实现方式中,计算设备通过纠错方法序列对第一纠错链表的表头中的出错信息进行纠错时,可以先判断每个第一纠错链表的表头中的出错信息的错误类型,根据每个第一纠错链表的表头中的出错信息的错误类型和多个纠错方法,确定每个第一纠错链表的表头中的出错信息的错误类型对应的第一纠错方法序列。不同错误类型的出错信息通过不同的纠错方法序列进行纠错,实现了对出错信息由针对性的纠错,缩短了纠错时间,提高了纠错效率。其中,当该多个第一纠错链表的表头中的出错信息中存在错误类型相同的表头中的出错信息时,可以先通过第一纠错方法序列中的第一个纠错方法对错误类型相同的表头中的出错信息进行纠错,当存在纠错失败的表头中的出错信息时,再通过第一纠错方法序列中的第二个纠错方法进行纠错,直至通过第一纠错方法序列中的最后一个纠错方法进行纠错结束为止。
例如,第一纠错链表的数量为4,第一个第一纠错链表的表头中的出错信息的错误类型和第二个第一纠错链表的表头中的出错信息的错误类型相同,均为Read UNECC Error错误类型时,则计算设备通过第一纠错方法序列中的第一个纠错方法对该两个第一纠错链表的表头中的出错信息并行进行纠错;第三个第一纠错链表的表头中的出错信息的错误类型和第四个第一纠错链表的表头中的出错信息的错误类型相同,为其他错误类型时,则根据该其他错误类型对应的纠错方法序列,对第三个第一纠错链表的表头中的出错信息和第四个第一纠错链表的表头中的出错信息并行进行纠错。
在本申请实施例中,以计算设备对第一个第一纠错链表的表头中的出错信息进行纠错为例进行说明。相应的,该步骤可以通过以下步骤(1)至(4)实现,包括:
(1)计算设备根据第一个第一纠错链表的表头中的出错信息,确定该表头中的出错信息的第一纠错方法序列。
对于第一个第一纠错链表,计算设备确定该第一个第一纠错链表的表头中的出错信息,根据该表头中的出错信息,确定该表头中的出错信息的第一纠错方法序列。
本步骤可以通过以下步骤(A1)至(A2)实现,包括:
(A1)计算设备确定该第一个第一纠错链表的表头中的出错信息的错误类型。
在一种可能的实现方式中,计算设备确定表头中的出错信息的错误类型的步骤可以为:计算设备根据错误指示中携带当前出错信息的错误类型标识,确定表头中的出错信息的错误类型。在另一种可能的实现方式中,计算设备确定表头中的出错信息的错误类型的步骤可以为:闪存存储器向计算设备直接反馈错误类型,计算设备接收闪存存储器发送的表头中的出错信息的错误类型。
在本申请实施例中,错误类型主要包括以下几类: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,读到错误检查和更正,结束)错误类型。
(A2)计算设备根据错误类型和多个纠错方法,确定错误类型对应的第一纠错方法序列。
本步骤中,计算设备可以直接根据错误类型和多个纠错方法,确定表头中的出错信息的错误类型对应的第一纠错方法序列。或者,在根据错误类型和多个纠错方法,确定第一纠错方法序列之前,获取出错Block中出错信息的出错个数。相应的,本步骤可以通过以下步骤(A 2-1)至(A2-3)实现,包括:
(A2-1)计算设备获取闪存存储器上一次发生数据出错时出错Block中出错信息的第一出错个数。
计算设备在每次发生数据出错时,存储发生数据出错时出错Block中出错信息的出错个数。本步骤中,在当前发生数据出错时,计算设备从存储的出错Block中出错信息的出错个数中获取上一次发生数据出错时出错Block中出错信息的第一出错个数。
(A2-2)计算设备获取当前发生数据出错时该出错Block中出错信息的第二出错个数。
本步骤中计算设备在当前发生数据出错时,获取当前数据出错的出错Block中出错信息的第二出错个数。
(A2-3)计算设备根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定第一纠错方法序列。
在一种可能的实现方式中,当第二出错个数不大于第一出错个数时,计算设备基于错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与该错误类型对应的第一纠错方法序列,该第一纠错方法序列中包括至少一个纠错方法。
在该实现方式中,计算设备中可以预先存储多个第一纠错方法序列。
本申请实施例中,纠错方法可以根据需要进行设置并更改,例如,纠错方法可以为Read Retry纠错方法和Calibration纠错方法。在本申请实施例中,对纠错方法不作具体限定。当错误类型为Read UNECC Error错误类型时,得到的第一纠错方法序列可以为ReadRetry纠错方法-Calibration纠错方法。
本步骤中,计算设备根据第一出错个数、第二出错个数、错误类型和多个纠错方法,动态调度纠错方法,降低了纠错延迟,提高了纠错效率。
在一种可能的实现方式中,计算设备基于错误类型以及错误类型和纠错方法的对应关系,从多个纠错方法中选择至少一个纠错方法,将选择的至少一个纠错方法组成第一纠错方法序列。
在该实现方式中,计算设备可以预先存储多个纠错方法以及错误类型和纠错方法的对应关系。该对应关系中,一个错误类型可能和多个纠错方法对应,当一个错误类型和多个纠错方法对应时,计算设备可以从该多个纠错方法中选择至少一个纠错方法。当错误类型为Read UNECC Error错误类型时,对应的纠错方法可以包括Read Retry纠错方法和Calibration纠错方法。
计算设备将选择的至少一个纠错方法按照顺序组成第一纠错方法序列。例如,当错误类型为Read UNECC Error错误类型,选择的纠错方法为Read Retry纠错方法和Calibration纠错方法时,第一纠错方法序列可以为Read Retry纠错方法-Calibration纠错方法。
在本申请实施例中,计算设备可以根据错误类型和多个纠错方法,确定纠错方法序列;或者计算设备也可以根据出错个数、错误类型和多个纠错方法,确定纠错方法序列。在本申请实施例中,对此不作具体限定。当计算设备根据出错个数、错误类型和多个纠错方法,确定纠错方法序列时,在第二出错个数和第一出错个数的大小关系不同时,即使同一错误类型,确定的纠错方法序列也不同,该方法可以避免确定的纠错方法序列中包括无用的纠错方法,浪费纠错资源。例如,本步骤中,当错误类型为Read UNECC Error错误类型时,在第二出错个数不大于第一出错个数时,确定的纠错方法序列为Read Retry纠错方法-Calibration纠错方法-SLDPC纠错方法-RAID纠错方法。而在第二出错个数大于第一出错个数时,确定的纠错方法序列为SLDPC纠错方法-RAID纠错方法。这是由于在第二出错个数大于第一出错个数时,可能是Data Retention出现问题,这种情况下,采用Read Retry纠错方法和Calibration纠错方法纠错成功的概率较低,因此,直接采用SLDPC纠错方法和RAID纠错方法,在很大程度上可以降低纠错的延迟,缩短纠错时间,提高纠错效率。
需要说明的一点是,步骤(A2-3)中当第二出错个数大于第一出错个数,且错误类型为Read UNECC Error错误类型时,计算设备基于错误类型以及错误类型和纠错方法序列的对应关系,确定的纠错方法序列可以为第二纠错方法序列。第二纠错方法序列在步骤(4)中有详细阐述。
(2)计算设备通过第一纠错方法序列,对表头中的出错信息进行纠错。
在一种可能的实现方式中,第一纠错方法序列中包括Read Retry纠错方法。计算设备通过Read Retry纠错方法,对表头中的出错信息进行纠错的步骤可以通过以下步骤(B1)至(B2)实现,包括:
(B1)计算设备从第一重试表中选择一第一偏移电压值,基于Read Retry纠错方法的参考电压值和选择的第一偏移电压值对表头中的出错信息进行纠错。
第一重试表为Read Retry纠错方法中的快速重试表,第一重试表中存储的第一偏移电压值为离当前时间最近的历史时间段内成功纠错时对应的偏移电压值。第一重试表中可以存储多个第一偏移电压值,计算设备可以实时地更新或周期性更新第一重试表。计算设备中还存储了每个第一偏移电压值成功纠错的时间和表头中的出错信息出错时的时间之间的时间间隔。计算设备从第一重试表中选择第一偏移电压值的过程可以为:计算设备根据该时间间隔,从多个第一偏移电压值中,选择时间间隔最短时对应的第一偏移电压值。在一种可能的实现方式中,计算设备根据该时间间隔,对多个第一偏移电压值进行排序,时间间隔最短对应的第一偏移电压值为第一重试表中的第一个偏移电压值,时间间隔次短对应的第一偏移电压值为第一重试表中的第二个偏移电压值,依次排列,时间间隔最长对应的第一偏移电压值为第一重试表中的最后一个偏移电压值。计算设备按照顺序,依次选择第一重试表中的第一偏移电压值。在另一种可能的实现方式中,计算设备也可以从第一重试表中随机选择一个偏移第一电压值。
第一重试表中第一偏移电压值的数量可以根据需要进行设置并更改,例如,第一偏移电压值的数量可以为3、4或者5等。在本申请实施例中,对此不作具体限定。当第一偏移电压值的数量为3时,3个第一偏移电压值可以分别为时间间隔最短的第一偏移电压值、时间间隔次短的第一偏移电压值和时间间隔最长的第一偏移电压值,参见表1。计算设备可以从3个第一偏移电压值中选择时间间隔最短的第一偏移电压值,基于该时间间隔最短的第一偏移电压值对表头中的出错信息进行纠错。参考电压值可以根据需要进行设置并更改,在本申请实施例中,对此不作具体限定。例如,参考电压值可以为0。
计算设备从第一重试表中选择一第一偏移电压值,根据选择的第一偏移电压值对表头中的出错信息进行纠错。其中,计算设备在Executing状态下确定纠错采用的第一偏移电压值,通过第一偏移电压值读取表头中的出错信息对应的数据,读取数据后,将状态从Executing状态切换到Single State Done(单一状态完成)状态,在Single State Done状态下确定读取数据是否成功。如果读取成功,则保存该第一偏移电压值,将状态从SingleState Done状态经Executing状态切换到Done状态;如果读取失败,在Executing状态下从第一重试表中重新选择第一偏移电压值,根据重新选择的第一偏移电压值进行纠错。计算设备通过Read Retry纠错方法纠错时,状态之间的切换可以参见图4。
在一种可能的实现方式中,在步骤(2-1)之前,计算设备可以先确定在当前是否通过Read Retry纠错方法进行纠错,在当前没有通过Read Retry纠错方法进行纠错时,计算设备将表头中的出错信息添加到Read Retry纠错方法的链表中,将状态从空闲状态切换为Executing(执行)状态,执行步骤(2-1)。
表1
Figure BDA0002043991970000191
(B2)当计算设备通过参考电压值和第一重试表中的每个第一偏移电压值均不能对表头中的出错信息纠错成功时,则计算设备从第二重试表中选择一第二偏移电压值,通过参考电压值和选择的第二偏移电压值对表头中的出错信息进行纠错。
当计算设备根据参考电压值和第一重试表中的每个第一偏移电压值均不能对表头中的出错信息纠错成功时,则计算设备从第二重试表中选择一第二偏移电压值进行纠错。
第二重试表为计算设备统计之前的出错信息,将之前成功读取数据时的偏移电压值进行存储生成的表。计算设备从第二重试表中选择第二偏移电压值的步骤和上述步骤(B1)中选择第一偏移电压值的步骤可以相同或者不同。在本申请实施例中,对此不作具体限定。计算设备基于选择的第二偏移电压值对表头中的出错信息进行纠错。
本步骤中,计算设备根据第二偏移电压值读取数据时,状态之间的切换和上述采用第一偏移电压值读取数据时,状态之间的切换过程相似,可以继续参见图4,在此不再赘述。当计算设备根据选择的第二偏移电压值纠错失败时,从第二重试表重新选择一个第二偏移电压值,通过重新选择的第二偏移电压值读取数据。如果读取成功,则计算设备将该第二偏移电压值更新到第一重试表中,将该第二偏移电压值作为第一重试表中的第一个偏移电压值;如果读取失败,则计算设备重新选择第二偏移电压值读取数据。
当计算设备基于每个第二偏移电压值均不能纠错成功或读取次数达到第二阈值时,计算设备确定纠错失败。
第二阈值可以根据需要进行设置并更改,在本申请实施例中,对第二阈值不作具体限定。例如,第二阈值可以为127次、128次或者130次。并且,第二阈值可以等于或者小于第二重试表中第二偏移电压值的数量。在本申请实施例中,对此不作具体限定。例如,第二阈值可以与第二重试表中第二偏移电压值的数量相等,均为128次。另外,计算设备从第二重试表中选择第二偏移电压值时,可以依次选择第二偏移电压值,也可以随机选择第二偏移电压值,在本申请实施例中,对此不作具体限定。
在本申请实施例中,在通过Read Retry纠错方法进行纠错时,优先采用第一重试表中的偏移电压值,第一重试表中存储了多个离当前时间最近的历史时间段内成功纠错时对应的偏移电压值,因此,采用第一重试表中的偏移电压值纠错成功的概率较高,可以在更短时间内实现对当前出错信息的成功纠错,提高了纠错效率。
在另一种可能的实现方式中,当计算设备通过Read Retry纠错方法纠错失败时,可以直接结束操作;或者通过其他纠错方法进行纠错。当计算设备通过其他纠错方法进行纠错时,第一纠错方法序列中还包括Calibration纠错方法。相应的,计算设备通过ReadRetry纠错方法纠错失败时,将表头中的出错信息添加到Calibration纠错方法中的链表中,计算设备通过Calibration纠错方法,对表头中的出错信息进行纠错的步骤可以通过以下步骤(C1)至(C3)实现,包括:
(C1)计算设备基于Calibration纠错方法的参考电压值和第一偏移间隔确定表头中的出错信息的电压调节范围。
第一偏移间隔为在参考电压值的基础上,对参考电压值左偏调节或右偏调节的幅度。例如,在参考电压值的基础上,左偏第一偏移间隔;或者在参考电压值的基础上,右偏第一偏移间隔。
本步骤可以通过以下步骤(C1-1)至(C1-4)实现,包括:
(C1-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的个数尽可能地接近第三阈值。
(C1-2)计算设备基于第四电压值读取数据,根据读取的数据中1的个数或0的个数与第三阈值的差值,将第四电压值左偏调节第一偏移间隔或者右偏调节第一偏移间隔,得到第五电压值。
在步骤(C1-1)中,计算设备在Single State Done状态确定第四电压值,然后将状态从Single State Done状态切换到Executing状态,在Executing状态下采用第四电压值读取数据。读取数据后,计算设备将状态从Executing状态切换到Single State Done状态,在Single State Done状态下确定读取的数据中1的个数或0的个数与第三阈值的差值,将第四电压值左偏调节第一偏移间隔或右偏调节第一偏移间隔,得到第五电压值。
例如,步骤(C1-1)中1的个数大于第三阈值,计算设备左偏调节参考电压值,得到第四电压值;当计算设备根据第四电压值,再次读取的数据中1的个数仍大于第三阈值,则计算设备将第四电压值左偏调节第一偏移间隔,得到第五电压值。
(C1-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个,大于上一次的差值,则计算设备确定当前读取数据的第五电压值和上一次读取数据的第四电压值。
(C1-4)计算设备根据当前读取数据的电压值和上一次读取数据的电压值,确定电压调节范围。
计算设备将当前读取数据的电压值和上一次读取数据的电压值组成该电压调节范围。
Calibration纠错方法的参考电压值和Read Retry纠错方法的参考电压值可以相同或者不同,在本申请实施例中,对此不作具体限定,例如,Calibration纠错方法的参考电压值和Read Retry纠错方法的参考电压值相同,可以均为0。
在一种可能的实现方式中,计算设备在执行步骤(C1)之前,可以先确定在当前是否通过Calibration纠错方法进行纠错,在当前没有通过Calibration纠错方法进行纠错时,计算设备将表头中的出错信息添加到Calibration纠错方法的链表中,将状态从空闲状态切换为Calibration纠错方法中的Executing状态,执行步骤(C1),计算设备在Executing状态确定第一偏移间隔。
(C2)计算设备从电压调节范围中确定第三电压值。
其中,计算设备在确定第三电压值时,可以先从电压调节范围中选择一电压值作为基础电压值,对该基础电压值进行进行微调,得到第三电压值。其中,第三电压值的取值在该电压调节范围内。
例如,计算设备可以选择电压调节范围的中间值作为基础电压值,或者将电压调节范围进行三等分,选择靠近当前读取数据电压值的电压值作为基础电压值。在本申请实施例中,对此不作具体限定。
计算设备对该基础电压值进行微调,得到第三电压值的步骤可以为:计算设备可以以基础电压值为中心,左偏调节第二偏移间隔或者右偏调节第二偏移间隔,得到第三电压值。第二偏移间隔小于第一偏移间隔。例如,第一偏移间隔为16mV,第二偏移间隔可以为比16mV小的任一间隔,例如,第二偏移间隔为1mV、2mV、3mV等。在本申请实施例中,对此不作具体限定。
计算设备对基础电压值可以进行多次调节,每调节一次得到一个对应的电压值。计算设备通过该电压值在Executing状态下读取数据,在Single State Done状态下确定读取的数据中1的个数或0的个数与第三阈值的差值,重复调节电压值、读取数据,直至1的个数或0的个数与第三阈值相等,计算设备将此时对应的电压值作为第三电压值。例如,当前读取数据的电压值为第四电压值,上一次读取数据的电压值为第五电压值,则第三电压值的数值在第四电压值和第五电压值之间。如果通过电压调节范围内的每个电压值,均不能使得1的个数或0的个数与第三阈值相等,则确定1的个数或0的个数与第三阈值的差值最小时对应的电压值,将该电压值作为第三电压值。
其中,计算设备对基础电压值左偏调节第二偏移间隔或右偏调节第二偏移间隔,最终得到第三电压值的过程和步骤(C1)中计算设备基于参考电压值和第一偏移间隔,确定电压调节范围的过程相似,在此不再赘述。
需要说明的一点是,步骤(C1)中计算设备先粗略对参考电压值进行调节,得到一电压调节范围,在该电压调节范围选择第三电压值,实现了对电压值的有目的性的选择和调节,提高了纠错效率。
(C3)计算设备根据第三电压值,对表头中的出错信息进行纠错。
计算设备在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纠错方法进行纠错时,先确定一个纠错的电压调节范围,在该电压调节范围内进行调节,可以避免盲目调节,实现有效范围内的有目的性的调节,可以缩短纠错时间,提高纠错效率。
在本申请实施例中,计算设备通过第一纠错方法序列中的任一纠错方法对第一个第一纠错链表的表头中的出错信息进行纠错时,当纠错成功,或者通过第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除表头中的出错信息,将第一个第一纠错链表中表头之后的下一个出错信息添加到表头中,然后根据新添加到该表头中的出错信息,确定新添加到该表头中的出错信息的第一纠错方法序列,直到对第一个第一纠错链表中的最后一个出错信息纠错结束为止。计算设备在进行纠错时,在通过纠错方法序列对表头中的出错信息纠错成功或纠错结束时,将表头中的出错信息删除,将下一个出错信息添加到表头中,避免该纠错成功或纠错结束的出错信息占用表头中的资源,实现了对纠错链表的动态更新。
需要说明的一点是,当计算设备通过第一纠错方法序列对第一个第一纠错链表的多个出错信息纠错失败时,可以直接结束操作。或者,还可以通过第二纠错方法序列,对第一个第一纠错链表中的纠错失败的多个出错信息进行纠错。在本申请实施例中,对此不作具体限定。当计算设备通过第二纠错方法序列,对第一个第一纠错链表中的纠错失败的多个出错信息进行纠错时,计算设备执行步骤(3)和(4)。
(3)计算设备将通过第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中。
在本步骤中,计算设备可以按照多个出错信息中mKB的Bit数出错的先后顺序,将第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中。
(4)计算设备通过第二纠错方法序列,对第二纠错链表中的出错信息进行逐一纠错。
第二纠错方法序列中包括SLDPC纠错方法和RAID纠错方法。计算设备通过第二纠错方法序列,对第二纠错链表中的出错信息进行逐一纠错的步骤可以通过以下步骤(D1)至(D2)实现,包括:
(D1)在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,计算设备通过SLDPC纠错方法,对第二纠错链表中的出错信息进行逐一纠错。
本步骤中,计算设备将第二纠错链表中的第一个出错信息添加到SLDPC纠错方法的链表中,将状态从空闲状态切换至第一SLDPC State Manual SD(SLDPC State ManualSoft Decode,软件低密度校验码的手动软解码)状态。在第一SLDPC State Manual SD状态下,计算设备从SLDPC纠错方法的LLR(Log Likelihood Ratio,对数似然比)表中获取第三偏移间隔,然后将状态从第一SLDPC State Manual SD状态切换到第二SLDPC StateManual SD状态,在第二SLDPC State Manual SD状态下,基于参考电压值和第三偏移间隔读取数据。在第二SLDPC State Manual SD状态下,从LLR表中获取第四偏移间隔后,将状态从第二SLDPC State Manual SD状态切换到第三SLDPC State Manual SD状态,在第二SLDPC State Manual SD状态下,基于参考电压值和第四偏移间隔,读取数据。在第三SLDPCState Manual SD状态下,从LLR表中获取下一个偏移间隔后,将状态从第三SLDPC StateManual SD状态切换到下一个SLDPC State Manual SD状态,重复以上步骤,直至将状态切换为第五SLDPC State Manual SD状态。在第五SLDPC State Manual SD状态下,确定读取数据时采用的参考电压值和偏移间隔,将状态从第五SLDPC State Manual SD状态切换到SD State Done(Soft Decode State Done,软解码完成)状态,在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纠错方法纠错时,状态之间的切换可以参见图6。
需要说明的一点是,在本申请实施例中,计算设备通过SLDPC纠错方法纠错时,是采用串行,单路径的方式进行纠错,即一次只能对一个出错信息进行纠错,且优先处理先添加到SLDPC纠错方法的链表中的出错信息。
需要说明的一点是,SLDPC纠错方法和RAID纠错方法中在进行纠错时,同一时间只能有一个纠错方法进行纠错。计算设备在通过其中一个纠错方法纠错时,没有通过另一个纠错方法进行纠错,从而可以避免两个纠错方法同时进行纠错时,占用过多资源,提高了纠错效率。
(D2)对于当前通过SLDPC纠错方法纠错失败的出错信息,当在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,计算设备通过RAID纠错方法,对通过SLDPC纠错方法纠错失败的出错信息进行纠错。
本步骤中,计算设备将通过SLDPC纠错方法纠错失败的出错信息,按照每个出错信息中mKB的Bit数出错的先后顺序,将通过SLDPC纠错方法纠错失败的出错信息添加到RAID纠错方法的链表中,将状态从空闲状态切换到Executing状态。进入到Executing状态后,计算设备确定RAID纠错方法的链表中的第一个出错信息所在的Die,然后读取未出错Die上的数据,当成功读取未出错Die上的数据时,则将状态从Executing状态切换到RAID纠错方法中的Decode State Done(解码完成)状态,再将状态切换到Done状态,并对进行RAID纠错方法进行初始化,将状态切换到空闲状态,用于处理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状态。计算设备通过RAID纠错方法纠错时,状态之间的切换可以继续参见图7。
如果Read Retry纠错方法失败,则将状态切换到Calibration纠错方法。进入Calibration纠错方法后,无论纠错是否成功,都将状态从Calibration纠错方法切换到Decode State Done状态。
当未出错Die上的数据全部读取完成或无法读取未出错Die上的数据时,计算设备将状态从Decode State Done状态切换到Done状态。进入Done状态后,无论是否成功读取未出错Die上的数据,都结束纠错,对RAID纠错方法进行初始化,将状态从Done状态切换到空闲状态。
需要说明的一点是,本步骤中当计算设备读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,计算设备启动Read Retry纠错方法和Calibration纠错方法进行纠错属于RAID纠错方法。计算设备通过RAID纠错方法对该第一个出错信息进行纠错的过程可以参见图8。图8中的错误类型为Media CRC Error错误类型或Read EmptyPage错误类型,图8中的裸片N表示RAID纠错方法读取未出错Die上的数据时失败,但错误类型为Read UNECC Error错误类型,对其进行单独处理的裸片。
另外,未出错Die是指闪存存储器中除该第一个出错信息所在的Die之外的其余未出错的Die,计算设备可以通过读取未出错Die上的数据,然后通过异或操作,得到出错Die上的数据,进而实现对该第一个出错信息的纠错。并且,计算设备通过RAID纠错方法纠错时,是采用串行,单路径的方式进行纠错,即一次只能对一个出错信息进行纠错,且优先处理先添加到链表中的数据出错的任务。未出错Die的数量可以为一个或多个,在本申请实施例中,对此不作具体限定。当计算设备通过RAID纠错方法对该第一个出错信息纠错成功时,计算设备可以对下一个出错信息进行纠错。
其中,当第二出错个数不大于第一出错个数,错误类型为Read UNECC Error错误类型时,计算设备通过第一方法序列和第二方法序列对出错信息进行纠错的过程可以参见图9。图9中,在RAID纠错方法纠错过程中,RAID纠错方法读取未出错Die上的数据,当RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,计算设备启动Read Retry纠错方法和Calibration纠错方法进行纠错。图9中的裸片N表示RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型,对其进行单独处理的裸片。当第二出错个数大于第一出错个数,且错误类型为Read UNECC Error错误类型时,计算设备通过第二纠错方法序列对出错信息进行纠错的过程可以参见图10。图10中,在RAID纠错方法纠错过程中,RAID纠错方法读取未出错Die上的数据,当RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型时,计算设备启动Read Retry纠错方法和Calibration纠错方法进行纠错。图10中的裸片N表示RAID纠错方法读取未出错Die上的数据失败,但错误类型为Read UNECC Error错误类型,对其进行单独处理的裸片。
在本申请实施例中,对通过第一纠错方法序列纠错失败的出错信息,计算设备还可以通过第二纠错方法序列继续进行纠错,提高了纠错的成功率。
步骤304:当计算设备对每个第一纠错链表中的每个出错信息纠错成功时,计算设备输出第一位置上存储的数据。
当计算设备对每个第一纠错链表中的每个出错信息纠错成功时,计算设备成功读取该第一位置上存储的数据,计算设备可以直接输出第一位置上存储的数据。
本申请实施例提供了一种闪存纠错方法,计算设备接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,将读请求的多个出错信息添加到多个第一纠错链表中,根据多个第一纠错链表中的出错信息,并行进行纠错。该方法通过将多个出错信息添加到多个第一纠错链表中,对多个第一纠错链表中的出错信息并行纠错,缩短了纠错的时间,提高了纠错效率。
本申请实施例提供了一种闪存纠错装置,应用于计算设备,参见图11,该装置包括:
接收模块1101,用于接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于请求读取第一位置上存储的数据;
添加模块1102,用于当接收到闪存存储器返回的错误指示时,将读请求的多个出错信息添加到多个第一纠错链表中;
纠错模块1103,用于根据多个第一纠错链表中的出错信息,并行进行纠错。
在一种可能的实现方式中,添加模块1102,还用于确定每个出错信息所在的裸片Die;对于每个出错信息,根据出错信息所在的Die,将出错信息添加到Die对应的纠错链表中。
在另一种可能的实现方式中,纠错模块1103,还用于对第一个第一纠错链表的出错信息进行纠错;在纠错过程中,对多个第一纠错链表中其他第一纠错链表中的出错信息并行进行纠错。
在另一种可能的实现方式中,纠错模块1103,还用于根据第一个第一纠错链表的表头中的出错信息,确定表头中的出错信息的第一纠错方法序列,第一纠错方法序列包括至少一个纠错方法;通过第一纠错方法序列,对表头中的出错信息进行纠错;当对表头中的出错信息纠错成功,或者通过第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除表头中的出错信息;将第一个第一纠错链表中表头之后的下一个出错信息,添加到表头中,然后执行根据第一个第一纠错链表的表头中的出错信息,确定表头中的出错信息的第一纠错方法序列的步骤,直到对第一个第一纠错链表中的最后一个出错信息纠错结束为止。
在另一种可能的实现方式中,纠错模块1103,还用于确定表头中的出错信息的错误类型;根据错误类型和多个纠错方法,确定错误类型对应的第一纠错方法序列。
在另一种可能的实现方式中,装置还包括:
获取模块,用于获取闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;获取当前发生数据出错时出错Block中出错信息的第二出错个数;
纠错模块1103,还用于根据第一出错个数、第二出错个数、错误类型和多个纠错方法,确定第一纠错方法序列。
在另一种可能的实现方式中,纠错模块1103,还用于当第二出错个数不大于第一出错个数时,根据错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与错误类型对应的第一纠错方法序列。
在另一种可能的实现方式中,第一纠错方法序列包括读重试Read Retry纠错方法;
纠错模块1103,还用于从第一重试表中选择一第一偏移电压值,基于Read Retry纠错方法的参考电压值和选择的第一偏移电压值对表头中的出错信息进行纠错;当通过参考电压值和第一重试表中的每个第一偏移电压值均不能对表头中的出错信息纠错成功时,从第二重试表中选择一第二偏移电压值,通过参考电压值和选择的第二偏移电压值对表头中的出错信息进行纠错。
在另一种可能的实现方式中,第一纠错方法序列还包括校准Calibration纠错方法;
纠错模块1103,还用于根据Calibration纠错方法的参考电压值和第一偏移间隔确定第一个出错信息的电压调节范围;从电压调节范围中确定第三电压值;根据第三电压值,对表头中的出错信息进行纠错。
在另一种可能的实现方式中,添加模块1102,还用于将通过第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中;
纠错模块1103,还用于通过第二纠错方法序列,对第二纠错链表中的出错信息进行逐一纠错,第二纠错方法序列包括至少一个纠错方法。
在另一种可能的实现方式中,第二纠错方法序列包括软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法;
纠错模块1103,还用于在当前第一时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过SLDPC纠错方法,对第二纠错链表中的出错信息进行逐一纠错;对于当前通过SLDPC纠错方法纠错失败的出错信息,当在当前第二时间没有通过SLDPC纠错方法和RAID纠错方法进行纠错时,通过RAID纠错方法,对通过SLDPC纠错方法纠错失败的出错信息进行纠错。
本申请实施例提供了一种闪存纠错装置,接收读请求,读请求携带闪存存储器的第一位置的位置标识,用于读取第一位置上存储的数据,当接收到闪存存储器返回的错误指示时,将读请求的多个出错信息添加到多个第一纠错链表中,根据多个第一纠错链表中的出错信息,并行进行纠错。该方法通过将多个出错信息添加到多个第一纠错链表中,对多个第一纠错链表中的出错信息并行纠错,缩短了纠错的时间,提高了纠错效率。
需要说明的是:上述实施例提供的闪存纠错装置在闪存纠错时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的闪存纠错装置与闪存纠错方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图12是本发明实施例提供的一种计算设备的结构示意图,该计算设备1200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)1201和一个或一个以上的存储器1202,其中,所述存储器1202中存储有至少一条指令,所述至少一条指令由所述处理器1201加载并执行以实现上述各个方法实施例提供的方法。当然,该计算设备还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该计算设备还可以包括其他用于实现设备功能的部件,在此不做赘述。
本申请实施例还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例的闪存纠错方法的步骤。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅是为了便于本领域的技术人员理解本申请的技术方案,并不用以限制本申请。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (15)

1.一种闪存纠错方法,其特征在于,所述方法包括:
接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
当接收到所述闪存存储器返回的错误指示时,将所述读请求的多个出错信息添加到多个第一纠错链表中;
根据所述多个第一纠错链表中的出错信息,并行进行纠错;
所述将所述读请求的多个出错信息添加到多个第一纠错链表中,包括:
确定每个出错信息所在的裸片Die;
对于所述每个出错信息,根据所述出错信息所在的Die,将所述出错信息添加到所述Die对应的纠错链表中。
2.根据权利要求1所述的方法,其特征在于,所述根据所述多个第一纠错链表中的出错信息,并行进行纠错,包括:
对第一个第一纠错链表的出错信息进行纠错;
在纠错过程中,对所述多个第一纠错链表中其他第一纠错链表中的出错信息并行进行纠错。
3.根据权利要求2所述的方法,其特征在于,所述对第一个第一纠错链表的出错信息进行纠错,包括:
根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列,所述第一纠错方法序列包括至少一个纠错方法;
通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错;
当对所述表头中的出错信息纠错成功,或者通过所述第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除所述表头中的出错信息;
将所述第一个第一纠错链表中表头之后的下一个出错信息,添加到所述表头中,然后执行所述根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列的步骤,直到对所述第一个第一纠错链表中的最后一个出错信息纠错结束为止。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列,包括:
确定所述表头中的出错信息的错误类型;
根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列。
5.根据权利要求4所述的方法,其特征在于,所述根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列之前,所述方法还包括:
获取所述闪存存储器上一次发生数据出错时出错块Block中出错信息的第一出错个数;
获取当前发生数据出错时所述出错Block中出错信息的第二出错个数;
相应的,所述根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列,包括:
根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述第一纠错方法序列。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一出错个数、所述第二出错个数、所述错误类型和所述多个纠错方法,确定所述第一纠错方法序列,包括:
当所述第二出错个数不大于所述第一出错个数时,根据所述错误类型以及错误类型和纠错方法序列的对应关系,从多个纠错方法序列中选择与所述错误类型对应的第一纠错方法序列。
7.根据权利要求3所述的方法,其特征在于,所述第一纠错方法序列包括读重试ReadRetry纠错方法;
所述通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错,包括:
从第一重试表中选择一第一偏移电压值,基于所述Read Retry纠错方法的参考电压值和选择的第一偏移电压值对所述表头中的出错信息进行纠错;
当通过所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述表头中的出错信息纠错成功时,从第二重试表中选择一第二偏移电压值,通过所述参考电压值和选择的第二偏移电压值对所述表头中的出错信息进行纠错。
8.根据权利要求3或7所述的方法,其特征在于,所述第一纠错方法序列还包括校准Calibration纠错方法;
所述通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错,包括:
根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述第一个出错信息的电压调节范围;
从所述电压调节范围中确定第三电压值;
根据所述第三电压值,对所述表头中的出错信息进行纠错。
9.根据权利要求3所述的方法,其特征在于,所述方法还包括:
将通过所述第一纠错方法序列纠错失败的多个出错信息添加到第二纠错链表中;
通过第二纠错方法序列,对所述第二纠错链表中的出错信息进行逐一纠错,所述第二纠错方法序列包括至少一个纠错方法。
10.根据权利要求9所述的方法,其特征在于,所述第二纠错方法序列包括软件低密度校验码SLDPC纠错方法和独立冗余磁盘阵列RAID纠错方法;
所述通过第二纠错方法序列,对所述第二纠错链表中的出错信息进行逐一纠错,包括:
在当前第一时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述SLDPC纠错方法,对所述第二纠错链表中的出错信息进行逐一纠错;
对于当前通过所述SLDPC纠错方法纠错失败的出错信息,当在当前第二时间没有通过所述SLDPC纠错方法和所述RAID纠错方法进行纠错时,通过所述RAID纠错方法,对通过所述SLDPC纠错方法纠错失败的出错信息进行纠错。
11.一种闪存纠错装置,其特征在于,所述装置包括:
接收模块,用于接收读请求,所述读请求携带闪存存储器的第一位置的位置标识,用于请求读取所述第一位置上存储的数据;
添加模块,用于当接收到所述闪存存储器返回的错误指示时,将所述读请求的多个出错信息添加到多个第一纠错链表中;
纠错模块,用于根据所述多个第一纠错链表中的出错信息,并行进行纠错;
所述添加模块,还用于确定每个出错信息所在的裸片Die;对于每个出错信息,根据所述出错信息所在的Die,将所述出错信息添加到所述Die对应的纠错链表中。
12.根据权利要求11所述的装置,其特征在于,所述纠错模块,还用于对第一个第一纠错链表的出错信息进行纠错;在纠错过程中,对所述多个第一纠错链表中其他第一纠错链表中的出错信息并行进行纠错。
13.根据权利要求12所述的装置,其特征在于,所述纠错模块,还用于根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列,所述第一纠错方法序列包括至少一个纠错方法;通过所述第一纠错方法序列,对所述表头中的出错信息进行纠错;当对所述表头中的出错信息纠错成功,或者通过所述第一纠错方法序列中的最后一个纠错方法进行纠错结束时,删除所述表头中的出错信息;将所述第一个第一纠错链表中表头之后的下一个出错信息,添加到所述表头中,然后执行所述根据所述第一个第一纠错链表的表头中的出错信息,确定所述表头中的出错信息的第一纠错方法序列的步骤,直到对所述第一个第一纠错链表中的最后一个出错信息纠错结束为止。
14.根据权利要求13所述的装置,其特征在于,所述纠错模块,还用于确定所述表头中的出错信息的错误类型;根据所述错误类型和多个纠错方法,确定所述错误类型对应的所述第一纠错方法序列。
15.根据权利要求13所述的装置,其特征在于,所述第一纠错方法序列包括读重试ReadRetry纠错方法;所述纠错模块,还用于从第一重试表中选择一第一偏移电压值,基于所述Read Retry纠错方法的参考电压值和选择的第一偏移电压值对所述表头中的出错信息进行纠错;当通过所述参考电压值和所述第一重试表中的每个第一偏移电压值均不能对所述表头中的出错信息纠错成功时,从第二重试表中选择一第二偏移电压值,通过所述参考电压值和选择的第二偏移电压值对所述表头中的出错信息进行纠错;
所述第一纠错方法序列还包括校准Calibration纠错方法;所述纠错模块,还用于根据所述Calibration纠错方法的参考电压值和第一偏移间隔确定所述第一个出错信息的电压调节范围;从所述电压调节范围中确定第三电压值;根据所述第三电压值,对所述表头中的出错信息进行纠错。
CN201910351203.8A 2019-04-28 2019-04-28 闪存纠错方法及装置 Active CN111863106B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910351203.8A CN111863106B (zh) 2019-04-28 2019-04-28 闪存纠错方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910351203.8A CN111863106B (zh) 2019-04-28 2019-04-28 闪存纠错方法及装置

Publications (2)

Publication Number Publication Date
CN111863106A CN111863106A (zh) 2020-10-30
CN111863106B true CN111863106B (zh) 2022-08-05

Family

ID=72965290

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910351203.8A Active CN111863106B (zh) 2019-04-28 2019-04-28 闪存纠错方法及装置

Country Status (1)

Country Link
CN (1) CN111863106B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1627426A (zh) * 1998-02-25 2005-06-15 松下电器产业株式会社 纠错装置和纠错方法
EP2285003A1 (en) * 2009-08-12 2011-02-16 Alcatel Lucent Correction of errors in a codeword

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010064286A1 (ja) * 2008-12-01 2010-06-10 富士通株式会社 制御回路、情報処理装置及び情報処理装置の制御方法
TWI436211B (zh) * 2011-11-02 2014-05-01 Phison Electronics Corp 區塊管理方法、記憶體控制器與記憶體儲存裝置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1627426A (zh) * 1998-02-25 2005-06-15 松下电器产业株式会社 纠错装置和纠错方法
EP2285003A1 (en) * 2009-08-12 2011-02-16 Alcatel Lucent Correction of errors in a codeword

Also Published As

Publication number Publication date
CN111863106A (zh) 2020-10-30

Similar Documents

Publication Publication Date Title
KR100681429B1 (ko) 반도체 메모리 장치 및 그것의 비트 에러 검출 방법
JP5529751B2 (ja) メモリアレイにおけるエラー訂正
US11086716B2 (en) Memory controller and method for decoding memory devices with early hard-decode exit
CN111143107B (zh) 一种fpga单粒子反转校验电路和方法
US20190220348A1 (en) Memory system and control method
CN111078662A (zh) 一种区块链数据存储方法与装置
US9548761B2 (en) Coding and decoding of error correcting codes
CN111863107B (zh) 闪存纠错方法及装置
US20240184665A1 (en) Data processing method and apparatus
CN109766214A (zh) 一种最优h矩阵生成方法及装置
CN111863106B (zh) 闪存纠错方法及装置
CN106250193B (zh) 一种基于nand存储器的***启动方法及***
KR20190074678A (ko) 메모리 시스템 및 그의 동작 방법
CN113168882B (zh) 一种编码方法、译码方法以及存储控制器
US20200389187A1 (en) Method of training artificial intelligence to execute decoding program of low density parity check code
JP2013131095A (ja) メモリコントローラ、記憶装置およびメモリ制御方法
CN110896309A (zh) Turbo乘积码的译码方法、装置、译码器及计算机存储介质
CN110011670B (zh) 基于ssd数据保护的ldpc译码方法和装置
CN114220474A (zh) 一种数据处理方法、设备及存储介质
KR20200120524A (ko) 메모리 시스템 및 메모리의 동작 방법
US20240232002A9 (en) Method and apparatus for storing blockchain data based on error correction code
US20240134739A1 (en) Method and apparatus for storing blockchain data based on error correction code
US20240106462A1 (en) G-ldpc decoder and g-ldpc decoding method
CN116662063B (zh) 一种闪存的纠错配置方法、纠错方法、***、设备及介质
US12034457B2 (en) Memory, memory module, memory system, and operation method of memory system

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