CN105740088B - 闪存数据纠错方法及装置 - Google Patents

闪存数据纠错方法及装置 Download PDF

Info

Publication number
CN105740088B
CN105740088B CN201610045792.3A CN201610045792A CN105740088B CN 105740088 B CN105740088 B CN 105740088B CN 201610045792 A CN201610045792 A CN 201610045792A CN 105740088 B CN105740088 B CN 105740088B
Authority
CN
China
Prior art keywords
data
error correction
data block
read
row
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
CN201610045792.3A
Other languages
English (en)
Other versions
CN105740088A (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.)
SHENZHEN SILICONGO MICROELECTRONICS CO Ltd
Original Assignee
SHENZHEN SILICONGO MICROELECTRONICS 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 SHENZHEN SILICONGO MICROELECTRONICS CO Ltd filed Critical SHENZHEN SILICONGO MICROELECTRONICS CO Ltd
Priority to CN201610045792.3A priority Critical patent/CN105740088B/zh
Publication of CN105740088A publication Critical patent/CN105740088A/zh
Application granted granted Critical
Publication of CN105740088B publication Critical patent/CN105740088B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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

闪存数据纠错方法及装置
技术领域
本发明涉及技术存储设备领域,尤其涉及一种闪存数据纠错方法及装置。
背景技术
现有技术在存储闪存数据时,会将待存储的闪存数据经过ECC(Error CorrectingCode,错误检查和纠正)模块进行编码,得到待存储的闪存数据的校验数据,然后将待存储的闪存数据及校验数据存储到闪存中,然而闪存里的数据由于物理存储介质的某些特性,会导致存储在闪存上的某个页的某部分区域的数据出现了较多bit(位)的错误,该出现的错误位数超过了存储的校验数据所能纠正的范围,使得该数据在经过ECC模块进行解码后,依然无法完成数据的纠错,此时,数据将出错而无法挽回、恢复,因此,现有的使用一个校验数据的纠错方法对闪存数据的恢复率较低。
发明内容
本发明的主要目的在于提供一种闪存数据纠错方法及装置,旨在提高闪存数据的恢复率。
为实现上述目的,本发明提供的一种闪存数据纠错方法,所述闪存数据纠错方法包括以下步骤:
获取待读取数据块的行校验数据;
采用所述行校验数据对所述待读取数据块进行纠错处理,并获取纠错处理结果;
若纠错失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理。
可选地,所述闪存数据纠错方法还包括:
在接收到数据存储指令时,对待存储数据块进行编码以得到所述待存储数据块的行校验数据;
存储所述待存储数据块及所述行校验数据;
在已存储的数据占用闪存设备的物理块的预设个物理页时,将所述预设个物理页中相同位置的预设个字节的数据组合成数据块;
对所述数据块进行编码以得到所述数据块的列校验数据;
存储所述列校验数据。
可选地,所述采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理的步骤包括:
获取所述待读取数据块对应的列校验数据,其中,所述待读取数据块对应的列校验数据存在多个;
按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行纠错处理,并获取纠错处理结果;
若纠错成功,则将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上;
采用所述行校验数据对填充后的所述待读取数据块进行纠错处理,并获取纠错处理结果;
若纠错失败,则按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
可选地,所述采用获取的所述列校验数据中的其中一个列校验数据对其对应的数据块进行纠错处理,并获取纠错处理结果的步骤之后,还包括:
若纠错失败,则执行按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理的步骤。
可选地,所述采用所述行校验数据对所述待读取数据块进行纠错处理的步骤之前,还包括:
在接收到数据读取指令时,判断所述待读取数据块中是否存在错误位;
若存在,则执行所述采用所述行校验数据对所述待读取数据块进行纠错处理的步骤。
此外,为实现上述目的,本发明还提供一种闪存数据纠错装置,所述闪存数据纠错装置包括:
获取模块,用于获取待读取数据块的行校验数据;
纠错模块,用于采用所述行校验数据对所述待读取数据块进行纠错处理,并获取纠错处理结果;
所述纠错模块,还用于若纠错失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理。
可选地,所述闪存数据纠错装置还包括:
编码模块,用于在接收到数据存储指令时,对待存储数据块进行编码以得到所述待存储数据块的行校验数据;
存储模块,用于存储所述待存储数据块及所述行校验数据;
组合模块,用于在已存储的数据占用闪存设备的物理块的预设个物理页时,将所述预设个物理页中相同位置的预设个字节的数据组合成数据块;
所述编码模块,还用于对所述数据块进行编码以得到所述数据块的列校验数据;
所述存储模块,还用于存储所述列校验数据。
可选地,所述纠错模块包括:
获取单元,用于获取所述待读取数据块对应的列校验数据,其中,所述待读取数据块对应的列校验数据存在多个;
纠错单元,用于按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行纠错处理,并获取纠错处理结果;
填充单元,用于若纠错成功,则将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上;
所述纠错单元,还用于采用所述行校验数据对填充后的所述待读取数据块进行纠错处理,并获取纠错处理结果,以及若纠错失败,则按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
可选地,所述纠错单元,还用于若采用获取的所述列校验数据中的其中一个列校验数据对其对应的数据块进行纠错失败,则按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
可选地,所述闪存数据纠错装置还包括:
判断模块,用于在接收到数据读取指令时,判断所述待读取数据块中是否存在错误位;
所述纠错模块,还用于若存在错误位,则采用所述行校验数据对所述待读取数据块进行纠错处理。
本发明通过在接收到数据读取指令时,首先采用待读取数据块的行校验数据进行纠错处理,并在采用所述行校验数据对所述待读取数据块纠错失败后,使用所述待读取数据块对应的列校验数据进行纠错处理,然后结合所述行校验数据对所述待读取数据进行纠错处理,从而恢复出所述待读取数据的原始数据,增加了闪存存储设备所能纠正的错误位数,提高了闪存数据的恢复率。
附图说明
图1为本发明闪存数据纠错方法的第一实施例的流程示意图;
图2为本发明闪存数据纠错方法的第二实施例的流程示意图;
图3为图1中采用待读取数据块对应的列校验数据和行校验数据进行纠错处理的步骤细化流程示意图;
图4为本发明闪存数据纠错方法的第三实施例的流程示意图;
图5为本发明闪存数据的编码与存储示意图;
图6为本发明闪存数据纠错装置的第一实施例的功能模块示意图;
图7为本发明闪存数据纠错装置的第二实施例的功能模块示意图;
图8为图6中纠错模块的细化功能模块示意图;
图9为本发明闪存数据纠错装置的第三实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
基于上述问题,本发明提供一种闪存数据纠错方法。
参照图1,图1为本发明闪存数据纠错方法的第一实施例的流程示意图。
在本实施例中,所述闪存数据纠错方法包括:
步骤S10,获取待读取数据块的行校验数据;
在本实施例中,所述数据读取指令可以通过双击待读取数据对应的文件触发数据读取指令,闪存设备在接收到数据读取指令时,获取所述待读取数据块的行校验数据,以通过所述行校验数据确定所述待读取数据块是否存在错误位及在确定所述待读取数据块存在错误位时,使用所述行校验数据对所述待读取数据块进行纠错处理。需要说明的是,所述行校验数据为对待存储数据块进行编码所得到的校验数据,所述待存储数据块一般为1K字节的数据,也可以为其他大小的数据,比如512字节的数据,2K字节的数据等。具体的,通过ECC模块对所述待存储数据块进行编码,以生成所述待存储数据块的行校验数据,在进行编码的过程中所使用的编码算法可以为RS算法、BCH算法等。
步骤S20,采用所述行校验数据对所述待读取数据块进行纠错处理,并获取纠错处理结果;
在获取到所述待读取数据块的行校验数据后,采用所述行校验数据对所述待读取数据块进行纠错处理,所述纠错处理为通过所述行校验数据恢复所述待读取数据块中的错误位处理过程。由于所述行校验数据对所述待存储数据块中的错位位数预先已经确定,假设所述行校验数据的纠错位数为30位(bit),故在使用所述行校验数据对所述待读取数据块进行纠错时,可能纠错成功也可能失败。具体的,若所述待读取数据块中的错误位数大于所述行校验数据能纠正的错误位数,即所述待读取数据块中的错误位数大于30位,则采用该行校验数据不能将所述待读取数据块中的错误数据纠正过来,纠错失败,保持所述待读取数据块中的数据不变;若所述待读取数据块中的错误位数小于或等于所述行校验数据能纠正的错误位数,即所述待读取数据块中的错误位数不大于30位,则采用该行校验数据可以将所述待读取数据块中的错误数据都纠正过来,纠错成功。在对所述待读取数据块进行纠错处理后,获取该纠错处理的结果,以便确定是否还需使用所述待读取数据块对应的列校验数据进行纠错处理。
步骤S30,若纠错失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理。
所述列校验数据为闪存设备的物理块中的各个物理页中相同位置的预设个字节的数据组合成数据块后,经过所述ECC模块编码后所生成的校验数据,所述预设个字节可以为1个字节、2个字节、4个字节、8个字节、16个字节等,需要说明的是,由于不同型号的存储设备的物理页的大小不同使得其可存储的数据块个数不同,物理页中存储的数据块的个数可以为2个、4个、8个等。
若采用所述行校验数据对所述待读取数据块校验失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理。具体的,在采用所述行校验数据对所述待读取数据块纠错失败后,采用所述待读取数据块对应的列校验数据对所述待读取数据块进行纠错处理,由于所述待读取数据块对应的列校验数据存在多个,在采用所述待读取数据块对应的列校验数据进行纠错处理时,可以按照生成所述列校验数据的顺序依次采用所述列校验数据进行纠错处理,若当前获取的列校验数据对其对应的数据块纠错成功,则将所述列校验数据对应的数据块中属于所述待读取数据块中的数据填充到所述待读取数据块对应的位置中,然后采用所述行校验数据再次对所述待读取数据块进行纠错处理,若当前获取的列校验数据对其对应的数据块纠错失败,则采用所述待读取数据对应的下一个列校验数据对其对应的数据块纠错处理,若纠错成功,则将该列校验数据对应的数据块中属于所述待读取数据块中的数据填充到所述待读取数据块对应的位置中,然后采用所述行校验数据再次对所述待读取数据块进行纠错处理,即通过使用所述待读取数据块对应的列校验数据对其列校验数据对应的数据块进行纠错处理,以确定所述待读取数据块中的部分数据,然后通过所述行校验数据对确定部分数据的所述待读取数据块进行纠错处理,直到读取出所述待读取数据块的原始数据为止。
本实施例通过在接收到数据读取指令时,首先采用待读取数据块的行校验数据进行纠错处理,并在采用所述行校验数据对所述待读取数据块纠错失败后,使用所述待读取数据块对应的列校验数据进行纠错处理,然后结合所述行校验数据对所述待读取数据进行纠错处理,从而恢复出所述待读取数据的原始数据,增加了闪存存储设备所能纠正的错误位数,提高了闪存数据的恢复率。
进一步地,基于上述第一实施例提出本发明闪存数据纠错方法的第二实施例,参照图2,在本实施例中,所述闪存数据纠错方法还包括:
步骤S40,在接收到数据存储指令时,对待存储数据块进行编码以得到所述待存储数据块的行校验数据;
步骤S50,存储所述待存储数据块及所述行校验数据;
一般在使用闪存设备存储数据时,闪存设备的一个物理页会被拆分为多个单元数据块进行数据存储,比如将1024个字节的基本数据作为一个数据块,然后经过ECC模块,会生成具有X bit纠错能力的ECC编码数据流,将编码后的这个数据流,称为1个基本ECC编码数据块,因此,闪存设备在接收到数据存储指令时,一般会将所述待存储数据进行分块,然后对分块后的各个待存储数据块进行编码以得到所述待存储数据块的行校验数据,在获取到所述待存储数据块的行校验数据后,存储所述待存储数据块及其行校验数据。
步骤S60,在已存储的数据占用闪存设备的物理块的预设个物理页时,将所述预设个物理页中相同位置的预设个字节的数据组合成数据块;
步骤S70,对所述数据块进行编码以得到所述数据块的列校验数据;
步骤S80,存储所述列校验数据。
闪存设备的存储介质的组织方式一般为多个字节构成一个物理页(page),多个物理页(page)构成一个物理块(block),一个物理块通常包括32、64、128个物理页,一个物理页中通常可存储1、2、4、8个数据块。在本实施例中,在已存储的数据占用闪存设备的物理块的预设个物理页时,将物理块的预设个物理页中相同位置的预设个字节的数据组合成数据块。具体的,以物理页大小为8K的闪存设备为例,该物理页具有9132个字节的存储空间,可以存储8个1KB的数据块及具有72bit纠错能力的ECC编码数据块,其中每个编码数据块大小为1024+117=1141Bytes,117个字节为数据块的校验数据。将物理页中存储的所述1KB的数据块分为预设个等分的数据,例如分为64个等分,每个等分包含有16字节的数据,即所述预设个字节的数据为16字节的数据,则8K大小的物理页中存储的数据总共可分为64*8=512等分,在将闪存设备中物理块中的预设个物理页中存储的数据分为512等分后,需要说明的是,上述物理页中数据划分的等分不做限定。由于每个物理页中存储的数据被分为512等分,因此,所述预设个物理页中相同位置的数据组合成的数据块共有512个,在组合成数据块后,对数据块进行编码,从而得到所述数据块的校验数据,并把所述得到的校验数据称为列校验数据,在获取到所述数据块的列校验数据后,将所述列校验数据存储与该物理块的物理页中,具体的,参照图5,从物理块中选择预设个物理页用于存储各个物理页中数据组成的数据块的列校验数据,所述预设个物理页可以根据每个组合的数据块生成的列校验数据所具有的字节数确定,例如,所述列校验数据具有64个字节,则所述预设个物理页为:(64*512)/8K=4,即需要4个物理页用于存储待存储数据块的列校验数据,其它的物理页则用于存储待存储数据的原始数据及其行校验数据。
本实施例通过存储待存储数据块行校验数据及其对应的列校验数据,而所述行校验数据及列校验数据能纠正的数据具有重叠,因此,可以在行校验数据不能纠正其要纠正的数据块时,可以通过列校验数据将其与行校验数据纠正的数据块所重叠的数据纠正过来,从而提高闪存设备的纠错能力。
进一步地,基于上述第一实施例提出本发明闪存数据纠错方法的第三实施例,参照图3,在本实例中,所述采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理的步骤包括:
步骤S31,获取所述待读取数据块对应的列校验数据;
步骤S32,按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行纠错处理,并获取纠错处理结果;
具体的,在使用行校验数据对待读取数据块纠错失败后,通过获取所述待读取数据块对应的列校验数据,其中,所述待读取数据块对应的列校验数据存在多个,在获取到所述待读取数据块对应的列校验数据后,按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行纠错处理,若纠错成功,则执行步骤S33,若纠错失败,则执行步骤S35。
步骤S33,将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上;
步骤S34,采用所述行校验数据对填充后的所述待读取数据块进行纠错处理,并获取纠错处理结果;
当采用所述待读取数据块对应的列校验数据中的其中一个列校验数据成功完成纠错时,将该列校验数据对应的数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上,然后在通过行校验数据对填充后的所述待读取数据块进行纠错处理,若纠错成功,则读取所述所述待读取数据块的原始数据,若纠错失败,则执行步骤S35。
步骤S35,按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
在按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理后,若纠错成功,则执行步骤S34,若纠错失败,则继续执行步骤S35。
本实施例通过行校验数据与列校验数据交替校验的方式对所述待读取数据块进行纠错处理,提高了闪存设备的纠错能力。
进一步地,基于上述任一实施例提出本发明闪存数据纠错方法的第四实施例,参照图4,在本实施例中,所述步骤S20之前,还包括:
步骤S90,在接收到数据读取指令时,判断所述待读取数据块中是否存在错误位;
由于所述待读取数据块中可能存在错误位,也可能不存在错误位,为了避免在所述待读取数据块中在不存在错误位时,也进入数据块的纠错处理流程,故在接收到数据读取指令时,可以先判断所述待读取数据块中是否存在错误位,具体的,可以通过对所述待读取块进行编码得到该数据块的校验数据,然后将所述校验数据与获取到的所述行校验数据进行比较,若该两个校验数据相同,则说明所述待读取数据块中不存在错误位,若该两个校验数据不同,则说明所述待读取数据块中存在错误位,执行步骤S10。
本实施例通过对待读取数据块中是否存在错误位进行判断,若所述待读取数据块中不存在错误位,则直接读取出所述待读取数据块中的原始数据,而不需要进行数据块的纠错处理过程,从而提高了数据的读写速度。
本发明进一步提供一种闪存数据纠错装置。
参照图6,图6为本发明闪存数据纠错装置的第一实施例的功能模块示意图。
在本实施例中,所述闪存数据纠错装置包括:获取模块10及纠错模块20。
所述获取模块10,用于获取待读取数据块的行校验数据;
在本实施例中,所述数据读取指令可以通过双击待读取数据对应的文件触发数据读取指令,闪存设备在接收到数据读取指令时,获取所述待读取数据块的行校验数据,以通过所述行校验数据确定所述待读取数据块是否存在错误位及在确定所述待读取数据块存在错误位时,使用所述行校验数据对所述待读取数据块进行纠错处理。需要说明的是,所述行校验数据为对待存储数据块进行编码所得到的校验数据,所述待存储数据块一般为1K字节的数据,也可以为其他大小的数据,比如512字节的数据,2K字节的数据等。具体的,通过ECC模块对所述待存储数据块进行编码,以生成所述待存储数据块的行校验数据,在进行编码的过程中所使用的编码算法可以为RS算法、BCH算法等。
所述纠错模块20,用于采用所述行校验数据对所述待读取数据块进行纠错处理,并获取纠错处理结果;
在获取到所述待读取数据块的行校验数据后,采用所述行校验数据对所述待读取数据块进行纠错处理,所述纠错处理为通过所述行校验数据恢复所述待读取数据块中的错误位处理过程。由于所述行校验数据对所述待存储数据块中的错位位数预先已经确定,假设所述行校验数据的纠错位数为30位(bit),故在使用所述行校验数据对所述待读取数据块进行纠错时,可能纠错成功也可能失败。具体的,若所述待读取数据块中的错误位数大于所述行校验数据能纠正的错误位数,即所述待读取数据块中的错误位数大于30位,则采用该行校验数据不能将所述待读取数据块中的错误数据纠正过来,纠错失败,保持所述待读取数据块中的数据不变;若所述待读取数据块中的错误位数小于或等于所述行校验数据能纠正的错误位数,即所述待读取数据块中的错误位数不大于30位,则采用该行校验数据可以将所述待读取数据块中的错误数据都纠正过来,纠错成功。在对所述待读取数据块进行纠错处理后,获取该纠错处理的结果,以便确定是否还需使用所述待读取数据块对应的列校验数据进行纠错处理。
所述纠错模块20,还用于若纠错失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理。
所述列校验数据为闪存设备的物理块中的各个物理页中相同位置的预设个字节的数据组合成数据块后,经过所述ECC模块编码后所生成的校验数据,所述预设个字节可以为1个字节、2个字节、4个字节、8个字节、16个字节等,需要说明的是,由于不同型号的存储设备的物理页的大小不同使得其可存储的数据块个数不同,物理页中存储的数据块的个数可以为2个、4个、8个等。
若采用所述行校验数据对所述待读取数据块校验失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理。具体的,在采用所述行校验数据对所述待读取数据块纠错失败后,采用所述待读取数据块对应的列校验数据对所述待读取数据块进行纠错处理,由于所述待读取数据块对应的列校验数据存在多个,在采用所述待读取数据块对应的列校验数据进行纠错处理时,可以按照生成所述列校验数据的顺序依次采用所述列校验数据进行纠错处理,若当前获取的列校验数据对其对应的数据块纠错成功,则将所述列校验数据对应的数据块中属于所述待读取数据块中的数据填充到所述待读取数据块对应的位置中,然后采用所述行校验数据再次对所述待读取数据块进行纠错处理,若当前获取的列校验数据对其对应的数据块纠错失败,则采用所述待读取数据对应的下一个列校验数据对其对应的数据块纠错处理,若纠错成功,则将该列校验数据对应的数据块中属于所述待读取数据块中的数据填充到所述待读取数据块对应的位置中,然后采用所述行校验数据再次对所述待读取数据块进行纠错处理,即通过使用所述待读取数据块对应的列校验数据对其列校验数据对应的数据块进行纠错处理,以确定所述待读取数据块中的部分数据,然后通过所述行校验数据对确定部分数据的所述待读取数据块进行纠错处理,直到读取出所述待读取数据块的原始数据为止。
本实施例通过在接收到数据读取指令时,首先采用待读取数据块的行校验数据进行纠错处理,并在采用所述行校验数据对所述待读取数据块纠错失败后,使用所述待读取数据块对应的列校验数据进行纠错处理,然后结合所述行校验数据对所述待读取数据进行纠错处理,从而恢复出所述待读取数据的原始数据,增加了闪存存储设备所能纠正的错误位数,提高了闪存数据的恢复率。
进一步地,基于上述第一实施例提出本发明闪存数据纠错装置的第二实施例,参照图7,在本实施例中,所述闪存数据纠错装置还包括编码模块30、存储模块40及组合模块50。
所述编码模块30,用于在接收到数据存储指令时,对待存储数据块进行编码以得到所述待存储数据块的行校验数据;
所述存储模块40,用于存储所述待存储数据块及所述行校验数据。
一般在使用闪存设备存储数据时,闪存设备的一个物理页会被拆分为多个单元数据块进行数据存储,比如将1024个字节的基本数据作为一个数据块,然后经过ECC模块,会生成具有X bit纠错能力的ECC编码数据流,将编码后的这个数据流,称为1个基本ECC编码数据块,因此,闪存设备在接收到数据存储指令时,一般会将所述待存储数据进行分块,然后对分块后的各个待存储数据块进行编码以得到所述待存储数据块的行校验数据,在获取到所述待存储数据块的行校验数据后,存储所述待存储数据块及其行校验数据。
所述组合模块50,用于在已存储的数据占用闪存设备的物理块的预设个物理页时,将所述预设个物理页中相同位置的预设个字节的数据组合成数据块;
所述编码模块30,还用于对所述数据块进行编码以得到所述数据块的列校验数据;
所述储存模块40,还用于存储所述列校验数据。
闪存设备的存储介质的组织方式一般为多个字节构成一个物理页(page),多个物理页(page)构成一个物理块(block),一个物理块通常包括32、64、128个物理页,一个物理页中通常可存储1、2、4、8个数据块。在本实施例中,在已存储的数据占用闪存设备的物理块的预设个物理页时,将物理块的预设个物理页中相同位置的预设个字节的数据组合成数据块。具体的,以物理页大小为8K的闪存设备为例,该物理页具有9132个字节的存储空间,可以存储8个1KB的数据块及具有72bit纠错能力的ECC编码数据块,其中每个编码数据块大小为1024+117=1141Bytes,117个字节为数据块的校验数据。将物理页中存储的所述1KB的数据块分为预设个等分的数据,例如分为64个等分,每个等分包含有16字节的数据,即所述预设个字节的数据为16字节的数据,则8K大小的物理页中存储的数据总共可分为64*8=512等分,在将闪存设备中物理块中的预设个物理页中存储的数据分为512等分后,需要说明的是,上述物理页中数据划分的等分不做限定。由于每个物理页中存储的数据被分为512等分,因此,所述预设个物理页中相同位置的数据组合成的数据块共有512个,在组合成数据块后,对数据块进行编码,从而得到所述数据块的校验数据,并把所述得到的校验数据称为列校验数据,在获取到所述数据块的列校验数据后,将所述列校验数据存储与该物理块的物理页中,具体的,参照图5,从物理块中选择预设个物理页用于存储各个物理页中数据组成的数据块的列校验数据,所述预设个物理页可以根据每个组合的数据块生成的列校验数据所具有的字节数确定,例如,所述列校验数据具有64个字节,则所述预设个物理页为:(64*512)/8K=4,即需要4个物理页用于存储待存储数据块的列校验数据,其它的物理页则用于存储待存储数据的原始数据及其行校验数据。
本实施例通过存储待存储数据块行校验数据及其对应的列校验数据,而所述行校验数据及列校验数据能纠正的数据具有重叠,因此,可以在行校验数据不能纠正其要纠正的数据块时,可以通过列校验数据将其与行校验数据纠正的数据块所重叠的数据纠正过来,从而提高闪存设备的纠错能力。
进一步地,基于上述第一实施例提出本发明闪存数据纠错方法的第三实施例,参照图8,在本实例中,所述纠错模块20包括:获取单元21、纠错单元22及填充单元23。
所述获取单元21,用于获取所述待读取数据块对应的列校验数据;
所述纠错单元22,用于按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行纠错处理,并获取纠错处理结果;
具体的,在使用行校验数据对待读取数据块纠错失败后,通过获取所述待读取数据块对应的列校验数据,其中,所述待读取数据块对应的列校验数据存在多个,在获取到所述待读取数据块对应的列校验数据后,按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行纠错处理,若纠错成功,则将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上,若纠错失败,则按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
所述填充单元23,用于将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上;
所述纠错单元22,还用于采用所述行校验数据对填充后的所述待读取数据块进行纠错处理,并获取纠错处理结果;
当按顺序采用获取的多个所述列校验数据中的首个列校验数据成功完成纠错时,将该列校验数据对应的数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上,然后在通过行校验数据对填充后的所述待读取数据块进行纠错处理,若纠错成功,则读取所述所述待读取数据块的原始数据,若纠错失败,则按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
所述纠错单元22,还用于按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
在按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理后,若纠错成功,则采用所述行校验数据对填充后的所述待读取数据块进行纠错处理,并获取纠错处理结果,若纠错失败,则继续采用按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
本实施例通过行校验数据与列校验数据交替校验的方式对所述待读取数据块进行纠错处理,提高了闪存设备的纠错能力。
进一步地,基于上述任一实施例提出本发明闪存数据纠错装置的第四实施例,参照图9,在本实施例中,所述闪存数据纠错装置还包括:判断模块60。
所述判断模块60,用于在接收到数据读取指令时,判断所述待读取数据块中是否存在错误位;
由于所述待读取数据块中可能存在错误位,也可能不存在错误位,为了避免在所述待读取数据块中在不存在错误位时,也进入数据块的纠错处理流程,故在接收到数据读取指令时,可以先判断所述待读取数据块中是否存在错误位,具体的,可以通过对所述待读取块进行编码得到该数据块的校验数据,然后将所述校验数据与获取到的所述行校验数据进行比较,若该两个校验数据相同,则说明所述待读取数据块中不存在错误位,若该两个校验数据不同,则说明所述待读取数据块中存在错误位,然后采用所述行校验数据对所述待读取数据块进行纠错处理。
本实施例通过对待读取数据块中是否存在错误位进行判断,若所述待读取数据块中不存在错误位,则直接读取出所述待读取数据块中的原始数据,而不需要进行数据块的纠错处理过程,从而提高了数据的读写速度。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种闪存数据纠错方法,其特征在于,所述闪存数据纠错方法包括以下步骤:
获取待读取数据块的行校验数据,并通过所述行校验数据确定所述待读取数据块中是否存在错误位;
在所述待读取数据存在错误位时,采用所述行校验数据对所述待读取数据块进行行纠错处理;
若所述待读取数据块中的错误位数大于所述行校验数据能纠正的错误位数,则确定所述行纠错处理纠错失败;
若所述行纠错处理纠错失败,则采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理;
其中,所述采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理的步骤包括:
采用所述待读取数据块对应的列校验数据对所述列校验数据对应的数据块进行列纠错处理,并在所述列纠错处理纠错成功时,将所述列校验数据对应的数据块中属于所述待读取数据块中的数据填充至所述待读取数据块对应的位置,采用所述行校验数据对填充后的待读取数据块进行行纠错处理。
2.如权利要求1所述的闪存数据纠错方法,其特征在于,所述闪存数据纠错方法还包括:
在接收到数据存储指令时,对待存储数据块进行编码以得到所述待存储数据块的行校验数据;
存储所述待存储数据块及所述行校验数据;
在已存储的数据占用闪存设备的物理块的预设个物理页时,将所述预设个物理页中相同位置的预设个字节的数据组合成数据块;
对所述数据块进行编码以得到所述数据块的列校验数据;
存储所述列校验数据。
3.如权利要求1所述的闪存数据纠错方法,其特征在于,所述采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理的步骤包括:
获取所述待读取数据块对应的列校验数据,其中,所述待读取数据块对应的列校验数据存在多个;
按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行列纠错处理,并获取列纠错处理结果;
若所述列纠错处理结果为纠错成功,则将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上,并采用所述行校验数据对填充后的所述待读取数据块进行行纠错处理,获取行纠错处理结果;
若所述列纠错处理结果为纠错失败,则按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
4.如权利要求3所述的闪存数据纠错方法,其特征在于,所述采用所述行校验数据对填充后的所述待读取数据块进行行纠错处理,获取行纠错处理结果的步骤之后,还包括:
若所述行纠错处理结果为纠错失败,则执行所述按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理的步骤。
5.如权利要求1至4任一项所述的闪存数据纠错方法,其特征在于,所述通过所述行校验数据确定所述待读取数据块中是否存在错误位的步骤之前,还包括:
在接收到数据读取指令时,执行通过所述行校验数据确定所述待读取数据块中是否存在错误位的步骤。
6.一种闪存数据纠错装置,其特征在于,所述闪存数据纠错装置包括:
获取模块,用于获取待读取数据块的行校验数据,并通过所述行校验数据确定所述待读取数据块中是否存在错误位;
行纠错模块,用于在所述待读取数据存在错误位时,采用所述行校验数据对所述待读取数据块进行纠错处理;
行纠错确定模块,用于在所述待读取数据块中的错误位数大于所述行校验数据能纠正的错误位数时,确定所述行纠错处理纠错失败;
行列纠错模块:用于在所述行纠错处理纠错失败时,采用所述待读取数据块对应的列校验数据和所述行校验数据进行纠错处理;
其中,行列纠错模块包括:
行列纠错单元,用于在所述行纠错处理纠错失败时,采用所述待读取数据块对应的列校验数据对所述列校验数据对应的数据块进行列纠错处理,并在所述列纠错处理纠错成功时,将所述列校验数据对应的数据块中属于所述待读取数据块中的数据填充至所述待读取数据块对应的位置,采用所述行校验数据对填充后的待读取数据块进行行纠错处理。
7.如权利要求6所述的闪存数据纠错装置,其特征在于,所述闪存数据纠错装置还包括:
编码模块,用于在接收到数据存储指令时,对待存储数据块进行编码以得到所述待存储数据块的行校验数据;
存储模块,用于存储所述待存储数据块及所述行校验数据;
组合模块,用于在已存储的数据占用闪存设备的物理块的预设个物理页时,将所述预设个物理页中相同位置的预设个字节的数据组合成数据块;
所述编码模块,还用于对所述数据块进行编码以得到所述数据块的列校验数据;
所述存储模块,还用于存储所述列校验数据。
8.如权利要求6所述的闪存数据纠错装置,其特征在于,所述行列纠错模块包括:
获取单元,用于获取所述待读取数据块对应的列校验数据,其中,所述待读取数据块对应的列校验数据存在多个;
列纠错单元,用于按顺序采用获取的多个所述列校验数据中的首个列校验数据对其对应的数据块进行列纠错处理,并获取列纠错处理结果;
填充单元,用于在所述列纠错处理结果为纠错成功时,将所述数据块中属于所述待读取数据块中的数据填充到所述待读取数据块的对应位置上,并采用所述行校验数据对填充后的所述待读取数据块进行行纠错处理并获取纠错处理结果;
循环单元,用于在所述列纠错处理结果为纠错失败时,按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
9.如权利要求8所述的闪存数据纠错装置,其特征在于,所述循环单元,还用于在采用所述行校验数据对填充后的所述待读取数据块进行行纠错处理所获取的行纠错处理结果为纠错失败时,按顺序采用获取的多个所述列校验数据中的下一个列校验数据对其对应的数据块进行纠错处理。
10.如权利要求6至9任一项所述的闪存数据纠错装置,其特征在于,所述闪存数据纠错装置还包括:
执行模块,用于在接收到数据读取指令时,执行通过所述行校验数据确定所述待读取数据块中是否存在错误位的步骤。
CN201610045792.3A 2016-01-22 2016-01-22 闪存数据纠错方法及装置 Active CN105740088B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610045792.3A CN105740088B (zh) 2016-01-22 2016-01-22 闪存数据纠错方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610045792.3A CN105740088B (zh) 2016-01-22 2016-01-22 闪存数据纠错方法及装置

Publications (2)

Publication Number Publication Date
CN105740088A CN105740088A (zh) 2016-07-06
CN105740088B true CN105740088B (zh) 2021-06-22

Family

ID=56246571

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610045792.3A Active CN105740088B (zh) 2016-01-22 2016-01-22 闪存数据纠错方法及装置

Country Status (1)

Country Link
CN (1) CN105740088B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108052410B (zh) * 2017-12-20 2021-04-13 北京兆易创新科技股份有限公司 一种防止SPI-Nand读取数据页出错的方法及装置
CN108595288A (zh) * 2018-02-06 2018-09-28 江苏华存电子科技有限公司 一种闪存资讯纠错方法
CN108804025B (zh) * 2018-03-07 2021-10-01 深圳忆联信息系统有限公司 一种降低闪存滞留错误的方法及固态硬盘
CN111078662B (zh) * 2019-11-22 2023-01-06 苏州浪潮智能科技有限公司 一种区块链数据存储方法与装置
CN111538622B (zh) * 2020-04-24 2023-08-01 上海航天电子通讯设备研究所 星载固态存储器纠错方法
CN112486419A (zh) * 2020-12-14 2021-03-12 深圳安捷丽新技术有限公司 基于raid5的数据存储方法、装置、恢复方法及固态硬盘
CN113489570B (zh) * 2021-06-30 2023-05-09 郑州云海信息技术有限公司 一种PCIe链路的数据传输方法、装置及设备
CN116820829A (zh) * 2022-03-21 2023-09-29 华为技术有限公司 一种数据纠错方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1559033A (zh) * 2001-09-25 2004-12-29 ض� 双重误差校验码系统
CN101183565B (zh) * 2007-12-12 2011-02-16 深圳市硅格半导体有限公司 存储介质中数据校验方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1559033A (zh) * 2001-09-25 2004-12-29 ض� 双重误差校验码系统
CN101183565B (zh) * 2007-12-12 2011-02-16 深圳市硅格半导体有限公司 存储介质中数据校验方法

Also Published As

Publication number Publication date
CN105740088A (zh) 2016-07-06

Similar Documents

Publication Publication Date Title
CN105740088B (zh) 闪存数据纠错方法及装置
CN108563532B (zh) 数据处理方法及相关装置
KR102143353B1 (ko) 메모리 소자로부터 액세스된 데이터의 오류를 정정하는 장치 및 방법
US8635508B2 (en) Systems and methods for performing concatenated error correction
US9348692B2 (en) Flash memory apparatus, memory controller and method for controlling flash memory
US10484020B2 (en) System and method for parallel decoding of codewords sharing common data
CN1783729A (zh) 用联合节点处理来解码低密度奇偶校验码的方法和设备
CN111143107B (zh) 一种fpga单粒子反转校验电路和方法
CN107643882A (zh) 一种数据可靠性的存储及恢复方法、系统及存储装置
US9948322B1 (en) High performance read-modify-write system providing line-rate merging of dataframe segments in hardware
KR20210057787A (ko) Turbo 곱 코드 디코딩 방법, 장치, 디코더 및 컴퓨터 기록 매체
CN107193685B (zh) 基于闪存存储设备的纠删方法及装置
CN108196975B (zh) 基于多校验和的数据验证方法、装置及存储介质
CN108572882B (zh) 一种数据存储的方法及存储设备
US10187086B2 (en) State-based decoding of product codes
CN107168816B (zh) Ecc帧长调整方法及其装置
CN111224741B (zh) 卫星导航用bch码译码方法、译码器及卫星导航接收机
CN110287716B (zh) 数据存储方法及装置
CN101957782B (zh) 避免数据储存装置的数据发生移位错误的方法及控制器
CN108352845B (zh) 用于对存储数据进行编码的方法以及装置
US9569302B1 (en) Decoding of turbo product codes using miscorrection detection
CN111384976B (zh) 稀疏校验矩阵的存储方法和读取方法
CN109697993B (zh) 数据纠错方法及装置
CN111061520B (zh) 一种高可靠性加载运行嵌入式软件的方法
CN109857340B (zh) Nor flash中文件的存储和读取方法、装置及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Units 05-2 and 06-08, 6th floor, Changhong Science and Technology Building, 18 Science and Technology South 12 Road, Nanshan District, Shenzhen City, Guangdong Province

Applicant after: Shenzhen SiliconGo Semiconductor Co., Ltd.

Address before: Units 05-2 and 06-08, 6th floor, Changhong Science and Technology Building, 18 Science and Technology South 12 Road, Nanshan District, Shenzhen City, Guangdong Province, 518000

Applicant before: SILICONGO MICROELECTRONICS CO., LTD.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant