CN110750381A - 基于nand flash存储器的纠错方法及装置 - Google Patents
基于nand flash存储器的纠错方法及装置 Download PDFInfo
- Publication number
- CN110750381A CN110750381A CN201910863692.5A CN201910863692A CN110750381A CN 110750381 A CN110750381 A CN 110750381A CN 201910863692 A CN201910863692 A CN 201910863692A CN 110750381 A CN110750381 A CN 110750381A
- Authority
- CN
- China
- Prior art keywords
- data
- error correction
- dimension
- coordinate
- code
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding 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/1068—Adding 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
-
- 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
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
本发明适用于计算机技术领域,提供了一种基于NAND FLASH存储器的纠错方法及装置,该方法包括:通过在数据写入时,根据原始数据生成原始纠错码,并将原始数据以及原始纠错码写入NAND FLASH存储器中;读取数据时,将读取的读出数据生成对应的读出纠错码,并将读出纠错码与读取的校验纠错码进行比较,根据比较结果确定读出数据中的错误位元并对所述错误位元进行纠错处理,本实施例通过多维空间来实现对一个位元错误的纠错处理,相比ECC方案更直观和容易理解,并且运算量较小。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种基于NAND FLASH存储器的纠错方法及装置。
背景技术
在计算机领域中,闪存FLASH是一种固态、电可擦除可写入、掉电不丢失信息的计算机存储介质,按结构FLASH可以分为NAND FLASH和NOR FLASH。其中,NAND FLASH存储器中保存的数据由于位损坏、对某存储页的频繁读取操作、静电干扰或者外部强电磁辐射等原因,容易出现比特位翻转的问题,为了提高NAND FLASH存储器的可靠性,NAND FLASH存储器应用时需要采用纠错算法来保证数据的正确性。
一般采用ECC(Error Checking and Correction)校验进行比特位翻转问题的校验与纠错处理,ECC校验是指在读写数据的时候分别计算ECC码,通过比较写入数据的ECC码与读取数据的ECC码以确定所述NAND Flash是否出现比特翻转以及在出现比特翻转时进行纠错处理。然而,目前的校验方法采用二维平面校验的方式,导致纠错处理过程不直观,且运算量较大。
发明内容
有鉴于此,本发明实施例提供了一种基于NAND FLASH存储器的纠错方法及装置,以解决现有技术中采用二维平面校验的方式,导致纠错处理过程不直观,且运算量较大的问题。
本发明实施例的第一方面提供了一种基于NAND FLASH存储器的纠错方法,包括:
在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵;根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;将所述原始数据以及所述原始纠错码写入所述NANDFLASH存储器中;
在数据读取时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。
在一实施例中,所述根据所述原始数据生成多维空间位元矩阵,包括:
根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定多维空间位元矩阵的维度数以及维度宽度,各个维度上的维度宽度相同或者不同;
根据所述维度宽度将所述数据区的数据位元按照预设顺序排列到所述多维空间位元矩阵的各维度上,获得多维空间位元矩阵。
在一实施例中,当各个维度上的维度宽度相同时,所述根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定多维空间位元矩阵的维度数以及维度宽度,包括:
其中,Ds表示数据区的数据位元总数,Rs表示冗余区的冗余位元总数,W表示维度宽度,n表示维度数。
在一实施例中,根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定满足多维空间位元矩阵的多组维度数以及对应的维度宽度;确定多组维度数以及对应的维度宽度中满足预设条件的一组维度数以及对应的维度宽度作为最终确定的多维空间位元矩阵的维度数以及维度宽度;其中预设条件为使得W与n的乘积最小且n的取值最小。
在一实施例中,所述根据所述维度宽度将所述数据区的数据位元按照预设顺序排列到所述多维空间位元矩阵的各维度上,获得多维空间位元矩阵,包括:
将所述数据区的数据位元依次在各维度上排列,在每个维度上按照数据位元的序列号,基于坐标轴方向依次进行排列;或者,将所述数据区的数据位元依次在各维度上排列,在每个维度上将数据位元的序列号采用循环排列方式进行排列;
数据位元的序列号与数据位元在多维空间位元矩阵中的坐标值形成一一映射关系,不同的排列顺序产生不同的映射关系;
当所述数据位元填充完毕后所述多维空间位元矩阵未被填满时,未填充位元的位置采用预设数值填充。
在一实施例中,所述根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码,包括:
将所述多维空间位元矩阵中第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码,根据上述将所述第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码的计算纠错码的方式依次计算所述第一坐标轴上的W个坐标序号对应的W个纠错码或者同时计算所述第一坐标轴上的W个坐标序号中至少两个坐标序号对应的纠错码,按照坐标序号的不同的排列方式将所述W个纠错码串接为所述同一坐标轴上的纠错码串,所述第一坐标轴为所述多维空间位元矩阵对应的多维空间中任意一个维度对应的坐标轴;
根据所述计算纠错码的方式得到所述多维空间位元矩阵中各维空间对应的坐标轴上的纠错码串,将各维空间对应的坐标轴上的纠错码串按照坐标轴序号按从小到大的顺序或者从大到小的顺序串接为原始纠错码。
在一实施例中,所述将所述多维空间位元矩阵中第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码,包括:
其中,Cj(k)表示Vj坐标轴上坐标值为k对应的纠错码,j表示当前维度数,j为大于等于1小于等于n的整数,k表示坐标轴上的坐标值,X表示异或运算符号,i表示循环变量。
在一实施例中,所述将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理,包括:
将所述校验纠错码与所述读出纠错码进行两两异或运算,得到结果串;
按照坐标轴向,将所述结果串划分为n个结果子串;
确定各个结果子串中位元为1的个数为对应的结果子串的码重;
确定非零码重对应的结果子串中首个位元为1的序号;
当所有结果子串对应的码重均为1时,则根据各个非零码重对应的结果子串的首个位元为1的序号确定错误位元的坐标;
将所述错误位元的坐标对应的读出数据进行位元取反,得到纠正后的位元。
在一实施例中,在所述确定非零码重对应的结果子串中首个位元为1的序号之后,还包括:
当所有结果子串对应的码重均为0或者所有结果子串对应的码重中有且仅有一个码重为1时,则结束流程;
当所有结果子串对应的码重中有至少两个码重为1时,上报错误个数。
本发明实施例的第二方面提供了一种基于NAND FLASH存储器的纠错装置,包括:
矩阵生成模块,用于在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵;
纠错码生成模块,用于根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;
数据写入模块,用于将所述原始数据以及所述原始纠错码写入所述NAND FLASH存储器中;
数据读取模块,用于在数据读取时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;
所述纠错码生成模块,还用于根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;
纠错码处理模块,用于将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。
本发明实施例与现有技术相比存在的有益效果是:通过在数据写入时,根据原始数据生成原始纠错码,并将原始数据以及原始纠错码写入NAND FLASH存储器中;读取数据时,将读取的读出数据生成对应的读出纠错码,并将读出纠错码与读取的校验纠错码进行比较,根据比较结果确定读出数据中的错误位元并对所述错误位元进行纠错处理,本实施例通过多维空间来实现对一个位元错误的纠错处理,相比ECC方案更直观和容易理解,并且运算量较小。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的基于NAND FLASH存储器的纠错方法的实现流程示意图;
图2是本发明实施例提供的根据原始数据生成多维空间位元矩阵的示意图;
图3是本发明实施例提供的三维空间下数据位元的排布的示意图;
图4是本发明实施例提供的六维空间下数据位元的排布的示意图;
图5是本发明实施例提供的计算纠错码的方法示意图;
图6(1)是本发明实施例提供的V1轴上的第1位纠错码的生成的示意图;
图6(2)是本发明实施例提供的V1轴上的第2位纠错码的生成的示意图;
图7(1)是本发明实施例提供的生成V1坐标轴上的第一位纠错码C1(0)的示意图;
图7(2)是本发明实施例提供的生成V1坐标轴上的第二位纠错码C1(1)的示意图;
图7(3)是本发明实施例提供的生成V1坐标轴上的第三位纠错码C1(2)的示意图;
图8是本发明实施例提供的确定错误位元并进行纠错处理的流程的示意图;
图9是本发明实施例提供的误码点在三维空间中的示意图;
图10是本发明另一实施例提供的误码点在三维空间中的示意图;
图11是本发明实施例提供的基于NAND FLASH存储器的纠错装置的示意图;
图12是本发明实施例提供的终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
图1为本发明实施例提供的一种基于NAND FLASH存储器的纠错方法的实现流程示意图,通常数据存储分为数据写入和数据读出两个阶段。在数据写入阶段,生成原始数据的纠错码,并将原始数据连同纠错码一并写入NAND FLASH存储器。在数据读出阶段,则计算所读出数据的纠错码,并将计算出的纠错码与所读取的纠错码进行比较,接着检测是否发生误码,若是,则根据比较结果将误码进行纠正。
如图1所示基于NAND FLASH存储器的纠错方法详述如下。
步骤101,在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵。
可选的,如图2所示,本步骤根据原始数据生成多维空间位元矩阵可以包括以下步骤。
步骤201,根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定多维空间位元矩阵的维度数以及维度宽度。
其中各个维度上的维度宽度相同或者不同。
本实施例中原始数据存储在NAND FLASH存储器中。NAND FLASH是指以“与非门”为存储单元结构的FLASH。NAND FLASH由多个块组成,而每个块均由相同数目的若干页组成,每页由数据区和冗余区组成,冗余区一般用于存放校验与纠错码。
可选的,数据区存储的数据位元总数可以用Ds表示,冗余区的冗余位元总数可以用Rs表示。
将单个维度空间中所能容纳的位元个数,称为该维度的宽度。各维度宽度可以相等也可以不同,本实施例中以各维度宽度相等的情况为例进行描述,而维度宽度不同的情况与本实施例中各维度宽度相等的情况的算法过程基本相同,在本实施例中不再描述。
当维度宽度为W,则n维空间的总容量可以为Wn,所需要的校验码位数Cs为n*W。
例如,对于规格为512+16字节的FLASH,其中数据区为512字节,冗余区为16字节,即Ds=212,Rs=128,则可选择W=2、n=12,即:选择12维空间、各维度宽度为2。
表一列出了以校验位数较小为目的来划分的几种典型规格的NAND FLASH的W、n推荐值:
表一
规格(数据区+冗余区) | Ds | W与n | 校验位数Cs |
512字节+16字节 | 512*8位 | W=2,n=12 | 24 |
2048字节+64字节 | 2048*8位 | W=4,n=7 | 28 |
4096字节+128字节 | 4096*8位 | W=2,n=15 | 30 |
可选的,在不同维度的空间中,所需要的校验位元数也不同。若想达到校验位元数较小、且维数较小的目的,则应使得W与n的乘积最小且n的取值最小。即根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定满足多维空间位元矩阵的多组维度数以及对应的维度宽度;确定多组维度数以及对应的维度宽度中满足预设条件的一组维度数以及对应的维度宽度作为最终确定的多维空间位元矩阵的维度数以及维度宽度;其中预设条件为使得W与n的乘积最小且n的取值最小。
例如,对于规格为2048+64字节的FLASH,Ds=214=22*7=47,Rs=512,则可确定W=2,n=14;或者W=4,n=7;为了达到校验位元数较小的目的,以提高运算效率、降低运算复杂程度,则可选选择W=4,n=7,即选择7维空间,各维度宽度为4。
表二列出了以更加直观为目的来划分的几种典型规格的NAND FLASH的W、n推荐值:
表二
规格(数据区+冗余区) | Ds | W与n | 校验位数Cs |
512字节+16字节 | 512*8位 | W=16,n=3 | 48 |
2048字节+64字节 | 2048*8位 | W=16,n=4 | 64 |
4096字节+128字节 | 4096*8位 | W=32,n=3 | 96 |
步骤202,根据所述维度宽度将所述数据区的数据位元按照预设顺序排列到所述多维空间位元矩阵的各维度上,获得多维空间位元矩阵。
可选的,本步骤可以单个FLASH页面数据区的所有数据位元序列按约定的顺序逐位、紧凑地排列到上一步所划分的n维空间中,构成一个n维空间位元矩阵,空间位元矩阵中的每个元素放入一个位元。同时,n维空间可以采用n维坐标系来度量。
可选的,本步骤获得多维空间位元矩阵时采用的位元排序方式可以包括但不限于以下排序方式:
将所述数据区的数据位元依次在各维度上排列,在每个维度上按照数据位元的序列号,基于坐标轴方向依次进行排列。或者,将所述数据区的数据位元依次在各维度上排列,在每个维度上将数据位元的序列号采用循环排列方式进行排列。
例如,将所述数据区的数据位元按照数据位元的序列号依次在各维度上排列,在每个维度上,以坐标原点开始,基于坐标轴方向,按照坐标从小到大的顺序根据所述维度宽度排满一个维度再进行下一个维度上的数据位元的排列。
FLASH页面中数据位元的序列号与数据位元在多维空间位元矩阵中的坐标值形成一一映射关系。假设位元序号为S,将S在W进制中进行表达,设其表达式为:
S=Bn*Wn-1+Bn-1*Wn-2+…+B2*W+B1
则序号S对应的坐标值为a(B1,B2,…,Bn-1,Bn)。
例如,将所述数据区的数据位元按照数据位元的序列号依次在各维度上排列,在每个维度上,基于坐标轴方向,按照坐标从大到小的顺序根据所述维度宽度排满一个维度,且最后一个数据位元位于坐标原点上,再进行下一个维度上的数据位元的排列。即在每个维度内,均按照坐标从大到小、最后抵达原点的顺序进行放入。
例如,将所述数据区的数据位元按照数据位元的序列号依次在各维度上排列,在每个维度上,基于坐标轴方向,以除所述坐标原点之外的任意一点为起点按照坐标从小到大的顺序根据所述维度宽度排满一个维度再进行下一个维度上的数据位元的排列,或者以除所述坐标原点之外的任意一点为终点按照坐标从大到小的顺序根据所述维度宽度排满一个维度,且最后一个数据位元位于所述任意一点上,再进行下一个维度上的数据位元的排列。
例如,将所述数据区的数据位元按照数据位元的序列号在各维度上排列,在每个维度上,根据所述维度宽度采用循环排列方式排满一个维度,再进行下一个维度上的数据位元的排列。例如,在高维空间中,维度宽度为10,则从任意坐标轴上坐标点5开始,排序到坐标点10,然后又从坐标点0开始排序到坐标点5,构成循环式的排列。
可选的,不同的排列顺序产生不同的映射关系。
被填入多维空间位元矩阵中的所有数据位元,称为有效位元。当所述数据位元填充完毕后所述多维空间位元矩阵未被填满时,未填充位元的位置采用预设数值填充。可选的,预设数值可以为0。采用预设数值填充的这些位元称为填充位元。
例如,如图3所示三维空间下数据位元的排布。假设:D=27,n=3,W=3,且27个位元的数据序列依次以b0、b1、…、b25、b26来表示,则数据位元序列在三维空间中的排列示意图如图3所示,图3中一个方块代表坐标系内的一个点,每个方块内放入一个数据位元;各数据位元在每个维度方向上的坐标值以其最靠近原点的位置来度量。
为了具体化对虚拟空间的理解和实现,使得虚拟高维空间可以在现实的三维空间中进行表达、计算和操作,可以采用降维运算。例如,一个维度宽度为W的四维空间,可以看成是W个三维空间所组成的空间;一个维度宽度为W的五维空间,可以看成是W个四维空间所组成的空间;如此类推,一个维度宽度为W的n维空间,可以看成是W个n-1维空间所组成的更高一维空间,W个n-1维空间是通过沿Vn轴正向顺序排列的方式组合成n维空间。
可选的,为了计算方便或多维空间可视化,可以将较低维的空间浓缩为一个单元来表示,从而表示出n维空间的排布图。
例如,在n维空间位元矩阵中采用将Vn降维为Vn-1的方式进行表示,n表示多维空间的维度数,n≥3,且n为正整数。例如,在四维空间中,可以将四维空间降维为三维空间表示;在六维空间中,可以将六维空间降维为五维空间表示。Vn空间的坐标轴上的每一个坐标点表示一个单元,各单元限定在维度宽度内。Vn表示当前维度,Vn-1表示较当前维度低一个维度的维度。例如,附图3中的任一个小方块表示一个单元,b0、b1、b2可以分别表示一个单元。
需要说明的是,在降维运算时,不是任意选取较低维数,较低维数的选取依据是比当前维数小1,例如,当前维度为5,则降维后的维度为4。降维运算是一种数形结合的对数据序列的观察方法,便于将无形的数据有形化,从而更易于理解和把握。
或者,在n维空间位元矩阵中,将Vn、Vn-1和Vn-2构成的三维空间中每个单元采用一个三维空间表示,n≥6,即将Vn、Vn-1和Vn-2构成的三维空间中的各维度宽度上的各坐标点表示一个单元,各三维空间表示的单元限定在维度宽度内。例如,如图4所示的六维空间下数据位元的排布,假设:Ds=64,n=6,W=2,且64个位元的数据序列依次以b0、b1、…、b62、b63来表示,则将每个三维空间采用一个方块来代表。图4中,T0代表第一个三维空间,数据位元序列b0、b1、…、b6、b7按图3所示的顺序排列在三维空间T0中;数据位元序列b8、b9、…、b14、b15以同样顺序排列在三维空间T1中;如此类推,直到数据位元序列b56、b57、…、b62、b63以同样顺序排列在三维空间T7中。
以上所采用的排列顺序,并不是唯一可行的排列顺序,也可以约定其它排列顺序,在此不再赘述。数据位元的序列号与数据位元在多维空间位元矩阵中的坐标值形成一一映射关系,不同的排列顺序产生不同的映射关系。
步骤102,根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码。
可选的,如图5所示,本步骤计算纠错码可以根据以下步骤。
步骤501,将所述多维空间位元矩阵中第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码。
其中,所述第一坐标轴为所述多维空间位元矩阵对应的多维空间中任意一个维度对应的坐标轴。
例如,假设n=3,W=3,则V1轴上的第0位纠错码,就是将3维空间中所有V1坐标轴上坐标值为0的位元进行异或而得到,如图6(1)所示,即:0^1^1^1^0^1^0^0^1=1。V1轴上的第1位纠错码,就是将3维空间中所有V1坐标轴上坐标值为1的位元进行异或而得到,如图6(2)所示,即:1^0^0^0^1^1^0^1^0=0;同理,V1轴上的第2位纠错码,就是将3维空间中所有V1坐标轴上坐标值为2的位元进行异或而得到。
可选的,本实施例还可以采用公式的方法计算纠错码。
设数据位元a的坐标通式为:a(i1,i2,…k,…in)。其中,i1是数据位元a在V1坐标轴上沿轴正向的坐标值,i2是数据位元a在V2坐标轴上沿轴正向的坐标值,…,in是数据位元a在Vn坐标轴上沿轴正向的坐标值。i1,i2,…k,…in的取值范围是[0,W-1]内的整数。
对于Vj(k)坐标轴上沿轴正向的第k位,坐标为a(i1,i2,…k,…in),其中,j为大于等于1小于等于n的整数,k=ij。
在生成Vj坐标轴上沿轴正向的第k位纠错码Cj(k)时,将Vj(k)坐标轴上坐标值等于k的所有位元进行逐位异或,即得到第k位纠错码,可用如下数学函数表述为:Cj(k)=f(j,k),其中,Cj(k)表示Vj坐标轴上沿轴正向的第k位纠错码,k是[0,W-1]内的整数,f(·)是函数名称,表示一个将Vj坐标轴上坐标值等于k的所有位元进行逐位异或运算的函数。
关于上述根据高维空间计算纠错码的数学函数公式,其具体表达式如下:
首先定义以下连续求异或运算的符号X的一般形式,符号下部(即i=0)表示循环变量的名称及其起始值,符号上部(即n-1)表示循环变量的截止值;综合起来,它表示将如下ai所代表的n个数据位元连续异或,i值从0开始依次递增到n-1,故参与异或的数据位元从a0依次变更到an-1。
可选的,数据位元是n维空间点的坐标,故上述式子可以具体化为:
定义下列二重循环异或运算的符号为:
可选的,定义某轴向上坐标值固定的n-1重循环异或运算的符号:它表示将Vn、…、V0等所有坐标轴向上的Wn-1个元素进行n-1重循环的异或运算,其中,在Vj轴向不进行循环,而其坐标值固定为k,k是[0,W-1]内的整数。
即根据得到Vj坐标轴上坐标为k对应的纠错码;其中,Cj(k)表示Vj坐标轴上坐标值为k对应的纠错码,j表示当前维度数,j为大于等于1小于等于n的整数,k表示坐标轴上的坐标值,X表示上述定义的异或运算符号,i表示循环变量。
步骤502,根据步骤501中将第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码的计算纠错码的方式依次计算所述第一坐标轴上的W个坐标序号对应的W个纠错码或者同时计算所述第一坐标轴上的W个坐标序号中至少两个坐标序号对应的纠错码,按照坐标序号的不同的排列方式将所述W个纠错码串接为所述同一坐标轴上的纠错码串。
例如,V1轴上的第1位纠错码,就是将3维空间中所有V1坐标轴上坐标值为1的位元进行异或而得到,如图6(2)所示,即:1^0^0^0^1^1^0^1^0=0;同理,V1轴上的第2位纠错码,就是将3维空间中所有V1坐标轴上坐标值为2的位元进行异或而得到,例如纠错码为0。则n=3,W=3的多维空间位元矩阵上V1坐标轴上对应的纠错码串可以是100,或者为001。
在采用公式计算纠错码时,可以逐位生成,也可以多位同时生成。最终,可以得到Vj轴向上的完整纠错码Cj。在[1,n]范围内遍历j,即可生成所有坐标轴上的纠错码C1,C2,C3…Cn等。
例如,假设:Ds=81,n=4,W=3,且81个位元的数据位元序列依次以b0、b1、b3、…、b78、b79、b80来表示。显然,所有数据位元排列在四维空间中,各维度宽度为3。首先生成V1坐标轴上的第一位纠错码C1(0)。如图7(1)所示,在四维空间中排列着三个三维空间,每个三维空间中最左边平面的9个小方块(阴影所示部分),对应于V1坐标轴上的坐标值等于0的所有数据位元,采用将这些数据位元逐位异或即得到C1(0)。
接着生成V1坐标轴上的第二位纠错码C1(1)。每个三维空间中最中间平面上的9个小方块,如图7(2)所示,对应于V1坐标轴上的坐标值等于1的所有数据位元,将这些数据位元逐位异或,即得到C1(1)。
再生成V1坐标轴上的第三位纠错码C1(2)。每个三维空间中最右边平面上的9个小方块,如图7(3)所示,对应于V1坐标值等于2的所有数据位元,将这些数据位元逐位异或,即得到C1(2)。
同理,可以计算得到V2轴向上的C2(0)、C2(1)、C2(2),以及V3轴向上的C3(0)、C3(1)、C3(2)。
而在V4轴向上,排列着三个三维空间,第一个三维空间中的所有27个小方块,对应于V4坐标值等于0的所有数据位元。将这些数据位元逐位异或,即得到C4(0)。第二个三维空间中的所有27个小方块,对应于V4坐标值等于1的所有数据位元。将这些数据位元逐位异或,即得到C4(1);第三个三维空间中的所有27个小方块,对应于V4坐标值等于2的所有数据位元。将这些位元逐位异或,即得到C4(2)。
根据上述实施例,利用高维空间降维的思想来计算各维坐标轴向的纠错码,可以更形象、可视化的简化计算过程,并且高维空间降维的思想可以结合纠错码函数表达式进行运算。
步骤503,根据所述计算纠错码的方式得到所述多维空间位元矩阵中各维空间对应的坐标轴上的纠错码串,将各维空间对应的坐标轴上的纠错码串按照坐标轴序号按从小到大的顺序或者从大到小的顺序串接为原始纠错码。
步骤103,将所述原始数据以及所述原始纠错码写入所述NAND FLASH存储器中。
步骤104,在数据读取时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码。
可选的,从NAND FLASH存储器中的存储页中读出数据区的所有读出数据A和冗余区的校验纠错码B。
步骤105,根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码。
可选的,根据附图1中步骤102描述的生成所述原始数据对应的原始纠错码的方式生成读出数据对应的读出纠错码,在此不再重复描述,详见步骤102的描述。
步骤106,将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。
可选的,如图8所示确定错误位元并进行纠错处理的流程可以包括以下步骤。
步骤801,将所述校验纠错码与所述读出纠错码进行两两异或运算,得到结果串。
可选的,将所述校验纠错码与所述读出纠错码进行两两异或运算,可以得到n*W个数据位元结果串R。
步骤802,按照坐标轴向,将所述结果串划分为n个结果子串。
结果串R由V0轴向结果子串、V1轴向结果子串、…、Vn轴向结果子串等n部分组成,因此可以将结果串依次划分为n个结果子串,并且n个结果子串可简写为R0、R1、…、Rn。
步骤803,确定各个结果子串中位元为1的个数为对应的结果子串的码重。
可选的,设结果子串R0、R1、…、Rn的码重分别为W0、W1、…、Wn。
步骤804,确定非零码重对应的结果子串中首个位元为1的序号。
设结果子串R0中首个1位元的序号为S0,结果子串R1中首个1位元的序号为S1,依次计算,结果子串Rn中首个1位元的序号为Sn。
步骤805,检测所有结果子串对应的码重是否均为0。
可选的,当所有结果子串对应的码重均为0时,则表明读出数据A没有任何错误,故不需要纠错,流程结束。当所有结果子串对应的码重不是均为0时,执行步骤806。
步骤806,检测所有结果子串对应的码重是否均为1。
可选的,当所有结果子串对应的码重均为1时,执行步骤807。当所有结果子串对应的码重不是均为1时,执行步骤809。
步骤807,当所有结果子串对应的码重均为1时,则根据各个非零码重对应的结果子串的首个位元为1的序号确定错误位元的坐标。
所有结果子串对应的码重均为1时,表明读出数据A中有一个位元发生错误。结果串R中全部的首个1位元序号可组成一个坐标值,其对应于n维空间中的一个点E,并将该点简称为误码点,其坐标值为:E(S0,S1…Sn)。误码点对应的就是错误位元。
例如,在本实施例中,三维空间是最基本的空间单元,如图9所示,误码点必位于一个三维空间中。在该三维空间中,V1、V2以及V3数据轴上的误码坐标依次为E(S1,S2,S3),V1数据轴上所有坐标为S1的点形成一个经过S1且垂直于V1轴的平面P1,V2数据轴上所有坐标为S2的点形成一个经过S2且垂直于V2轴的平面P2,V3数据轴上所有坐标为S3的点形成一个经过S3且垂直于V3轴的平面P3。平面P1、P2、P3的交点(如下图中的E点),就是误码点。
步骤808,将所述错误位元的坐标对应的读出数据进行位元取反,得到纠正后的位元。
可选的,假设Ds=64,n=3,W=8;R1=00001000、R2=00010000、R3=00100000。则,S1=4、S2=3、S3=2,那么如图10所示,交点坐标为E(4,3,2),这表明E所在的位元值发生翻转,将其取反后,错误即得到纠正。
步骤809,检测所有结果子串对应的码重是否有一个码重为1。
可选的,当所有结果子串对应的码重中有且仅有一个码重为1时,则表明纠错码中有一个位元发生错误,而读出数据A没有错误,故读出数据A不需要纠错,因此结束流程。
步骤810,检测所有结果子串对应的码重中是否有至少两个码重为1。
步骤811,当所有结果子串对应的码重中有至少两个码重为1时,上报错误个数。
可选的,当所有结果子串对应的码重中有两个码重为1时,表明要么读出数据A和纠错码各有一位错误、要么纠错码中有两位错误,已无法纠错,可以通过状态位或返回值向上一层报告“两位错误、无法纠错”。
当所有结果子串对应的码重中有多于两个码重为1时,表明读出数据A和纠错码中总共有多于两位的错误发生,这些错误过多的情况均无法纠错,可以通过状态位或返回值向上一层报告“错误过多、无法纠错”。
上述基于NAND FLASH存储器的纠错方法,通过在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵;根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;将所述原始数据以及所述原始纠错码写入所述NAND FLASH存储器中;在数据读取时,从所述NANDFLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。上述各个实施例通过多维空间来实现对一个位元错误的纠错处理,相比ECC方案更直观和容易理解,并且运算量较小、简洁易行,可在纯软件中实施,也可通过硬件电路来实施,本方案具有较高的灵活性,可按不同的需要选择不同的空间维数及各维度宽度,可满足不同的需要。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
对应于上文实施例所述的基于NAND FLASH存储器的纠错方法,图11示出了本发明实施例提供的基于NAND FLASH存储器的纠错装置的示例图。如图11所示,该装置可以包括:矩阵生成模块1101、纠错码生成模块1102、数据写入模块1103、数据读取模块1104以及纠错码处理模块1105。
矩阵生成模块1101,用于在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵;
纠错码生成模块1102,用于根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;
数据写入模块1103,用于将所述原始数据以及所述原始纠错码写入所述NANDFLASH存储器中;
数据读取模块1104,用于在数据读取时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;
所述纠错码生成模块1102,还用于根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;
纠错码处理模块1105,用于将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。
可选的,所述矩阵生成模块1101,用于根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定多维空间位元矩阵的维度数以及维度宽度,各个维度上的维度宽度相同或者不同;根据所述维度宽度将所述数据区的数据位元按照预设顺序排列到所述多维空间位元矩阵的各维度上,获得多维空间位元矩阵。
其中,Ds表示数据区的数据位元总数,Rs表示冗余区的冗余位元总数,W表示维度宽度,n表示维度数。
可选的,根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定满足多维空间位元矩阵的多组维度数以及对应的维度宽度;确定多组维度数以及对应的维度宽度中满足预设条件的一组维度数以及对应的维度宽度作为最终确定的多维空间位元矩阵的维度数以及维度宽度;其中预设条件为使得W与n的乘积最小且n的取值最小。
可选的,所述矩阵生成模块1101,在获得多维空间位元矩阵时,可以将所述数据区的数据位元依次在各维度上排列,在每个维度上按照数据位元的序列号,基于坐标轴方向依次进行排列;或者,将所述数据区的数据位元依次在各维度上排列,在每个维度上将数据位元的序列号采用循环排列方式进行排列;
数据位元的序列号与数据位元在多维空间位元矩阵中的坐标值形成一一映射关系,不同的排列顺序产生不同的映射关系;
当所述数据位元填充完毕后所述多维空间位元矩阵未被填满时,未填充位元的位置采用预设数值填充。
可选的,所述纠错码生成模块1102,用于将所述多维空间位元矩阵中第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码,根据将所述第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码的计算纠错码的方式依次计算所述第一坐标轴上的W个坐标序号对应的W个纠错码或者同时计算所述第一坐标轴上的W个坐标序号中至少两个坐标序号对应的纠错码,按照坐标序号的不同的排列方式将所述W个纠错码串接为所述同一坐标轴上的纠错码串,所述第一坐标轴为所述多维空间位元矩阵对应的多维空间中任意一个维度对应的坐标轴;根据计算纠错码的方式得到所述多维空间位元矩阵中各维空间对应的坐标轴上的纠错码串,将各维空间对应的坐标轴上的纠错码串按照坐标轴序号按从小到大的顺序或者从大到小的顺序串接为原始纠错码。
其中,Cj(k)表示Vj坐标轴上坐标值为k对应的纠错码,j表示当前维度数,j为大于等于1小于等于n的整数,k表示坐标轴上的坐标值,X表示本方案所指定的异或运算符号,i表示循环变量。
可选的,所述纠错码处理模块1105,用于将所述校验纠错码与所述读出纠错码进行两两异或运算,得到结果串;
按照坐标轴向,将所述结果串划分为n个结果子串;
确定各个结果子串中位元为1的个数为对应的结果子串的码重;
确定非零码重对应的结果子串中首个位元为1的序号;
当所有结果子串对应的码重均为1时,则根据各个非零码重对应的结果子串的首个位元为1的序号确定错误位元的坐标;
将所述错误位元的坐标对应的读出数据进行位元取反,得到纠正后的位元;
在所述确定非零码重对应的结果子串中首个位元为1的序号之后,所述纠错码处理模块1105,还用于:
当所有结果子串对应的码重均为0或者所有结果子串对应的码重中有且仅有一个码重为1时,则结束流程;
当所有结果子串对应的码重中有至少两个码重为1时,上报错误个数。
上述基于NAND FLASH存储器的纠错装置,通过在数据写入时,获取原始数据,并矩阵生成模块根据所述原始数据生成多维空间位元矩阵;纠错码生成模块根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;数据写入模块将所述原始数据以及所述原始纠错码写入所述NANDFLASH存储器中;在数据读取时,数据读取模块从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;纠错码生成模块根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;纠错码处理模块将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。上述各个实施例通过多维空间来实现对一个位元错误的纠错处理,相比ECC方案更直观和容易理解,并且运算量较小、简洁易行,可在纯软件中实施,也可通过硬件电路来实施,本方案具有较高的灵活性,可按不同的需要选择不同的空间维数及各维度宽度,可满足不同的需要。
图12是本发明一实施例提供的终端设备的示意图。如图12所示,该实施例的终端设备1200包括:处理器1201、存储器1202以及存储在所述存储器1202中并可在所述处理器1201上运行的计算机程序1203,例如基于NAND FLASH存储器的纠错程序。所述处理器1201执行所述计算机程序1203时实现上述基于NAND FLASH存储器的纠错方法实施例中的步骤,例如图1所示的步骤101至106,或者图2所示的步骤201至步骤202,或者图5所示的步骤501至步骤503,或者图8所示的步骤801至步骤811,所述处理器1201执行所述计算机程序1203时实现上述各装置实施例中各模块的功能,例如图11所示模块1101至1105的功能。
示例性的,所述计算机程序1203可以被分割成一个或多个程序模块,所述一个或者多个程序模块被存储在所述存储器1202中,并由所述处理器1201执行,以完成本发明。所述一个或多个程序模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序1203在所述基于NAND FLASH存储器的纠错的装置或者终端设备1200中的执行过程。例如,所述计算机程序1203可以被分割成矩阵生成模块1101、纠错码生成模块1102、数据写入模块1103、数据读取模块1104以及纠错码处理模块1105,各模块具体功能如图11所示,在此不再一一赘述。
所述终端设备1200可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器1201、存储器1202。本领域技术人员可以理解,图12仅仅是终端设备1200的示例,并不构成对终端设备1200的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器1201可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器1202可以是所述终端设备1200的内部存储单元,例如终端设备1200的硬盘或内存。所述存储器1202也可以是所述终端设备1200的外部存储设备,例如所述终端设备1200上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器1202还可以既包括所述终端设备1200的内部存储单元也包括外部存储设备。所述存储器1202用于存储所述计算机程序以及所述终端设备1200所需的其他程序和数据。所述存储器1202还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于NAND FLASH存储器的纠错方法,其特征在于,包括:
在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵;根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;将所述原始数据以及所述原始纠错码写入NAND FLASH存储器中;
在数据读取时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。
2.如权利要求1所述的基于NAND FLASH存储器的纠错方法,其特征在于,所述根据所述原始数据生成多维空间位元矩阵,包括:
根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定多维空间位元矩阵的维度数以及维度宽度,各个维度上的维度宽度相同或者不同;
根据所述维度宽度将所述数据区的数据位元按照预设顺序排列到所述多维空间位元矩阵的各维度上,获得多维空间位元矩阵。
4.如权利要求3所述的基于NAND FLASH存储器的纠错方法,其特征在于,根据所述原始数据的数据区的数据位元和冗余区的冗余位元,确定满足多维空间位元矩阵的多组维度数以及对应的维度宽度;确定多组维度数以及对应的维度宽度中满足预设条件的一组维度数以及对应的维度宽度作为最终确定的多维空间位元矩阵的维度数以及维度宽度;其中预设条件为使得W与n的乘积最小且n的取值最小。
5.如权利要求3所述的基于NAND FLASH存储器的纠错方法,其特征在于,所述根据所述维度宽度将所述数据区的数据位元按照预设顺序排列到所述多维空间位元矩阵的各维度上,获得多维空间位元矩阵,包括:
将所述数据区的数据位元依次在各维度上排列,在每个维度上按照数据位元的序列号,基于坐标轴方向依次进行排列;或者,将所述数据区的数据位元依次在各维度上排列,在每个维度上将数据位元的序列号采用循环排列方式进行排列;
数据位元的序列号与数据位元在多维空间位元矩阵中的坐标值形成一一映射关系,不同的排列顺序产生不同的映射关系;
当所述数据位元填充完毕后所述多维空间位元矩阵未被填满时,未填充位元的位置采用预设数值填充。
6.如权利要求1至5中任一项所述的基于NAND FLASH存储器的纠错方法,其特征在于,所述根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码,包括:
将所述多维空间位元矩阵中第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码,根据上述将所述第一坐标轴上的同一坐标的所有数据位元进行异或运算得到一个纠错码的计算纠错码的方式依次计算所述第一坐标轴上的W个坐标序号对应的W个纠错码或者同时计算所述第一坐标轴上的W个坐标序号中至少两个坐标序号对应的纠错码,按照坐标序号的不同的排列方式将所述W个纠错码串接为所述同一坐标轴上的纠错码串,所述第一坐标轴为所述多维空间位元矩阵对应的多维空间中任意一个维度对应的坐标轴;
根据所述计算纠错码的方式得到所述多维空间位元矩阵中各维空间对应的坐标轴上的纠错码串,将各维空间对应的坐标轴上的纠错码串按照坐标轴序号按从小到大的顺序或者从大到小的顺序串接为原始纠错码。
8.如权利要求1所述的基于NAND FLASH存储器的纠错方法,其特征在于,所述将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理,包括:
将所述校验纠错码与所述读出纠错码进行两两异或运算,得到结果串;
按照坐标轴向,将所述结果串划分为n个结果子串;
确定各个结果子串中位元为1的个数为对应的结果子串的码重;
确定非零码重对应的结果子串中首个位元为1的序号;
当所有结果子串对应的码重均为1时,则根据各个非零码重对应的结果子串的首个位元为1的序号确定错误位元的坐标;
将所述错误位元的坐标对应的读出数据进行位元取反,得到纠正后的位元。
9.如权利要求8所述的基于NAND FLASH存储器的纠错方法,其特征在于,在所述确定非零码重对应的结果子串中首个位元为1的序号之后,还包括:
当所有结果子串对应的码重均为0或者所有结果子串对应的码重中有且仅有一个码重为1时,则结束流程;
当所有结果子串对应的码重中有至少两个码重为1时,上报错误个数。
10.一种基于NAND FLASH存储器的纠错装置,其特征在于,包括:
矩阵生成模块,用于在数据写入时,获取原始数据,并根据所述原始数据生成多维空间位元矩阵;
纠错码生成模块,用于根据所述多维空间位元矩阵生成各维空间的各坐标轴方向上的纠错码,将各维空间的各坐标轴方向上的纠错码串接为原始纠错码;
数据写入模块,用于将所述原始数据以及所述原始纠错码写入所述NAND FLASH存储器中;
数据读取模块,用于在数据读取时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据以及与所述原始纠错码对应的校验纠错码;
所述纠错码生成模块,还用于根据生成所述原始数据对应的原始纠错码的方式生成所述读出数据对应的读出纠错码;
纠错码处理模块,用于将所述校验纠错码与所述读出纠错码进行校验,获得校验结果,根据所述校验结果确定所述读出数据中的错误位元并对所述错误位元进行纠错处理。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910863692.5A CN110750381B (zh) | 2019-09-12 | 2019-09-12 | 基于nand flash存储器的纠错方法及装置 |
PCT/CN2020/113739 WO2021047472A1 (zh) | 2019-09-12 | 2020-09-07 | 基于nand flash存储器的纠错方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910863692.5A CN110750381B (zh) | 2019-09-12 | 2019-09-12 | 基于nand flash存储器的纠错方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110750381A true CN110750381A (zh) | 2020-02-04 |
CN110750381B CN110750381B (zh) | 2021-08-10 |
Family
ID=69276365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910863692.5A Active CN110750381B (zh) | 2019-09-12 | 2019-09-12 | 基于nand flash存储器的纠错方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110750381B (zh) |
WO (1) | WO2021047472A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021047472A1 (zh) * | 2019-09-12 | 2021-03-18 | 百富计算机技术(深圳)有限公司 | 基于nand flash存储器的纠错方法及装置 |
CN114756403A (zh) * | 2022-04-25 | 2022-07-15 | 电子科技大学 | 一种基于网络编码的ram利用率提升方法 |
CN116737446A (zh) * | 2023-08-16 | 2023-09-12 | 江苏华存电子科技有限公司 | 一种基于有限ram空间的储存装置高速写入数据纠错方法 |
CN116860512A (zh) * | 2023-09-05 | 2023-10-10 | 中国科学院国家空间科学中心 | 基于RS码的cache抗多位翻转检纠错加固系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102346693A (zh) * | 2010-07-30 | 2012-02-08 | 海信集团有限公司 | 一种数据存储和数据恢复方法 |
GB2490198A (en) * | 2011-03-21 | 2012-10-24 | Denso Corp | Error correction of non-volatile NAND flash memory |
CN105630425A (zh) * | 2015-12-31 | 2016-06-01 | 深圳市同创国芯电子有限公司 | 一种数据管理方法、装置及终端 |
CN106935271A (zh) * | 2016-01-21 | 2017-07-07 | 威盛电子股份有限公司 | 三维架构非依电性存储器的控制器装置与操作方法 |
CN109542668A (zh) * | 2018-10-29 | 2019-03-29 | 百富计算机技术(深圳)有限公司 | 基于nand flash存储器的校验方法、终端设备及存储介质 |
CN109785895A (zh) * | 2019-01-28 | 2019-05-21 | 西安紫光国芯半导体有限公司 | 纠正NAND Flash中多比特错误的ECC装置和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6981198B2 (en) * | 2001-04-26 | 2005-12-27 | Storage Technology Corporation | Dynamic error correction code shortening |
US11262913B2 (en) * | 2019-03-28 | 2022-03-01 | Intel Corporation | Technologies for efficient stochastic associative search operations with error-correcting code |
CN110750381B (zh) * | 2019-09-12 | 2021-08-10 | 百富计算机技术(深圳)有限公司 | 基于nand flash存储器的纠错方法及装置 |
-
2019
- 2019-09-12 CN CN201910863692.5A patent/CN110750381B/zh active Active
-
2020
- 2020-09-07 WO PCT/CN2020/113739 patent/WO2021047472A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102346693A (zh) * | 2010-07-30 | 2012-02-08 | 海信集团有限公司 | 一种数据存储和数据恢复方法 |
GB2490198A (en) * | 2011-03-21 | 2012-10-24 | Denso Corp | Error correction of non-volatile NAND flash memory |
CN105630425A (zh) * | 2015-12-31 | 2016-06-01 | 深圳市同创国芯电子有限公司 | 一种数据管理方法、装置及终端 |
CN106935271A (zh) * | 2016-01-21 | 2017-07-07 | 威盛电子股份有限公司 | 三维架构非依电性存储器的控制器装置与操作方法 |
CN109542668A (zh) * | 2018-10-29 | 2019-03-29 | 百富计算机技术(深圳)有限公司 | 基于nand flash存储器的校验方法、终端设备及存储介质 |
CN109785895A (zh) * | 2019-01-28 | 2019-05-21 | 西安紫光国芯半导体有限公司 | 纠正NAND Flash中多比特错误的ECC装置和方法 |
Non-Patent Citations (1)
Title |
---|
王轩,常亮,李杰: "基于FPGA的NAND FLASH ECC校验系统设计与实现", 《电子设计工程》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021047472A1 (zh) * | 2019-09-12 | 2021-03-18 | 百富计算机技术(深圳)有限公司 | 基于nand flash存储器的纠错方法及装置 |
CN114756403A (zh) * | 2022-04-25 | 2022-07-15 | 电子科技大学 | 一种基于网络编码的ram利用率提升方法 |
CN116737446A (zh) * | 2023-08-16 | 2023-09-12 | 江苏华存电子科技有限公司 | 一种基于有限ram空间的储存装置高速写入数据纠错方法 |
CN116737446B (zh) * | 2023-08-16 | 2023-10-24 | 江苏华存电子科技有限公司 | 一种基于有限ram空间的储存装置高速写入数据纠错方法 |
CN116860512A (zh) * | 2023-09-05 | 2023-10-10 | 中国科学院国家空间科学中心 | 基于RS码的cache抗多位翻转检纠错加固系统 |
CN116860512B (zh) * | 2023-09-05 | 2023-11-14 | 中国科学院国家空间科学中心 | 基于RS码的cache抗多位翻转检纠错加固系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110750381B (zh) | 2021-08-10 |
WO2021047472A1 (zh) | 2021-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110750381B (zh) | 基于nand flash存储器的纠错方法及装置 | |
CN109542668B (zh) | 基于nand flash存储器的校验方法、终端设备及存储介质 | |
Avizienis | Arithmetic error codes: Cost and effectiveness studies for application in digital system design | |
Adkins et al. | Algebra: an approach via module theory | |
US9075739B2 (en) | Storage device | |
US20080162806A1 (en) | Storage Accelerator | |
EP0793174B1 (en) | Error detection and correction method and apparatus for computer memory | |
US8843810B2 (en) | Method and apparatus for performing a CRC check | |
JPH02148225A (ja) | 有限体の乗法的逆数元を計算するデータ処理方法及び装置 | |
van Der Hoeven et al. | Sparse polynomial interpolation in practice | |
CN110277131B (zh) | 基于nand flash存储器的校验方法、终端设备及存储介质 | |
CN105811996A (zh) | 一种基于准循环ldpc的数据处理方法及系统 | |
JP2002278707A (ja) | ディスクコントローラ | |
CN105528183A (zh) | 一种存储数据的方法及存储设备 | |
Nielsen | List decoding of linear block codes | |
CN112364985A (zh) | 一种基于分布式编码的卷积优化方法 | |
US10897271B2 (en) | Multi-dimensional quasi-cyclic (QC) low-density parity-check (LDPC) code constructions | |
CN1750411A (zh) | 用于测试循环冗余码算法的测试数据模式 | |
US20190319787A1 (en) | Hardware acceleration of bike for post-quantum public key cryptography | |
CN108665940B (zh) | Ecc编码电路、解码电路以及存储器控制器 | |
US8826252B2 (en) | Using vector atomic memory operation to handle data of different lengths | |
Ralha | One-sided reduction to bidiagonal form | |
CN114124107A (zh) | 一种循环冗余校验的计算方法和装置 | |
CN114595486B (zh) | 零数据识别方法、装置、可读存储介质及电子设备 | |
RU2801082C1 (ru) | Способ структурно-параметрического синтеза крипто-кодовых конструкций контроля и восстановления целостности структурированных массивов данных в условиях перехода к пространству данных с большей мерностью |
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 |