CN110277131B - 基于nand flash存储器的校验方法、终端设备及存储介质 - Google Patents

基于nand flash存储器的校验方法、终端设备及存储介质 Download PDF

Info

Publication number
CN110277131B
CN110277131B CN201910461388.8A CN201910461388A CN110277131B CN 110277131 B CN110277131 B CN 110277131B CN 201910461388 A CN201910461388 A CN 201910461388A CN 110277131 B CN110277131 B CN 110277131B
Authority
CN
China
Prior art keywords
line
intersection point
matrix
bit
bits
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
CN201910461388.8A
Other languages
English (en)
Other versions
CN110277131A (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.)
PAX Computer Technology Shenzhen Co Ltd
Original Assignee
PAX Computer Technology Shenzhen 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 PAX Computer Technology Shenzhen Co Ltd filed Critical PAX Computer Technology Shenzhen Co Ltd
Priority to CN201910461388.8A priority Critical patent/CN110277131B/zh
Publication of CN110277131A publication Critical patent/CN110277131A/zh
Application granted granted Critical
Publication of CN110277131B publication Critical patent/CN110277131B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • 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
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check

Landscapes

  • Read Only Memory (AREA)
  • Error Detection And Correction (AREA)

Abstract

本申请适用于计算机技术领域,提供了一种基于NAND FLASH存储器的校验方法、终端设备及存储介质,包括:在数据写入时,基于原始数据生成矩阵,通过所述矩阵获取四个方向的子纠错码,并将四个子纠错码段组成为原始纠错码,在数据读出时,通过读出数据生成计算纠错码,并从存储器中读取校验纠错码,通过比较计算纠错码和校验纠错码确定读出数据是否发生错误,并在出现错误时对读出数据进行纠错处理。本申请实施例提供的基于NAND FLASH存储器的校验方法、终端设备及存储介质,可以纠正NAND FLASH存储页中一位、两位及三位的误码,能为NAND FLASH的存储提供更高的可靠性保障。

Description

基于NAND FLASH存储器的校验方法、终端设备及存储介质
技术领域
本申请属于计算机技术领域,尤其涉及一种基于NAND FLASH存储器的校验方法、终端设备及存储介质。
背景技术
FLASH是一种固态、电可擦除可写入、掉电不丢失信息的计算机存储介质。按实现结构,FLASH分为NOR FLASH和NAND FLASH两种,其中,NAND FLASH是指以“与非门”为存储单元结构的FLASH。NAND FLASH由多个块组成,而每个块均由相同数目的若干页组成,每页由数据区和冗余区组成,冗余区一般用于存放校验与纠错码。
NAND FLASH存储器件中保存的数据,通常容易发生个别位元的翻转。位元翻转可以发生在数据写入、数据读取等存储器工作中以及空闲阶段的任何环节。发生位元翻转的原因有多种,可能是位损坏、对某存储页的频繁读取操作、静电干扰、外部强电磁辐射等。比特位翻转会导致所存储的数据错误,例如导致程序运算结果错误、流程异常,甚至运行死机等。因此,需要采用纠错算法来保证数据的正确性。
在NAND FLASH的数据存储中,通常使用ECC(Error Correction Code错误校正码,简称ECC)算法来进行校验与纠错处理。普通的ECC算法能检测出两个位元的错误,并能纠正一个位元的错误。当NAND FLASH的同一存储页中出现两个位元或三个位元的翻转时,普通的ECC算法将无法纠正错误。
发明内容
有鉴于此,本申请实施例提供了一种基于NAND FLASH存储器的校验方法、终端设备及存储介质,以解决目前纠错算法不能对两个位元或三个位元进行有效检测和纠错处理的问题。
根据第一方面,本申请实施例提供了一种基于NAND FLASH存储器的校验方法,包括:在数据写入时,获取原始数据,并基于所述原始数据生成矩阵;基于所述矩阵生成原始纠错码;所述原始纠错码包括横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码;将所述原始数据和所述原始纠错码写入所述NAND FLASH存储器中;在数据读出时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据和与所述原始纠错码对应的校验纠错码;基于生成所述原始数据的原始纠错码的方式,生成所述读出数据的计算纠错码;将所述读出数据的计算纠错码与所述校验纠错码进行比较,获得校验结果,并在所述校验结果为所述读出数据出现错误时,对所述读出数据进行纠错处理。
根据第二方面,本申请实施例提供了一种终端设备,包括:矩阵生成单元,用于在数据写入时,获取原始数据,并基于所述原始数据生成矩阵;原始纠错码获得单元,用于基于所述矩阵生成原始纠错码;所述原始纠错码包括横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码;数据写入单元,用于将所述原始数据和所述原始纠错码写入所述NAND FLASH存储器中;数据读取单元,用于在数据读出时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据和与所述原始纠错码对应的校验纠错码;计算纠错码获得单元,用于基于生成所述原始数据的原始纠错码的方式,生成所述读出数据的计算纠错码;校验纠错单元,用于将所述读出数据的计算纠错码与所述校验纠错码进行比较,获得校验结果,并在所述校验结果为所述读出数据出现错误时,对所述读出数据进行纠错处理。
根据第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述方法的步骤。
根据第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述方法的步骤。
本申请实施例的第五方面提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本申请实施例第一方面提供的所述方法的步骤。
本申请实施例提供的基于NAND FLASH存储器的校验方法,该方法在数据写入时,基于原始数据生成矩形队列,通过所述矩形队列获取四个方向的子纠错码,并将四个子纠错码段组成为原始纠错码,在数据读出时,通过读出数据生成计算纠错码,并从存储器中读取校验纠错码,通过比较计算纠错码和校验纠错码确定读出数据是否发生错误,并在出现错误时对读出数据进行纠错处理,可以纠正NAND FLASH存储页中三个位元任意组合的误码,能为NAND FLASH的存储提供更高的可靠性保障。申请实施例提供的基于NAND FLASH存储器的校验方法,综合运用了数学中排列组合、分类、几何分析、代数方程、有限遍历和概率论等方法,极大地简化了计算过程,避免了穷举遍历运算会带来的大运算量缺陷,简洁易行,运算量小,可在纯软件中实施,也可通过硬件电路来实施。除对存储页中三位的误码能纠错外,也能对一位、两位的误码进行纠错;除对仅分布于数据中的误码可纠错外,对仅分布于纠错码中,或者数据与纠错码中兼有分布的误码也能纠错。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的基于NAND FLASH存储器的校验方法的流程示意图;
图2是本申请实施例中将原始数据按从左到右、从上到下的第一预设顺序排列生成的矩阵的一个具体示例的示意图;
图3是本申请实施例中矩阵左斜排的一个具体示例的示意图;
图4是本申请实施例中矩阵右斜排的一个具体示例的示意图;
图5是本申请实施例中矩阵中两横线两纵线交点标示号的一个具体示例的示意图;
图6是本申请实施例中矩阵中三横线三纵线交点标示号的一个具体示例的示意图;
图7是本申请实施例中对读出数据中一位误码的纠错示意图;
图8是本申请实施例中两横线、两纵线、两左斜线、两右斜线交于两点的纠错示意图;
图9是本申请实施例中两横线、两纵线、两左斜线交于两点的纠错示意图;
图10是本申请实施例中两横线、两纵线、两右斜线交于两点的纠错示意图;
图11是本申请实施例中两横线、两左斜线、两右斜线交于两点的纠错示意图;
图12是本申请实施例中两纵线、两左斜线、两右斜线交于两点的纠错示意图;
图13是本申请实施例中Wx=Wy=Wl=Wr=3时的三位元纠错示意图;
图14是本申请实施例中Wx=Wy=Wl=3,Wr=1时的三位元纠错示意图;
图15是本申请实施例中Wx=Wy=Wr=3,Wl=1时的三位元纠错示意图;
图16是本申请实施例中Wy=Wl=Wr=3,Wx=1时的三位元纠错示意图;
图17是本申请实施例中Wx=Wl=Wr=3,Wy=1时的三位元纠错示意图;
图18是本申请实施例中Wx=Wy=3,Wl=Wr=1时的三位元纠错示意图;
图19是本申请实施例中Wx=Wl=3,Wy=Wr=1时的三位元纠错示意图;
图20是本申请实施例中Wx=Wr=3,Wy=Wl=1时的三位元纠错示意图;
图21是本申请实施例中Wy=Wl=3,Wx=Wr=1时的三位元纠错示意图;
图22是本申请实施例中Wy=Wr=3,Wx=Wl=1时的三位元纠错示意图;
图23是本申请实施例中Wx=3,Wy=Wl=Wr=1时的三位元纠错示意图;
图24是本申请实施例中Wy=3,Wx=Wl=Wr=1时的三位元纠错示意图;
图25是本申请实施例中Wx=Wy=1,Lp>Lb时的三位元纠错示意图;
图26是本申请实施例中Wx=Wy=1,Lp<La时的三位元纠错示意图;
图27是本申请实施例中Wx=Wy=1,Rp>Ra时的三位元纠错示意图;
图28是本申请实施例中Wx=Wy=1,Rp<Rb时的三位元纠错示意图;
图29是本申请实施例中两横线、两纵线、两左斜线、一右斜线纠错示意图;
图30是本申请实施例中两横线、两纵线、三左斜线、两右斜线纠错示意图;
图31是本申请实施例中一横线、两纵线、两右斜线纠错示意图;
图32是本申请实施例中两横线、两纵线、两右斜线纠错示意图;
图33是本申请实施例中一横线、两纵线、两左斜线纠错示意图;
图34是本申请实施例中两横线、两纵线、两左斜线纠错示意图;
图35是本申请实施例中两横线、一左斜线、两右斜线纠错示意图;
图36是本申请实施例中三横线、两左斜线、两右斜线纠错示意图;
图37是本申请实施例中两纵线、两左斜线、一右斜线纠错示意图;
图38是本申请实施例中三纵线、两左斜线、两右斜线纠错示意图;
图39是本申请实施例提供的终端设备的一个具体示例的结构示意图;
图40是本申请实施例提供的终端设备的另一个具体示例的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。
数据存储通常分为数据写入和数据读出两个阶段。在数据写入阶段,需要生成原始数据的纠错码,并将原始数据连同纠错码一并写入。在数据读出阶段,需要计算所读出数据的纠错码,并与所读取的纠错码进行比较,从而检测是否发生误码,若是,则根据比较结果将误码纠正。
在生成纠错码时,可以首先以约定的位元数D为单位,将D个位元的所有数据位元按一定的顺序逐位地排列到m*n的二维位元矩阵中;接着,以横、纵、45°左斜和45°右斜等四个方向逐位地生成由四部分组成的、总长为3m+3n-2位的纠错码。具体的,纠错码中的各位元可以采用异或运算来生成,其中,横向子纠错码长度为m位,纵向子纠错码为n位,左斜向子纠错码和右斜向子纠错码均为m+n-1位。
在利用纠错码进行纠错时,可以首先按前述生成纠错码的过程生成对应的计算纠错码;接着,将算出的计算纠错码与所读取的纠错码进行异或运算,得到横向结果子串、纵向结果子串、左斜向结果子串和右斜向结果子串等结果串,用于纠错处理。若结果串为零,表明数据正确,无需纠错;若结果串非零,表明数据有误,则在横向结果子串所有位元1对应的矩阵行划横线,在纵向结果子串所有位元1对应的矩阵列划纵线,在左斜向结果子串所有位元1对应的矩阵斜排划左斜线,在右斜向结果子串所有位元1对应的矩阵斜排划右斜线,并根据该四个方向的交叉线来锁定一位、两位或三位的误码位元位置。
由于单个FLASH存储页中误码位元数的出现概率是随着位数的增大而急剧下降的,故纠错判断中将出现概率的高低作为抉择的依据,在多种可能的错误组合中,将概率高的情形判定为选择结果。
由于本申请实施例提出的纠错算法在纠错运算时,采用了横向、纵向、左斜向和右斜向等四个方向的交叉线段来确定错误的位元,故称之为四向交叉算法。
在一些实施例中,如图1所示,可以采用以下几个步骤实现NAND FLASH存储器的存储校验:
步骤S101:在数据写入时,获取原始数据,并基于原始数据生成矩阵。
在一具体实时方式中,为了生成原始数据的矩阵,可以首先确定矩阵的行数和列数;在基于行数和列数,将原始数据的位元按照第一预设顺序排列为矩阵。
以约定的二进制位元数D为单位,将D个位元的所有原始数据按约定的第一顺序逐位地、紧凑地排列到m行*n列的二维位元矩阵中,矩阵中的每个元素放入一个位元。其中,位元数D的大小应根据NAND FLASH存储页中数据区(存放数据)和冗余区(存放纠错码)两者的大小来约定。原则上,所选择的D值应使得该数据位元和相应的纠错码所占的空间尽可能地接近但不大于两者的空间。若纠错码的长度大于冗余区的长度,纠错码可以占用部分数据区空间,即纠错码中的一部分跨区存放在数据区中,纠错码中的另一部分存放在冗余区中。
纠错码的长度Lc取决于m和n的取值。由于m和n的取值取决于D,故纠错码的长度Lc最终取决于D。
m和n均为正整数,其大小应根据D来确定。在实际应用中,可以使m和n的乘积等于或略大于D,且m和n之和尽可能达到或接近其所有可能组合中的最小值,以使得后续生成的纠错码的长度Lc尽可能小。可以基于公式
Figure BDA0002078169680000071
确定矩阵的行数m和列数n,D由NAND FLASH存储器中每个存储页的数据区和冗余区的字节数确定。通常,D取8的整数倍,便于以字节为单位来进行数据操作。这里D是指位元长度,表示原始数据的位元数,不包含纠错码的长度。
数据区的所有数据字节放入矩阵的排列方式可以约定为依字节从左到右、从上到下的顺序;也可以约定为依字节从上到下、从左到右的顺序;还可以是从左到右、从下到上,或从上到下、从右到左,或从右到左、从上到下,或从右到左、从下到上,或从下到上、从左到右,或从下到上、从右到左等顺序组合中的一种。从左到右、从上到下的顺序,是指先将数据字节从左到右逐位地排列到矩阵的第一行,当本行排满时,即转入第二行,并从左到右逐位地排列到矩阵的第二行……如此地不断往后排列,直到排列完毕。
从上到下、从左到右的顺序,是指先将数据字节从上到下逐位地排列到矩阵的第一列,当本列排满时,即转入第二列,并从上到下逐位地排列到矩阵的第二列……如此地不断往后排列,直到排列完毕。其它排列顺序,可以依此类推。
至于单个字节的8个位元填入矩阵的次序,可以先放最高位再放次高位,也可以先放最低位再放次低位。通常各字节选定同一次序存放。
当所有数据填充完毕后矩阵未被填满时,矩阵中未填满位元全部置零。
作为例子,表1列出了几种典型规格的NAND FLASH的D、m、n和Lc的推荐约定值。
表1
规格(数据区+冗余区) D m*n L<sub>c</sub>
512字节+16字节 480*8位 62位*62位 370位
2048字节+64字节 2016*8位 127位*127位 760位
4096字节+128字节 4072*8位 181位*180位 1081位
以规格为2048字节+64字节的NAND FLASH为例子来说明表1中各个数值的计算过程。首先,对应的存储页总位元数=(2048+64)*8=16896;其次,判断纠错码是否要跨区;若纠错码不跨区,数据位元数D=2048*8=128*128,即m=n=128,则Lc=3m+3n-2=3*128+3*128-2=766(位)=766/8(字节)=383/4=95.75(字节)。显然,Lc>冗余区大小64字节,即该存储页无法存放下2048字节的数据及其纠错码。因此,原始数据应小于2048字节,纠错码应大于64字节,也就是说纠错码要跨区。尝试逐步减小m和n的值。
设m=128,n=127,则D=128*127=16256,Lc=3*128+3*127-2=763位;位元总长度=D+Lc=17019位>页总位元数16896,故不满足条件。
设m=127,n=127,则D=127*127位=16129位≈2016.1字节,Lc=3*127+3*127-2=760位;位元总长度=D+Lc=16889位<页总位元数16896,故已满足条件。以字节为单位取整后,D=2016字节。
作为例子,以下示意了按照从左到右、从上到下的第一预设顺序,将原始数据的位元排列为矩阵。假设D=64、m=8、n=8,8个字节的原始数据依次为00、01、02、03、04、05、06、07(以十六进制表达),约定单个字节内的次序是先放入高位,则按从左到右、从上到下的第一预设顺序排列的二进制位元矩阵如图2所示。
步骤S102:基于矩阵生成原始纠错码。具体的,原始纠错码包括横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码。
可以将矩阵的每一列中的位元逐位进行异或运算,得到对应的横向子纠错码。具体的,可以将矩阵中第一列的各行值进行异或,得到横向子纠错码中的第一位元;再将矩阵中第二列的各行值进行异或,得到横向子纠错码中的第二位元。如此重复,直到最后将矩阵中第n列的各行值进行异或,得到横向子纠错码中的第n位元。因横向子纠错码在相应的矩阵示意图中横向排列,故在本申请中称为横向子纠错码。
横向子纠错码中第j位元的生成公式,可用数学式表示为:
H(j)=a1j^a2j^…^amj
其中,H(j)表示横向子纠错码中的第j位元;aij表示矩阵中第i行、第j列的值,i是1~m的整数,j是1~n的整数,^是异或运算符。
可以将矩阵的每一行中的位元逐位进行异或运算,得到纵向子纠错码。具体的,可以将矩阵中第一行的各列值进行异或,得到纵向子纠错码中的第一位元;再将矩阵中第二行的各列值进行异或,得到纵向子纠错码中的第二位元。如此重复,直到最后将矩阵中第m行的各列值进行异或,得到纵向子纠错码中的第m位元。因纵向子纠错码在相应的矩阵示意图中纵向排列,故在本申请中称为纵向纠错码。
纵向纠错码中第i位元的生成公式,可用数学式表述为:
V(i)=ai1^ai2^…^ain
其中,V(i)表示纵向子纠错码中的第i位元;aij表示矩阵中第i行、第j列的值,i是1~m的整数,j是1~n的整数。
可以将矩阵的左预设斜向中的位元逐位进行异或运算,得到左斜向子纠错码。
假设矩阵中的各元素在平面的横、纵方向上等距排列,划45°的左斜线,该45°的左斜线即左预设斜向。利用45°的左斜线穿过矩阵中的元素,并将该45°的左斜线穿过的元素集合称为一左斜排。将左上角的斜排称为第一左斜排,次左上角的斜排称为第二左斜排,后面的斜排依此类推,如图3所示。
将矩阵中第一左斜排的各元素值进行逐位异或,得到左斜向子纠错码第一位元;再将矩阵中第二左斜排的各元素值进行逐位异或,得到左斜向子纠错码第二位元。如此类推,直到最后将矩阵中第m+n-1左斜排的各元素值进行逐位异或,得到左斜向子纠错码中的第m+n-1位元。
假设n≥m,则左斜向子纠错码中第k位元的生成公式,可用数学式表述为:
L(k)=ak,1^ak-1,2^…^a1,k,0<k≤m
L(k)=am,k-m+1^am-1,k-m+2^…^a1,k,m<k≤n
L(k)=am,k-m+1^am-1,k-m+2^…^ak-n+1,n,n<k≤m+n-1
其中,L(k)表示左斜向子纠错码中第k位元;aij表示矩阵中第i行、第j列的值,aij对应的左斜排的序号为i+j-1,i是1~m的整数,j是1~n的整数,k是1~m+n-1的整数。
若n<m,则左斜向子纠错码中第k位元的生成公式,可用数学式表述为:
L(k)=a1,k^a2,k-1^…^ak,1,0<k≤n
L(k)=ak-n+1,n^ak-n+2,n-1^…^ak,1,n<k≤m
L(k)=ak-n+1,n^ak-n+2,n-1^…^am,k-m+1,m<k≤m+n-1
其中,L(k)表示左斜向子纠错码中第k位元;aij表示矩阵中第i行、第j列的值,aij对应的左斜排的序号为i+j-1,i是1~m的整数,j是1~n的整数,k是1~m+n-1的整数。
将矩阵的右预设斜向中的位元逐位进行异或运算,得到右斜向子纠错码。假设矩阵中的各元素在平面的横、纵方向上等距排列,划45°的右斜线,该45°的右斜线即右预设斜向。利用45°的右斜线穿过矩阵中的元素,并将45°的右斜线穿过的元素集合称为一右斜排。将右上角的斜排称为第一右斜排,次右上角的斜排称为第二右斜排,后面的斜排依此类推,如图4所示。
将矩阵中第一右斜排的各元素值进行逐位异或,得到右斜向子纠错码第一位元;再将矩阵中第二右斜排的各元素值进行逐位异或,得到右斜向子纠错码第二位元……如此类推,直到最后将矩阵中第m+n-1右斜排的各元素值进行逐位异或,得到右斜向子纠错码中的第m+n-1位元。
假设n≥m,则右斜向纠错码中第k位元的生成公式,可用数学式表述为:
R(k)=ak,n^ak-1,n-1^…^a1,n-k+1,k≤m
R(k)=am,n-k+m^am-1,n-k+m-1^…^a1,n-k+1,m<k≤n
R(k)=am,n-k+m^am-1,n-k+m-1^…^ak-n+1,1,n<k≤m+n-1
其中,R(k)表示右斜向子纠错码中的第k位元,aij表示矩阵中第i行、第j列的值,aij对应的右斜排的序号为i+n-j,i是1~m的整数,j是1~n的整数,k是1~m+n-1的整数。
若n<m,则右斜向纠错码中第k位元的生成公式,可用数学式表述为:
R(k)=ak,n^ak-1,n-1^…^a1,n-k+1,k≤n
R(k)=ak,n^ak-1,n-1^…^ak-n+1,1,n<k≤m
R(k)=am,m-k+n^am-1,m-k+n-1^…^ak-n+1,1,m<k≤m+n-1
其中,R(k)表示右斜向子纠错码中的第k位元,aij表示矩阵中第i行、第j列的值,aij对应的右斜排的序号为i+n-j,i是1~m的整数,j是1~n的整数,k是1~m+n-1的整数。
将横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码按照第二预设顺序组合为原始纠错码。在实际应用中,将可以生成的四个子纠错码码元拼接合并在一起,得到最终的3m+3n-2位的原始纠错码。四个子纠错码的相对顺序可以任意约定,例如,可以先放入n位的横向子纠错码,再拼接m位的纵向子纠错码,最后依次拼接m+n-1位的左斜向子纠错码和m+n-1位的右斜向子纠错码,此时,对应的第二预设顺序为横向子纠错码+纵向子纠错码+左斜向子纠错码+右斜向子纠错码。
步骤S103:将原始数据和原始纠错码写入NAND FLASH存储器中。
步骤S104:在数据读出时,从NAND FLASH存储器中读取与原始数据对应的读出数据和与原始纠错码对应的校验纠错码。
从NAND FLASH的存储页中读出数据区和冗余区的所有数据,其中包括约定的D位元的读取数据A和3m+3n-2位元的校验纠错码B。显然,校验纠错码B由横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码等四部分组成,依次简写为Bx、By、Bl和Br。
步骤S105:基于生成原始数据的原始纠错码的方式,生成读出数据的计算纠错码。可以按照前述的原始纠错码生成方法,计算出读取数据A对应的3m+3n-2位元的计算纠错码B’。显然,计算纠错码B’也由横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码等四部分组成,依次简写为B’x、B’y、B’l和B’r。
步骤S106:将读出数据的计算纠错码与校验纠错码进行比较,获得校验结果,并在校验结果为读出数据出现错误时,对读出数据进行纠错处理。
将计算出的计算纠错码B’与读取出的校验纠错码B的对应位元进行两两异或,得到3m+3n-2位元的校验数据串C。显然,校验数据串C包括横向校验子串、纵向校验子串、左斜向校验子串和右斜向校验子串等四部分,依次简写为Cx、Cy、Cl和Cr。在一个具体示例中,若校验纠错码B=00000001,计算纠错码B’=00010000,则校验数据串C=00000001^00010000=00010001。
若校验数据串C中的位元均为0,则确定读出数据A和校验纠错码B正确;若校验数据串C中的位元包括非0,则读出数据A或校验纠错码码B错误。在读出数据A错误时,需要对读出数据A进行纠错处理。
在本申请中,定义指示码重的变量Wx指示指示横向校验子串Cx的码重,即横向校验子串Cx中位元1的个数;Wy指示指示纵向校验子串Cy的码重,即纵向校验子串Cy中位元1的个数;Wl指示指示左斜向校验子串Cl的码重,即左斜向校验子串Cl中位元1的个数;Wr指示指示右斜向校验子串Cr的码重,即右斜向校验子串Cr中位元1的个数。码重是指校验数据串C中各个子串所有1位元的个数达到的变量。在一个具体示例中,若横向校验子串Cx=10000001,则Wx=2。
在本申请中,定义指示1位元序号的数组Ax[3]、Ay[3]、Al[3]、Ar[3],依次指示子串Cx、Cy、Cl、Cr中前三个1位元在本子串中的序号,约定子串首位的序号为1、次位为2、…、如此逐位依次增一。分别计算子串Cx、Cy、Cl、Cr中前三个1位元在本子串中的序号,并赋值给相应的数组变量Ax[3]、Ay[3]、Al[3]、Ar[3]。当子串中不足三个1位元时,则将未赋值的元素赋值为0。例如,若Cx=10000001,则Ax[0]=1、Ax[1]=8、Ax[2]=0。
在读出数据A所排列的m*n矩阵中采用横线、纵线、左斜线、右斜线交叉法,根据校验数据串C的值来划线确定错误位元位置并进行纠错处理。可以对横向校验子串Cx中所有1位元对应的矩阵行划横线;对纵向校验子串Cy中所有1位元对应的矩阵列划纵线;对左斜向校验子串Cl中所有1位元对应的矩阵斜排划左斜线;对右斜向校验子串Cr中所有1位元对应的矩阵斜排划右斜线。这里所划的线,在方案原理的阐述和示意上,是物理的、可见的线,在算法实现中却是逻辑的、虚拟的、不可见的线。
以下为了细节描述的简洁性,定义如下简称和概念:
将横向校验子串Cx中第一、二、三个1位元的序号Ax[0]、Ax[1]、Ax[2]依次简称为X1、X2、X3
将纵向校验子串Cy中第一、二、三个1位元的序号Ay[0]、Ay[1]、Ay[2]依次简称为Y1、Y2、Y3
将左斜向校验子串Cl中第一、二、三个1位元的序号Al[0]、Al[1]、Al[2]依次简称为L1、L2、L3
将右斜向校验子串Cr中第一、二、三个1位元的序号Ar[0]、Ar[1]、Ar[2]依次简称为R1、R2、R3
在矩阵的任意两行中划两条横线、任意两列中划两条纵线,得到四个交点,如图5所示,将这四个交点按从左到右、从上到下的顺序依次约定其标示号T1、T2、T3、T4,以方便后续算法中引用和描述。其中,T1是左上角交点、T2是右上角交点、T3是左下角交点、T4是右下角交点。
若横线、纵线、左斜线、右斜线等中间的任意三线交于同一点,则称该交点为三线交点;若横线、纵线、左斜线、右斜线等四线交于同一点,则称该交点为四线交点。
对于序号为Y的横线、序号为X纵线,若第三线是序号为L的左斜线,且满足等式:Y+X-1=L,则此三线相交于同一点,即形成了一个三线交点,或者说左斜线经过横线与纵线的交点。若第三线是序号为R的右斜线,且满足等式:Y+n-X=R,则此三线相交于同一点,即形成了一个三线交点,或者说右斜线经过横线与纵线的交点。若第三线是序号为L的左斜线、第四线是序号为R的右斜线,且同时满足等式:Y+X-1=L、Y+n-X=R,则此四线相交于同一点,即形成了一个四线交点,或者说左斜线与右斜线均经过横线与纵线的交点。
下文中判断横线、纵线、左斜线等三线交于同一点,或者判断左斜线经过横线与纵线的交点,是指满足等式:Y+X-1=L;判断横线、纵线、右斜线等三条线交于同一点,或者判断右斜线经过横线与纵线的交点,是指满足等式:Y+n-X=R;判断横线、纵线、左斜线、右斜线等四线交于同一点,或者判断左、右斜线均经过横线与纵线的交点,是指同时满足等式:Y+X-1=L、Y+n-X=R。
对于序号为L的左斜、序号为R的右斜线,若第三线是序号Y的横线,且满足等式:2Y+n-1=L+R,则此三线相交于同一点;若第三线是序号为X纵线,且满足等式:n-2X+1=R-L,则此三线相交于同一点。
下文中判断横线、左斜线、右斜线等三线交于同一点,是指满足等式:2Y+n-1=L+R;判断纵线、左斜线、右斜线等三线交于同一点,是指满足等式:n-2X+1=R-L。
在矩阵的任意三行中划三条横线、任意三列中划三条纵线,得到九个交点,如图6所示,将这九个交点按从左到右、从上到下的顺序依次约定其标示号S1、S2、…、S9,以方便后续算法中引用和描述。
若Wx、Wy、Wl和Wr均为0,则判断读出数据A没有误码,故不需要纠错。
当Wx=Wy=Wl=Wr=1且所述矩阵中存在一个四线交点时,所述读出数据中有一个位元发生错误,将所述矩阵中对应的四线交点处的位元取反。
其中,四线交点为横线、纵线、左斜线和右斜线相交的交点。横线为所述横向校验子串中的位元1在所述矩阵中对应行所在的横线,所述纵线为所述纵向校验子串中的位元1在所述矩阵中对应列所在的纵线,所述左斜线为所述左斜向校验子串中的位元1对应的所述矩阵中的左预设斜向所在的斜线,所述右斜线为所述右斜向校验子串中的位元1对应的所述矩阵中的右预设斜向所在的斜线。
具体的,若Wx=Wy=Wl=Wr=1,则进行一位误码的纠错处理。此时,可划横线、纵线、左斜线和右斜线各一条,横线与纵线的交点E1为(Y,X)。若四线交于同一点,则表明读出数据A中有一位误码,将交点E1处的位元取反后,错误即得到纠正。
作为例子,图7演示了在一个8*8的数据矩阵中根据Cx、Cy、Cl、Cr的值划交叉线的情形。假设Cx=00000100、Cy=01000000、Cl=000000100000000、Cr=000100000000000,则L1=7、R1=4。横线与纵线的交点E1为(2,6),对应于矩阵中的a26元素,即第2行第6列。验算X+Y-1=7、Y+n-X=4,显然左斜线、右斜线均经过交点E1,于是可以确定E1所在的位元值发生错误,将交点E1所在的位元值取反纠错后,即完成了纠错处理。
若X+Y-1与L1不等,或Y+n-X与R1不等,即四线未交于同一点,则表明校验纠错码B中存在误码。
当Wx=Wy=Wl=Wr=2且所述矩阵中存在两个四线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中对应的两个四线交点处的位元取反。
Wx=Wy=Wl=Wr=2对应于两横线、两纵线、两左斜线、两右斜线交于两点的情形。当Wx=Wy=Wl=Wr=2且T1和T4均为四线交点,或者T2和T3均为四线交点时,表明读出数据A中有两位误码,则确定出同时通过四条线的两交点位置,再将两个交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。这里,T1、T2、T3和T4分别对应于图5中所示意的交点位置。
作为例子,本申请实施例提供了用于确定两横线、两纵线、两左斜线、两右斜线交于两个交点位置的方法。两横线与两纵线共产生四个交点,遍历此四个交点,逐个计算出它们的左斜排序号L。再检查L是否等于L1或L2;若成立,则该交点是所定位的四线交点。如此,共可得到两个交点。通过适当的组合变化,还可以得到多种类似的方法,在此不再赘述。
例如,设Cx=00010100、Cy=00110000、Cl=000001001000000、Cr=000001100000000。显然,X1=4,X2=6,Y1=3,Y2=4,L1=6,L2=9,R1=6,R1=7。于是,T1(3,4),T2(3,6),T3(4,4),T4(4,6)。遍历得出所求交点为T1和T4,即图8中所述的E1(3,4)、E2(4,6),依次对应于矩阵中的a34、a46元素,将该两交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wy=Wl=2,Wr=0且靠左的左斜线经过T1,靠右的左斜线经过T4时,所述读出数据中有两个位元发生错误,将所述矩阵中T1和T4处的位元取反。
Wx=Wy=Wl=2,Wr=0对应于两横线、两纵线、两左斜线交于两点的情形。若Wx=Wy=Wl=2,Wr=0,且靠左的左斜线经过点T1,靠右的左斜线经过点T4时,表明读取数据A中有两位误码。这里,T1、T4分别对应于图5中所示意的左上角和右下角交点位置。依几何分析,交点T1、T4的位置即误码的位置,即E1、E2的位置,将此处的两位元值分别取反后,错误即得到纠正。
例如,设Cx=00101000、Cy=01010000、Cl=000100010000000、Cr=000000000000000。显然,X1=3,X2=5,Y1=2,Y2=4,L1=4,L2=8。如图9所示,靠左的斜线经过点T1,靠右的斜线经过点T4,因此,E1位置为(2,3)、E2位置为(4,5)。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wy=Wr=2,Wl=0且靠右的右斜线经过T2,靠左的右斜线经过T3时,所述读出数据中有两个位元发生错误,将所述矩阵中T2和T3处的位元取反。
Wx=Wy=Wr=2,Wl=0对应于两横线、两纵线、两右斜线交于两点的情形。若Wx=Wy=Wr=2,Wl=0,且靠右的右斜线经过点T2,靠左的右斜线经过点T3时,表明读取数据A中有两位误码。这里,T2、T3分别对应于图5中所示意的右上角和左下角交点位置。依几何分析,交点T2、T3的位置即误码的位置,即E1、E2的位置,将此处的两位元值分别取反后,错误即得到纠正。
例如,设Cx=00010100、Cy=01010000、Cl=000000000000000、Cr=000100010000000。显然,X1=4,X2=6,Y1=2,Y2=4,R1=4,R2=8。如图10所示,靠右的斜线经过点T2,靠左的斜线经过点T3,因此,E1位置为(4,4)、E2位置为(2,6)。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
当Wy=Wl=Wr=2,Wx=0且靠左的左斜线、靠右的右斜线和靠上的横线相交于第一三线交点,靠右的左斜线、靠左的右斜线和靠下的横线相交于第二三线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中第一三线交点和第二三线交点处的位元取反。
Wy=Wl=Wr=2,Wx=0对应于两横线、两左斜线、两右斜线交于两点的情形。若Wy=Wl=Wr=2,Wx=0,且靠左的左斜线、靠右的右斜线与靠上的横线相交于一点,靠右的右斜线、靠左的右斜线与靠下的横线交于一点,表明读取数据A中有两位误码。
简单来说,靠左的左斜线与靠上的横线的交点即E1;靠右的左斜线L2与靠下的横线Y2的交点即E2。将此处的两位元值分别取反后,错误即得到纠正。
例如,设Cx=00000000、Cy=01010000、Cl=000001010000000、Cr=000010100000000。显然,Y1=2,Y2=4,L1=6,L2=8,R1=4,R2=8。如图11所示,E1位置为(2,5)、E2位置为(4,5)。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wl=Wr=2,Wy=0且靠左的左斜线、靠左的右斜线和靠左的纵线相交于第三三线交点,靠右的左斜线、靠右的右斜线和靠右的纵线相交于第四三线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中第三三线交点和第四三线交点处的位元取反。
Wx=Wl=Wr=2,Wy=0对应于两横线、两左斜线、两右斜线交于两点的情形。若Wx=Wl=Wr=2,Wy=0,且靠左的左斜线、靠左的右斜线与靠左的纵线相交于一点,靠右的左斜线、靠右的右斜线与靠右的纵线交于一点,表明读取数据A中有两位误码。
简单来说,靠左的左斜线与靠左的纵线的交点即E1;靠右的左斜线与靠右的纵线的交点即E2。将此处的两位元值分别取反后,错误即得到纠正。
例如,设Cx=00010100、Cy=00000000、Cl=000001010000000、Cr=000010100000000。显然,X1=4,X2=6,L1=6,L2=8,R1=5,R2=7。如图12所示,E1位置为(3,4)、E2位置为(3,6)。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wy=Wl=Wr=3且所述矩阵中存在三个四线交点时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的三个四线交点处的位元取反。
作为例子,本申请实施例提供了用于确定Wx=Wy=Wl=Wr=3情况下三个四线交点的方法。显然,三横线与三纵线共产生九个交点。遍历此九个交点,逐个计算出它们的左斜排序号和右斜排序号。再检查左斜排序号是否等于L1、L2或L3,右斜排序号是否等于R1、R2或R3;若此两项同时成立,则该交点是所定位的四线交点,此时共可得到三个交点。通过适当的组合变化,还可以得到多种类似的方法,在此不再赘述。
作为例子,图13演示了在一个8*8的数据矩阵中根据Cx、Cy、Cl、Cr的值划交叉线的情形,假设Cx=01001010、Cy=01010001、Cl=001000010000010、Cr=000000111000000。遍历得出四线交点位置共三处,分别为E1(2,2)、E2(4,5)、E3(8,7),依次对应于矩阵中的a22、a45、a87元素,将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wy=Wl=3,Wr=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条纵线构成的四个交点中,选取对应的T1和T4,将所述矩阵中对应的T1和T4处的位元取反。
采用与前述类似的遍历法来确定四线交点。显然,三横线与三纵线共产生九个交点。遍历此九交点,逐个计算出它们的左斜排序号和右斜排序号;再检查左斜排序号是否等于L1、L2或L3,且右斜排序号是否等于R1、R2或R3;若此两项同时成立,则该交点是所定位的四线交点,此时可得到唯一的一个四线交点。通过适当的组合变化,还可以得到多种类似的方法,在此不再赘述。
采用几何分析法确定另外的两个交点。显然,除去上一步中四线交点所通过的一条横线和一条纵线后,还剩下两条横线和两条纵线。它们相交成四点、且组成正方形,所求的两交点只能位于该正方形的对角线上;又由于须另有两条左斜线通过,故所求的两交点只能是该正方形右斜对角线上的两顶点,即:正方形左上角的一个顶点和右下角的一个顶点。
例如,设Cx=01001010、Cy=01100001、Cl=000101000000010、Cr=000010000000000。如图14所示,遍历得出四线交点位置为E1(2,5),对应于矩阵中的元素a25;采用几何分析法,可得到另外两交点位置,对应于矩阵中的元素a32、a87,交点为E2(3,2)、E3(8,7),将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wy=Wr=3,Wl=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条纵线构成的四个交点中,选取对应的T2和T3,将所述矩阵中对应的T2和T3处的位元取反。
采用与前述类似的遍历法来确定四线交点。例如,设Cx=00001110、Cy=01110000、Cl=000001000000000、Cr=000111000000000。如图15所示,遍历得出四线交点位置为E1(2,5),对应于矩阵中的元素a25;采用几何分析法,可得到另外两交点位置,对应于矩阵中的元素a37、a46,交点为E2(3,7)、E3(4,6),将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wy=Wl=Wr=3,Wx=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条左斜线中,选取靠上的横线和靠左的左斜线相交构成的第五三线交点,以及靠下的横线和靠右的左斜线相交构成的第六三线交点,将所述矩阵中第五三线交点和第六三线交点处的位元取反。
本组合中,可划出一条纵线和三条横线,由此产生三个交点。遍历此三个交点,逐个计算出它们的左斜排序号和右斜排序号。再检查左斜排序号是否等于L1、L2或L3,且右斜排序号是否等于R1、R2或R3;若此两项同时成立,则该交点是所定位的四线交点,此时仅可得到一个交点E1。
采用几何分析法确定另外的两个交点。显然,除去上一步中四线交点所通过的四条线以及余下右斜线后,还剩下两条横线和两条左斜线。在剩下的这四条线中,靠上的横线与靠左的左斜线形成的交点即所求的第二个交点E2,靠下的横线与靠右的左斜线形成的交点即所求的第三个交点E3。
例如,设Cx=00001000、Cy=10110000、Cl=001010010000000、Cr=000001110000000。如图16所示,遍历得出四线交点位置为E1(4,5),对应于矩阵中的元素a45;采用几何分析法,可得到另外两交点位置E2(1,3)和E3(3,3),将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wl=Wr=3,Wy=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条纵线和两条左斜线中,选取靠左的纵线和靠左的左斜线相交构成的第七三线交点,以及靠右的纵线和靠右的左斜线相交构成的第八三线交点,将所述矩阵中第七三线交点和第八三线交点处的位元取反。
本组合中,可划出一条横线和三条纵线,由此产生三个交点。遍历此三个交点,逐个计算出它们的左斜排序号和右斜排序号。再检查左斜排序号是否等于L1、L2或L3,且右斜排序号是否等于R1、R2或R3;若此两项同时成立,则该交点是所定位的四线交点,此时仅可得到一个交点E1。
采用几何分析法确定另外的两个交点。显然,除去上一步中四线交点所通过的四条线以及余下右斜线后,还剩下两条纵线和两条左斜线。在剩下的这四条线中,靠左的纵线与靠左的左斜线形成的交点即所求的第二个交点E2,靠右的纵线与靠右的左斜线形成的交点即所求的第三个交点E3。
例如,设Cx=00010110、Cy=01000000、Cl=000010011000000、Cr=000111000000000。如图17所示,遍历得出四线交点位置为E1(2,4),对应于矩阵中的元素a24;采用几何分析法,可得到另外两交点位置E2(3,6)和E3(3,7),将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wy=3,Wl=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和一条右斜线确定对应的辅助交点P0,并根据对应的辅助交点P0确定三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
设辅助交点P0为P0(a,b),由于它同时通过序号为L1的左斜线和序号为R1的右斜线,故可列出如下关于a、b的二元一次方程组:
a+b-1=L1
a+n-b=R1
依此解得:a=(L1+R1+1–n)/2,b=(L1-R1+1+n)/2。
采用分析法按如下步骤确定三个目标交点:
若a>Y3,则当b<X2时三目标交点对应于图6中的S2、S6、S7;当b>X2时对应于图6中的S2、S4、S9。
若a<Y1,则当b<X2时三目标交点对应于图6中的S1、S6、S8;当b>X2时对应于图6中的S3、S4、S8。
若a在Y1~Y3范围内、且b<X1,则当a<Y2时三目标交点对应于图6中的S1、S6、S8;当b>X2时对应于图6中的S2、S6、S7。
若a在Y1~Y3范围内、且b>X3,则当a<Y2时三目标交点对应于图6中的S3、S4、S8;当b>X2时对应于图6中的S2、S4、S9。
例如,设Cx=00010110、Cy=01110000、Cl=000010000000000、Cr=000100000000000。如图18所示,两斜线形成的辅助交点位置为S1、S6、S8,对应于元素a24、a37、a46,交点为E1(2,4)、E2(3,7)、E3(4,6),将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wl=3,Wy=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条右斜线和三条纵线确定对应的临时交点Q1,并根据对应的临时交点Q1确定对应的临时交点Q2和临时交点Q3;当临时交点Q2和临时交点Q3位于同一条右斜线上时,确定临时交点Q1、临时交点Q2和临时交点Q3为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
本组合中,可划出一条右斜线和三条纵线,由此产生三个交点。遍历此三个交点,逐个计算出它们的左斜线序号L。再检查左斜线序号L是否等于L1、L2或L3;若成立,则该交点为临时交点Q1,设其位置为(i,j)。
以下列出求左斜线序号L的过程:
已知右斜线序号为R、当前纵线序号为X,设当前遍历交点位置为(a,b),则:
a+n-b=R
b=X
解得,a=R+X-n,b=X;再计算左斜线序号L=a+b-1=R+2X-n-1。
采用几何分析法推断另外的两个交点并检验交点的正确性。显然,除去通过交点Q1的纵线和左斜线后,还剩下两条纵线和两条左斜线。在剩下的这四条线中,设靠左的纵线序号为Xa、左斜线序号为La,设靠右的纵线序号为Xb、左斜线序号为Lb,设唯一的一条横线的序号为Y。那么,靠左的纵线与靠左的左斜线形成的交点为第二临时交点Q2、靠右的纵线与靠右的左斜线形成的交点为第三临时交点Q3。若i>Y,则Q2位置为(Y,Xa),Q3位置为(i,Xb);若i<Y,则Q2位置为(i,Xa),Q3位置为(Y,Xb)。
接着检查Q2与Q 3是否位于同一条右斜线上,若否,则继续上述交点遍历过程与验证过程,直到此判断成立。若此判断成立,则所求的临时交点即为最终的三个交点。
例如,设Cx=00001110、Cy=01000000、Cl=000001011000000、Cr=000100000000000。如图19所示,遍历得出交点Q1的位置为(3,7),由于Y=2、i=3、Xa=5、Xb=6,则Q2位置为(Y,Xa)、即(2,5),其右斜线序号为5,Q3位置为(i,Xb)、即(3,6),其右斜线序号也为5。两点的右斜线序号相等,表明两者位于同一右斜线上,因此所求三点为E1(3,7)、E2(2,5)、E3(3,6)。将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=Wr=3,Wy=Wl=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和三条纵线确定对应的临时交点Q1’,并根据对应的临时交点Q1’确定对应的临时交点Q2’和临时交点Q3’;当临时交点Q2’和临时交点Q3’位于同一条左斜线上时,确定临时交点Q1’、临时交点Q2’和临时交点Q3’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
本组合中,可划出一条左斜线和三条纵线,由此产生三个交点。遍历此三个交点,逐个计算出它们的右斜线序号R。再检查右斜线序号R是否等于R1、R2或R3;若成立,则该交点为临时交点Q1’,设其位置为(i,j)。
以下列出求右斜线序号R过程:
已知左斜线序号为L、当前纵线序号为X,设当前遍历交点位置为(a,b),则:
a+b-1=L
b=X
解得,a=L-X+1,b=X;再计算右斜线序号R=a+n-b=L-2X+n+1。
采用几何分析法推断另外的两个交点并检验交点的正确性。显然,除去通过临时交点Q1’的纵线和右斜线后,还剩下两条纵线和两条右斜线。在剩下的这四条线中,设靠左的纵线序号为Xa、右斜线序号为Ra,设靠右的纵线序号为Xb、右斜线序号为Rb,设唯一的一条横线的序号为Y。那么,靠左的纵线与靠左的右斜线形成的交点为临时交点Q2’、靠右的纵线与靠右的右斜线形成的交点为临时交点Q3’。若i>Y,则临时交点Q2’位置为(i,Xa);临时交点Q3’位置为(Y,Xb)。若i<Y,则临时交点Q2’位置为(Y,Xa),临时交点Q3’位置为(i,Xb)。
接着检查临时交点Q2’和临时交点Q3’是否位于同一条左斜线上;若否,则继续上述交点遍历过程与验证过程、直到此判断成立。若此判断成立,则所求的临时交点即为最终的三个交点。
例如,设Cx=00011010、Cy=01000000、Cl=000000001000000、Cr=000110100000000。如图20所示,遍历得出临时交点Q1’的位置为(3,7),由于Y=2、i=3、Xa=4、Xb=5,则临时交点Q2’位置为(i,Xa)、即(3,4),其左斜线序号为6;临时交点Q3’位置为(Y,Xb)、即(2,5),其左斜线序号也为6。两点的左斜线序号相等,表明两者位于同一左斜线上,因此所求三点为E1(3,7)、E2(3,4)、E3(2,5)。将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wy=Wl=3,Wx=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条右斜线和三条横线确定对应的临时交点Q1”,并根据对应的临时交点Q1”确定对应的临时交点Q2”和临时交点Q3”;当临时交点Q2”和临时交点Q3”位于同一条右斜线上时,确定临时交点Q1”、临时交点Q2”和临时交点Q3”为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
本组合中,可划出一条右斜线和三条横线,由此产生三个交点。遍历此三个交点,逐个计算出它们的左斜线序号L。再检查左斜线序号L是否等于L1、L2或L3;若成立,则该交点为临时交点Q1”,设其位置为(i,j)。
以下列出求左斜线序号L的过程:
已知右斜线序号为R、当前横线序号为Y,设当前遍历交点位置为(a,b),则:
a+n-b=R
a=Y
解得,a=Y,b=Y+n-R;再计算左斜线序号L=a+b-1=2Y+n-R-1。
采用几何分析法推断另外的两个交点并检验交点的正确性。显然,除去通过临时交点Q1”的横线和左斜线后,还剩下两条横线和两条左斜线。在剩下的这四条线中,设靠上的横线序号为Ya、左斜线序号为La,设靠下的横线序号为Yb、左斜线序号为Lb,设唯一的一条纵线的序号为X。那么,靠上的横线与靠左的左斜线形成的交点为临时交点Q2”、靠下的横线与靠右的左斜线形成的交点为临时交点Q3”。若j>X,则临时交点Q2”位置为(Ya,X),临时交点Q3”位置为(Yb,j);若j<X,则临时交点Q2”位置为(Ya,j),临时交点Q3”位置为(Yb,X)。
接着检查临时交点Q2”和临时交点Q3”是否位于同一条右斜线上,若否,则继续上述交点遍历过程与验证过程、直到此判断成立。若此判断成立,则所求的临时交点即为最终的三个交点。
例如,设Cx=00001000、Cy=11010000、Cl=001100010000000、Cr=000001000000000。如图21所示,遍历得出临时交点Q1”的位置为(1,3),由于X=5、j=3、Ya=2、Yb=4,则临时交点Q2”位置为(Ya,j)、即(2,3),其右斜线序号为7;临时交点Q3”位置为(Yb,X)、即(4,5),其右斜线序号也为7。两点的右斜线序号相等,表明两者位于同一右斜线上,因此所求三点为E1(1,3)、E2(2,3)、E3(4,5)。将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wy=Wr=3,Wx=Wl=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和三条横线确定对应的临时交点Q1”’,并根据对应的临时交点Q1”’确定对应的临时交点Q2”’和临时交点Q3”’;当临时交点Q2”’和临时交点Q3”’位于同一条左斜线上时,确定临时交点Q1”’、临时交点Q2”’和临时交点Q3”’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
本组合中,可划出一条左斜线和三条横线,由此产生三个交点。遍历此三个交点,逐个计算出它们的右斜线序号R。再右斜线序号R是否等于R1、R2或R3;若成立,则该交点为临时交点Q1”’,设其位置为(i,j)。
以下列出求右斜线序号R过程:
已知左斜线序号为L、当前横线序号为Y,设当前遍历交点位置为(a,b),则:
a+b-1=L
a=Y
解得,a=Y,b=L-Y+1;再计算右斜线序号R=a+n-b=2Y+n-L-1。
采用几何分析法推断另外的两个交点并检验交点的正确性。显然,除去通过临时交点Q1”’的横线和右斜线后,还剩下两条横线和两条右斜线。在剩下的这四条线中,设靠上的横线序号为Ya、右斜线序号为Ra,设靠下的横线序号为Yb、右斜线序号为Rb,设唯一的一条纵线的序号为X。那么,靠上的横线与靠上的右斜线形成的交点为临时交点Q2”’、靠下的横线与靠下的右斜线形成的交点为临时交点Q3”’。若j>X,则临时交点Q2”’位置为(Ya,j),临时交点Q3”’位置为(Yb,X);若j<X,则临时交点Q2”’位置为(Ya,X),临时交点Q3”’位置为(Yb,j)。
接着检查临时交点Q2”’和临时交点Q3”’是否位于同一条左斜线上,若否,则继续上述交点遍历过程与验证过程、直到此判断成立。若此判断成立,则所求的临时交点即为最终的三个交点。
例如,设Cx=00000100、Cy=01110000、Cl=000000010000000、Cr=000101100000000。如图22所示,遍历得出临时交点Q1”’的位置为(4,5),由于X=6、j=5、Ya=2、Yb=3,则临时交点Q2”’位置为(Ya,X)、即(2,6),其左斜线序号为7,临时交点Q3”’位置为(Yb,j)、即(3,5),其左斜线序号也为7。两点的左斜线序号相等,表明两者位于同一左斜线上,因此所求三点为E1(4,5)、E2(2,6)、E3(3,5)。将该三交点(图中方框处)所在的位元值取反纠错后,即完成了纠错处理。
当Wx=3,Wy=Wl=Wr=1时,所述读出数据中有三个位元发生错误;确定对应的三条纵线中中间位置的纵线为第一对称轴,并根据第一对称轴确定辅助交点P1;计算辅助交点P1的虚拟左斜线序号,并根据辅助交点P1的虚拟左斜线序号确定对应的辅助交点P2和辅助交点P3;确定辅助交点P1、辅助交点P2和辅助交点P3为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
本组合中,共可划出一条横线(其序号为Y)、三条纵线(其序号依次为X1、X2、X3)、一条左斜线(其序号为L)和一条右斜线,它们以中间的纵线为对称轴成轴对称排列。横线与对称轴的交点为辅助交点P1,即所求交点E1(Y,X2)。
接着计算虚拟通过E1的左斜线序号Lt,Lt=Y+X2-1。若Lt<L,则靠右的纵线与左斜线的交点为辅助交点P2,即所求第二交点E2,位置为(L-X3+1,X3),于是辅助交点P3,即第三交点E3位置为(L-X3+1,X1);若Lt>L,则靠左的纵线与左斜线的交点为辅助交点P2,即所求第二交点E2,位置为(L-X1+1,X1),于是辅助交点P3,即第三交点E3位置为(L-X1+1,X3)。
例如,设Cx=00011100、Cy=01000000、Cl=000000010000000、Cr=000000100000000。如图23所示,横线与对称轴的交点位置为E1(2,5),E1的左斜线序号Lt=6。由于L=8、X1=4、X3=6,显然Lt<L,则E2位置为(L-X3+1,X3)、即(3,6),而E3位置为(3,4)。将该三交点(图中方框处)所在的位元值取反纠错后,即完成了纠错处理。
当Wy=3,Wx=Wl=Wr=1时,所述读出数据中有三个位元发生错误;确定对应的三条横线中中间位置的横线为第二对称轴,并根据第二对称轴确定辅助交点P1’;计算辅助交点P1’的虚拟左斜线序号,并根据辅助交点P1’的虚拟左斜线序号确定对应的辅助交点P2’和辅助交点P3’;确定辅助交点P1’、辅助交点P2’和辅助交点P3’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
本组合中,共可划出一条纵线(其序号为X)、三条横线(其序号依次为Y1、Y2、Y3)、一条左斜线(其序号为L)和一条右斜线,它们以中间的横线为对称轴成轴对称排列。纵线与对称轴的交点为辅助交点P1’,即所求交点E1(Y2,X)。
接着计算虚拟通过E1的左斜线序号Lt,Lt=Y2+X-1。若Lt<L,则靠下的横线与左斜线的交点为辅助交点P2’,即所求第二交点E2,位置为(Y3,L-Y3+1),于是辅助交点P3’,即第三交点E3位置为(Y1,L-Y3+1);若Lt>L,则靠上的横线与左斜线的交点为辅助交点P2’,即所求第二交点E2,位置为(Y1,L-Y1+1),于是辅助交点P3’,即第三交点E3位置为(Y3,L-Y1+1)。
例如,设Cx=00001000、Cy=01110000、Cl=000000001000000、Cr=000100000000000。如图24所示,纵线与对称轴的交点位置为E1(3,5),E1的左斜线序号Lt=7。由于L=9、Y1=2、Y3=4,显然Lt<L,则E2位置为(Y3,L-Y3+1)、即(4,6),而E3位置为(2,6)。将该三交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx=1,Wy=1时,根据所对应的一条横线和一条纵线确定对应的辅助交点P1”;计算辅助交点P1”的虚拟左斜线序号和虚拟右斜线序号,并根据辅助交点P1”的虚拟左斜线序号和虚拟右斜线序号确定对应的三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反。
在Wx=1,Wy=1的情况下,只能划一条横线和一条纵线,两线相交于辅助交点P1”。已知横线序号为Y、纵线序号为X,则辅助交点P1”位置为(Y,X),进而计算出辅助交点P1”所在的虚拟左斜线序号Lp=X+Y-1、虚拟右斜线序号Rp=Y+n-X。
定义如下简称:左斜线可能有一条或三条,设最左边的左斜线序号为La(当仅有一条左斜线时,La即等于该线序号,后述Ra同理)、最右边的左斜线序号为Lb(当仅有一条左斜线时,Lb即等于该线序号,后述Rb同理);右斜线可能有一条或三条,设最左边的右斜线序号为Ra、最右边的右斜线序号为Rb。
再进行如下分类处理:
若还满足Lp>Lb,表明读取数据A有三个位元发生错误,可划出三条右斜线。最右的右斜线与纵线的交点即所求的点E1,最左的右斜线与横线的交点即所求的点E2,过E1的横线与E2的纵线相交处即所求的点E3。最后将三个交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
以下是求三点的过程。
假设E1位置为(a,b),则:
a+n-b=Rb
b=X
解得,a=X+Rb-n,b=X,即E1位置为(X+Rb-n,X)。
假设E2位置为(a,b),则:
a+n-b=Ra
a=Y
解得,a=Y,b=Y-Ra+n,即E2位置为(Y,Y+n-Ra)。
因过E1的横线与E2的纵线相交处即所求的点E3,则E3位置为(X+Rb-n,Y+n-Ra)。
例如,设Cx=00000100、Cy=00010000、Cl=000001110000000、Cr=000110100000000。如图25所示,Y=4、X=6,辅助交点P1”位置为(4,6),则Lp=9;而Lb=8、Ra=7、Rb=4。显然Lp>Lb,表明符合此组合条件。E1为(X+Rb-n,X),即:(2,6);E2为(Y,Y+n-Ra),即(4,5);进而E3位置为(2,5)。将该三交点所在的位元值取反纠错后,即完成了纠错处理。
若还满足Lp<La,表明读出数据A有三个位元发生错误,可划出三条右斜线。最右的右斜线与横线的交点即所求的点E1,最左的右斜线与纵线的交点即所求的点E2,过E1的纵线与E2的横线相交处即所求的点E3。最后将三个交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
以下是求三点的过程。
假设E1位置为(a,b),则:
a+n-b=Rb
a=Y
解得,a=Y,b=Y+n-Rb,即E1位置为(Y,Y+n-Rb)。
假设E2位置为(a,b),则:
a+n-b=Ra
b=X
解得,a=X+Ra-n,b=X,即E2位置为(X+Ra-n,X)。
因过E1的纵线与E2的横线相交处即所求的点E3,则E3位置为(X+Ra-n,Y+n-Rb)。
例如,设Cx=00001000、Cy=01000000、Cl=000000111000000、Cr=000101100000000。如图26所示,Y=2、X=5,辅助交点P1”位置为(2,5),则Lp=6;而Lb=9、Ra=7、Rb=4。显然Lp<Lb,表明符合此组合条件。E1为(Y,Y+n-Rb),即:(2,6);E2为(X+Ra-n,X),即(4,5);进而E3位置为(4,6)。将该三交点所在的位元值取反纠错后,即完成了纠错处理。
若还满足Rp>Ra,表明读出数据A有三个位元发生错误,可划出三条左斜线。最左的左斜线与纵线的交点即所求的点E1,最右的左斜线与横线的交点即所求的点E2,过E1的横线与E2的纵线相交处即所求的点E3。最后将三个交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
以下是求三点的过程。
假设E1位置为(a,b),则:
a+b-1=La
b=X
解得,a=La-X+1,b=X,即E1位置为(La-X+1,X)。
假设E2位置为(a,b),则:
a+b-1=Lb
a=Y
解得,a=Y,b=Lb-Y+1,即E2位置为(Y,Lb-Y+1)。
因过E1的横线与E2的纵线相交处即所求的点E3,则E3位置为(La-X+1,Lb-Y+1)。
例如,设Cx=00001000、Cy=00010000、Cl=000001101000000、Cr=000111000000000。如图27所示,Y=4、X=5,辅助交点P1”位置为(4,5),则Rp=7;而La=6、Lb=9、Ra=6。显然Rp>Ra,表明符合此组合条件。E1为(La-X+1,X),即:(2,5);E2为(Y,Lb-Y+1),即(4,6);进而E3位置为(2,6)。将该三交点(图中方框处)所在的位元值取反纠错后,即完成了纠错处理。
若还满足Rp<Rb,表明读出数据A有三个位元发生错误,可划出三条左斜线。最左的左斜线与横线的交点即所求的点E1,最右的左斜线与纵线的交点即所求的点E2,过E1的横线与E2的纵线相交处即所求的点E3。最后将三个交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
以下是求三点的过程。
假设E1位置为(a,b),则:
a+b-1=La
a=Y
解得,a=Y,b=La-Y+1,即E1位置为(Y,La-Y+1)。
假设E2位置为(a,b),则:
a+b-1=Lb
b=X
解得,a=Lb-X+1,b=X,即E2位置为(Lb-X+1,X)。
因过E1的横线与E2的纵线相交处即所求的点E3,则E3位置为(Lb-X+1,La-Y+1)。
例如,设Cx=00000100、Cy=01000000、Cl=000001011000000、Cr=000011100000000。如图28所示,Y=2、X=6,辅助交点P1”位置为(2,6),则Rp=4;而La=6、Lb=9、Ra=7。显然Rp<Ra,表明符合此组合条件。E1为(Y,La-Y+1),即:(2,5);E2为(Lb-X+1,X),即(4,6);进而E3位置为(4,5)。将该三交点(图中方框处)所在的位元值取反纠错后,即完成了纠错处理。
当校验纠错码B中存在误码,或者读出数据A与校验纠错码B中兼有误码时,也需要对误码进行识别,并纠正读出数据A中的误码。
由于单个FLASH存储页中误码位元数的出现概率是随着位数的增大而急剧下降的,故以下的判断中将出现概率的高低作为抉择的依据,在多种可能的错误组合中,将概率高的情形确定为选择结果。
例如,假设纠错码结果串中只有一个位元为1,那么,若数据A中无误码,则结果串应为全零;若数据A中有一位误码,则结果串中应必有四位位元为1。
基于这些矛盾,判断纠错码中必有误码,分情况如下:
a.纠错码可能有一位误码,此时,数据A中无误码;
b.也可能有三位误码,此时,加上数据A中的一位误码,共有4位误码。
但出现一位误码的概率远远高于出现四位误码的概率,故最终判定纠错码中有一位误码,即:结果串为1的位元所对应的纠错码位置出现误码。
读出数据A没有误码、校验纠错码B有一至三位误码的情形如下:
当Wx、Wy、Wl或Wr中有且仅有一者为1、其余为0时,则判断校验纠错码B中有一位误码、而读出数据A没有误码,故读出数据A无需纠错。
当Wx、Wy、Wl或Wr中有且仅有一者为2、其余为0时,则判断校验纠错码B中有两位误码、而读出数据A没有误码,故读出数据A无需纠错。
当Wx、Wy、Wl或Wr中有且仅有一者为3、其余为0时,则判断校验纠错码B中有三位误码、而读出数据A没有误码,故读出数据A无需纠错。
当Wx、Wy、Wl或Wr中有且仅有一者为2、一者为1、其余为0时,则判断校验纠错码B中有三位误码、而读出数据A没有误码,故读出数据A无需纠错。
当Wx、Wy、Wl或Wr中有任意两者为1、其余为0时,则判断校验纠错码B中有两位误码、而读出数据A没有误码,故读出数据A无需纠错。
当Wx、Wy、Wl或Wr中有任意三者为1、其余为0,且无三线交点时,则判断校验纠错码B中有三位误码、而读出数据A没有误码,故读出数据A无需纠错。
读出数据A有一位误码、校验纠错码B有一至两位误码的情形如下:
当Wx、Wy、Wl或Wr中有任意三者为1、其一为0,且有一个三线交点时,则判断读出数据A有一位误码、且校验纠错码B中有一位误码,将读出数据A中该三线交点所对应的位元取反后,即完成纠错处理。
当Wx、Wy、Wl或Wr均为1、且无四线交点但有一个三线交点时,则判断校验纠错码B中有两位误码、而读出数据A有一位误码,将读出数据A中该三线交点所对应的位元取反后,即完成纠错处理。
当Wx、Wy、Wl或Wr中有一者为2、其余为1,且有一个四线交点时,则判断校验纠错码B中有一位误码、而读出数据A有一位误码,将读出数据A中该四线交点所对应的位元取反后,即完成纠错处理。
当Wx、Wy、Wl或Wr中有两者为2、其余为1,且有一个四线交点时,则判断校验纠错码B中有两位误码、而读出数据A有一位误码,将读出数据A中该四线交点所对应的位元取反后,即完成纠错处理。
当Wx、Wy、Wl或Wr中有一者为2、一者为0、其余为1,且有一个三线交点时,则判断校验纠错码B中有两位误码、而读出数据A有一位误码,将读出数据A中该三线交点所对应的位元取反后,即完成纠错处理。
读出数据A有两位误码、校验纠错码B有一位误码的情形如下:
若Wx、Wy、Wl或Wr中有三者为2、一者为1,且T1和T4中一个为三线交点、另一个为四线交点,或者,T2和T3中一个为三线交点、另一个为四线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出三线交点和四线交点的位置,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。这里,T1、T2、T3、T4分别对应于图5中所示意的交点位置。三线交点和四线交点位置的确定方法前面已有叙述,在此不再赘述。
例如,设Cx=00010100、Cy=00110000、Cl=000001001000000、Cr=000000100000000。如图29所示,横线与纵线产生的四个交点依次为T1(3,4),T2(3,6),T3(4,4),T4(4,6)。四线交点为T1,三线交点为T4,即读出数据A中出现两位误码,位置为E1(3,4)、E2(4,6);同时,校验纠错码B中出现一位误码,即:缺失的右斜线所对应的位元发生翻转。将两交点E1(3,4)和E2(4,6)所在的位元值取反纠错后,即完成了纠错处理。
若Wx、Wy、Wl或Wr中有一者为3、其余均为2,且T1和T4两点均为四线交点,或者,T2和T3两点均为四线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出两个四线交点的位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00010100、Cy=00110000、Cl=000001101000000、Cr=000001100000000。如图30所示,横线与纵线产生的四个交点依次为T1(3,4),T2(3,6),T3(4,4),T4(4,6)。四线交点为T1和T4,即读出数据A中出现两位误码,位置为E1(3,4)、E2(4,6);同时,校验纠错码B中出现一位误码,即多余的左斜线L2所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wl=0,Wx、Wy和Wr中有两者为2、一者为1,且T2和T3中一个为二线交点、另一个为三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出三线交点及其对角的二线交点的位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00010100、Cy=00010000、Cl=000000000000000、Cr=000100010000000。如图31所示,得到T2(2,6),T3(4,4)。二线交点为T2,三线交点为T3,即读出数据A中出现两位误码,位置为E1(2,6)、E2(4,4);同时,校验纠错码B中出现一位误码,即缺失的横线Y1所对应的元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wl=0,Wx、Wy和Wr中有二者为2、一者为3,且T2和T3均为三线交点时,或者,若Wl=1,Wx、Wy和Wr均为2,且T2和T3均为横线、纵线和右斜线所形成的三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定T2和T3这两个三线交点位置后,再将T2和T3这两交点的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00010100、Cy=01010000、Cl=000010000000000、Cr=000100010000000。如图32所示,得到T2(2,6),T3(4,4)。T2和T3均为三线交点,即读出数据A中出现两位误码,位置为E1(2,6)、E2(4,4);同时,校验纠错码B中出现一位误码,即多余的左斜线L1(见图32中虚线)所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wr=0,Wx、Wy和Wl中有两者为2、一者为1,且T1和T4中一个为二线交点、另一个为三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出三线交点及其对角的二线交点的位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00101000、Cy=00010000、Cl=000100010000000、Cr=000000000000000。如图33所示,得到T1(2,3),T4(4,5)。二线交点为T1,三线交点为T4,即读出数据A中出现两位误码,位置为E1(2,3)、E2(4,5);同时,校验纠错码B中出现一位误码,即缺失的横线Y1(见图33中虚线)所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wr=0,Wx、Wy和Wl中有二者为2、一者为3,且T1和T4均为三线交点时,或者,若Wr=1,Wx、Wy和Wl均为2,且T1和T4均为横线、纵线和左斜线所形成的三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定T1和T4这两个三线交点位置后,再将T1和T4这两个三线交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00101000、Cy=01010000、Cl=000100010000000、Cr=000010000000000。如图34所示,得到T1(2,3),T4(4,5)。横线、纵线和左斜线组成的三线交点分别为T2和T3,即读出数据A中出现两位误码,位置为E1(2,3)、E2(4,5);同时,校验纠错码B中出现一位误码,即多余的右斜线R1(见图34中虚线)所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wx=0,Wy、Wl和Wr中有两者为2、一者为1,且五条线形成纵向排列的一个二线交点和一个三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出三线交点及其纵向的二线交点的位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00000000、Cy=01010000、Cl=000001000000000、Cr=000010100000000。如图35所示,Y1=2,Y2=4,L1=6,R1=5,R2=7;L1、R1和Y1交于点E1,R2和Y2交于点E2。因此,E1位置为(2,5)、E2位置为(4,5);同时,校验纠错码B中出现一位误码,即缺失的左斜线R1(见图35中虚线)所对应的位元发生翻转。将E1和E2这两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wx=0,Wy、Wl和Wr中有两者为2、一者为3,且七条线形成的交点中有两个纵向排列的三线交点时,或者,若Wx=1,Wy、Wl和Wr均为2,且七条线形成的交点中有两个纵向排列的三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出两纵向排列的三线交点位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00000000、Cy=01010010、Cl=000001010000000、Cr=000010100000000。如图36所示,Y1=2,Y2=4,Y3=7,L1=6,L2=8,R1=5,R2=7;L1、R1和Y1交于点E1,L2、R2和Y2交于点E2。因此,E1位置为(2,5)、E2位置为(4,5);同时,校验纠错码B中出现一位误码,即多余的横线Y3(见图36中虚线)所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wy=0,Wx、Wl和Wr中有两者为2、一者为1,且五条线形成横向排列的一个二线交点和一个三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出三线交点及其横向的二线交点位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00010100、Cy=00000000、Cl=000001010000000、Cr=000010000000000。如图37所示,X1=4,X2=6,L1=6,L2=8,R1=5;L2、R1和X2交于点E2,L1和X1交于与E2横向排列的点E1。因此,E1位置为(3,4)、E2位置为(3,6);同时,校验纠错码B中出现一位误码,即缺失的右斜线R2(见图37中虚线)所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
若Wy=0,Wx、Wl和Wr中有两者为2、一者为3,且七条线形成的交点中有两个横向排列的三线交点时,或者,若Wy=1,Wx、Wl和Wr均为2,且七条线形成的交点中有两个横向排列的三线交点时,表明读出数据A中有两位误码、校验纠错码B中有一位误码,则分别确定出两个横向排列的三线交点位置后,再将此两交点处的各位元分别取反后,错误即得到纠正,随即退出纠错过程。
例如,设Cx=00011100、Cy=00000000、Cl=000001010000000、Cr=000010100000000。如图38所示,X1=4,X2=5,X3=6,L1=6,L2=8,R1=5,R2=7;L1、R1和X1交于点E1,L2、R1和X2交于点E2。因此,E1位置为(3,4)、E2位置为(3,6);同时,校验纠错码B中出现一位误码,即多余的纵线X2(见图38中虚线)所对应的位元发生翻转。将该两交点所在的位元值取反纠错后,即完成了纠错处理。
当Wx、Wy、Wl和Wr出现不同于上文记载的任何其它情形时,表明读出数据A与校验纠错码B中总共有多于三位的误码,本申请实施例提供的纠错算法无法对多余三位的误码纠错,可以通过状态位或返回值来反馈“错误过多、无法纠错”等信息。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请实施例还提供了一种终端设备,如图39所示,该终端设备可以包括:矩阵生成单元501、原始纠错码获得单元502、数据写入单元503、数据读取单元504、计算纠错码获得单元505和校验纠错单元506。
其中,矩阵生成单元501用于在数据写入时,获取原始数据,并基于原始数据生成矩阵;其对应的工作过程可参见上述方法实施例中步骤S101所述。
原始纠错码获得单元502用于基于矩阵生成原始纠错码;原始纠错码包括横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码;其对应的工作过程可参见上述方法实施例中步骤S102所述。
数据写入单元503用于将原始数据和所述原始纠错码写入NAND FLASH存储器中;其对应的工作过程可参见上述方法实施例中步骤S103所述。
数据读取单元504用于在数据读出时,从NAND FLASH存储器中读取与原始数据对应的读出数据和与原始纠错码对应的校验纠错码;其对应的工作过程可参见上述方法实施例中步骤S104所述。
计算纠错码获得单元505用于基于生成原始数据的原始纠错码的方式,生成读出数据的计算纠错码;其对应的工作过程可参见上述方法实施例中步骤S105所述。
校验纠错单元506用于将读出数据的计算纠错码与校验纠错码进行比较,获得校验结果,并在校验结果为读出数据出现错误时,对读出数据进行纠错处理;其对应的工作过程可参见上述方法实施例中步骤S106所述。
图40是本申请一实施例提供的另一终端设备的示意图。如图40所示,该实施例的终端设备600包括:处理器601、存储器602以及存储在所述存储器602中并可在所述处理器601上运行的计算机程序603,例如基于NAND FLASH存储器的校验程序。所述处理器601执行所述计算机程序603时实现上述各个基于NAND FLASH存储器的校验方法实施例中的步骤,例如图1所示的步骤S101至步骤S106。或者,所述处理器601执行所述计算机程序603时实现上述各装置实施例中各模块/单元的功能,例如图39所示矩阵生成单元501、原始纠错码获得单元502、数据写入单元503、数据读取单元504、计算纠错码获得单元505和校验纠错单元506的功能。
所述计算机程序603可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器602中,并由所述处理器601执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序603在所述终端设备600中的执行过程。例如,所述计算机程序603可以被分割成同步模块、汇总模块、获取模块、返回模块(虚拟装置中的模块)。
所述终端设备600可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器601、存储器602。本领域技术人员可以理解,图40仅仅是终端设备600的示例,并不构成对终端设备600的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器601可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器602可以是所述终端设备600的内部存储单元,例如终端设备600的硬盘或内存。所述存储器602也可以是所述终端设备600的外部存储设备,例如所述终端设备600上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器602还可以既包括所述终端设备600的内部存储单元也包括外部存储设备。所述存储器602用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器602还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (8)

1.一种基于NAND FLASH存储器的校验方法,其特征在于,包括:
在数据写入时,获取原始数据,并基于所述原始数据生成矩阵;
基于所述矩阵生成原始纠错码;所述原始纠错码包括横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码;
将所述原始数据和所述原始纠错码写入所述NAND FLASH存储器中;
在数据读出时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据和与所述原始纠错码对应的校验纠错码;
基于生成所述原始数据的原始纠错码的方式,生成所述读出数据的计算纠错码;
将所述读出数据的计算纠错码与所述校验纠错码进行比较,获得校验结果,并在所述校验结果为所述读出数据出现错误时,对所述读出数据进行纠错处理,包括:将所述计算纠错码和所述校验纠错码中对应位置的位元进行异或运算,获得校验数据串;若所述校验数据串中的位元均为0,则确定所述读出数据和所述校验纠错码正确;若所述校验数据串中的位元存在非0,则所述读出数据或所述校验纠错码码错误,并在所述读出数据错误时对所述读出数据进行纠错处理;
所述校验数据串包括横向校验子串、纵向校验子串、左斜向校验子串和右斜向校验子串;
相应的,若所述校验数据串中的位元包括非0,则所述读出数据或所述校验纠错码错误,并在所述读出数据错误时对所述读出数据进行纠错处理,包括:
当Wx=Wy=Wl=Wr=1且所述矩阵中存在一个四线交点时,所述读出数据中有一个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;
当Wx=Wy=Wl=Wr=2且所述矩阵中存在两个四线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中对应的两个四线交点处的位元取反;
当Wx=Wy=Wl=2,Wr=0且靠左的左斜线经过T1,靠右的左斜线经过T4时,所述读出数据中有两个位元发生错误,将所述矩阵中T1和T4处的位元取反;
当Wx=Wy=Wr=2,Wl=0且靠右的右斜线经过T2,靠左的右斜线经过T3时,所述读出数据中有两个位元发生错误,将所述矩阵中T2和T3处的位元取反;
当Wy=Wl=Wr=2,Wx=0且靠左的左斜线、靠右的右斜线和靠上的横线相交于第一三线交点,靠右的左斜线、靠左的右斜线和靠下的横线相交于第二三线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中第一三线交点和第二三线交点处的位元取反;
当Wx=Wl=Wr=2,Wy=0且靠左的左斜线、靠左的右斜线和靠左的纵线相交于第三三线交点,靠右的左斜线、靠右的右斜线和靠右的纵线相交于第四三线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中第三三线交点和第四三线交点处的位元取反;
当Wx=Wy=Wl=Wr=3且所述矩阵中存在三个四线交点时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的三个四线交点处的位元取反;
当Wx=Wy=Wl=3,Wr=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条纵线构成的四个交点中,选取对应的T1和T4,将所述矩阵中对应的T1和T4处的位元取反;
当Wx=Wy=Wr=3,Wl=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条纵线构成的四个交点中,选取对应的T2和T3,将所述矩阵中对应的T2和T3处的位元取反;
当Wy=Wl=Wr=3,Wx=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条左斜线中,选取靠上的横线和靠左的左斜线相交构成的第五三线交点,以及靠下的横线和靠右的左斜线相交构成的第六三线交点,将所述矩阵中第五三线交点和第六三线交点处的位元取反;
当Wx=Wl=Wr=3,Wy=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条纵线和两条左斜线中,选取靠左的纵线和靠左的左斜线相交构成的第七三线交点,以及靠右的纵线和靠右的左斜线相交构成的第八三线交点,将所述矩阵中第七三线交点和第八三线交点处的位元取反;
当Wx=Wy=3,Wl=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和一条右斜线确定对应的辅助交点P0,并根据对应的辅助交点P0确定三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=Wl=3,Wy=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条右斜线和三条纵线确定对应的临时交点Q1,并根据对应的临时交点Q1确定对应的临时交点Q2和临时交点Q3;当临时交点Q2和临时交点Q3位于同一条右斜线上时,确定临时交点Q1、临时交点Q2和临时交点Q3为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=Wr=3,Wy=Wl=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和三条纵线确定对应的临时交点Q1’,并根据对应的临时交点Q1’确定对应的临时交点Q2’和临时交点Q3’;当临时交点Q2’和临时交点Q3’位于同一条左斜线上时,确定临时交点Q1’、临时交点Q2’和临时交点Q3’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wy=Wl=3,Wx=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条右斜线和三条横线确定对应的临时交点Q1”,并根据对应的临时交点Q1”确定对应的临时交点Q2”和临时交点Q3”;当临时交点Q2”和临时交点Q3”位于同一条右斜线上时,确定临时交点Q1”、临时交点Q2”和临时交点Q3”为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wy=Wr=3,Wx=Wl=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和三条横线确定对应的临时交点Q1”’,并根据对应的临时交点Q1”’确定对应的临时交点Q2”’和临时交点Q3”’;当临时交点Q2”’和临时交点Q3”’位于同一条左斜线上时,确定临时交点Q1”’、临时交点Q2”’和临时交点Q3”’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=3,Wy=Wl=Wr=1时,所述读出数据中有三个位元发生错误;确定对应的三条纵线中中间位置的纵线为第一对称轴,并根据第一对称轴确定辅助交点P1;计算辅助交点P1的虚拟左斜线序号,并根据辅助交点P1的虚拟左斜线序号确定对应的辅助交点P2和辅助交点P3;确定辅助交点P1、辅助交点P2和辅助交点P3为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wy=3,Wx=Wl=Wr=1时,所述读出数据中有三个位元发生错误;确定对应的三条横线中中间位置的横线为第二对称轴,并根据第二对称轴确定辅助交点P1’;计算辅助交点P1’的虚拟左斜线序号,并根据辅助交点P1’的虚拟左斜线序号确定对应的辅助交点P2’和辅助交点P3’;确定辅助交点P1’、辅助交点P2’和辅助交点P3’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=1,Wy=1时,根据所对应的一条横线和一条纵线确定对应的辅助交点P1”;计算辅助交点P1”的虚拟左斜线序号和虚拟右斜线序号,并根据辅助交点P1”的虚拟左斜线序号和虚拟右斜线序号确定对应的三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx、Wy、Wl或Wr中有任意三者为1、其余为0,且所述矩阵中存在一个三线交点时,则判断读出数据有一位误码且校验纠错码中有一位误码,将所述矩阵中对应的三线交点处的位元取反;
当Wx、Wy、Wl或Wr均为1,且所述矩阵中无四线交点,但所述矩阵中存在一个三线交点时,则判断校验纠错码中有两位误码,读出数据有一位误码,将所述矩阵中对应的三线交点处的位元取反;
当Wx、Wy、Wl或Wr中有一者为2、其余为1,且所述矩阵中存在一个四线交点时,则判断校验纠错码中有一位误码,读出数据中有一位误码,将所述矩阵中对应的四线交点处的位元取反;
当Wx、Wy、Wl或Wr中有两者为2、其余为1,且所述矩阵中存在一个四线交点时,则判断校验纠错码中有两位误码,读出数据有一位误码,将所述矩阵中对应的四线交点处的位元取反;
当Wx、Wy、Wl或Wr中有一者为2、一者为0、其余为1,且所述矩阵中存在一个三线交点时,则判断校验纠错码中有两位误码,读出数据有一位误码,将所述矩阵中对应的四线交点处的位元取反;
若Wx、Wy、Wl或Wr中有三者为2、一者为1,且T1和T4中一个为三线交点、另一个为四线交点,或者,T2和T3中一个为三线交点、另一个为四线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点和四线交点处的位元取反;
若Wx、Wy、Wl或Wr中有一者为3、其余均为2,且T1和T4两点均为四线交点,或者,T2和T3两点均为四线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的两个四线交点处的位元取反;
若Wl=0,Wx、Wy和Wr中有两者为2、一者为1,且T2和T3中一个为二线交点、另一个为三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及其对角的二线交点处的位元取反;
若Wl=0,Wx、Wy和Wr中有二者为2、一者为3,且T2和T3均为三线交点时,或者,若Wl=1,Wx、Wy和Wr均为2,且T2和T3均为横线、纵线和右斜线所形成的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点处的位元取反;
若Wr=0,Wx、Wy和Wl中有两者为2、一者为1,且T1和T4中一个为二线交点、另一个为三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及其对角的二线交点处的位元取反;
若Wr=0,Wx、Wy和Wl中有二者为2、一者为3,且T1和T4均为三线交点时,或者,若Wr=1,Wx、Wy和Wl均为2,且T1和T4均为横线、纵线和左斜线所形成的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点处的位元取反;
若Wx=0,Wy、Wl和Wr中有两者为2、一者为1,且所述矩阵中存在一个二线交点和一个三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及其对角的二线交点处的位元取反;
若Wx=0,Wy、Wl和Wr中有两者为2、一者为3,且所述矩阵中存在两个纵向排列的三线交点时,或者,若Wx=1,Wy、Wl和Wr均为2,且所述矩阵中存在两个纵向排列的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的纵向排列的三线交点处的位元取反;
若Wy=0,Wx、Wl和Wr中有两者为2、一者为1,且所述矩阵中存在一个二线交点和一个三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及二线交点处的位元取反;
若Wy=0,Wx、Wl和Wr中有两者为2、一者为3,且所述矩阵中存在两个横向排列的三线交点时,或者,若Wy=1,Wx、Wl和Wr均为2,且所述矩阵中存在两个横向排列的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的横向排列的三线交点处的位元取反;
其中,Wx为所述横向校验子串中位元1的个数,Wy为所述纵向校验子串中位元1的个数,Wl为所述左斜向校验子串中位元1的个数,Wr为所述右斜向校验子串中位元1的个数;
在所述矩阵的任意两行中划两条横线、任意两列中划两条纵线,得到四个交点,其中,T1是左上角交点、T2是右上角交点、T3是左下角交点、T4是右下角交点;
所述四线交点为横线、纵线、左斜线和右斜线相交的交点;所述三线交点为横线、纵线、左斜线和右斜线中任意三条线相交的交点;所述二线交点为横线、纵线、左斜线和右斜线中任意两条线相交的交点;
所述横线为所述横向校验子串中的位元1在所述矩阵中对应行所在的横线,所述纵线为所述纵向校验子串中的位元1在所述矩阵中对应列所在的纵线,所述左斜线为所述左斜向校验子串中的位元1对应的所述矩阵中的左预设斜向所在的斜线;所述右斜线为所述右斜向校验子串中的位元1对应的所述矩阵中的右预设斜向所在的斜线。
2.如权利要求1所述的基于NAND FLASH存储器的校验方法,其特征在于,所述基于所述原始数据生成矩阵,包括:
确定所述矩阵的行数和列数,并基于所述行数和列数,将所述原始数据的位元按照第一预设顺序排列为矩阵。
3.如权利要求2所述的基于NAND FLASH存储器的校验方法,其特征在于,所述确定所述矩阵的行数和列数,包括:
基于公式
Figure FDA0002887337950000091
确定所述矩阵的行数和列数;
其中,m表示所述矩阵的行数;n表示所述矩阵的列数;D由所述NAND FLASH存储器中每个存储页的数据区和冗余区的字节数确定。
4.如权利要求3所述的基于NAND FLASH存储器的校验方法,其特征在于,所述确定所述矩阵的行数和列数,包括:
若所述NAND FLASH存储器中每个存储页的数据区的字节数为512字节,所述冗余区的字节数为16字节,则所述D为480×8位,m为62,n为62;
若所述NAND FLASH存储器中每个存储页的数据区的字节数为2048字节,所述冗余区的字节数为64字节,则所述D为2016×8位,m为127,n为127;
若所述NAND FLASH存储器中每个存储页的数据区的字节数为4096字节,所述冗余区的字节数为128字节,则所述D为4072×8位,m为181,n为180。
5.如权利要求1所述的基于NAND FLASH存储器的校验方法,其特征在于,所述基于所述矩阵生成原始纠错码,包括:
将所述矩阵的每一列中的位元逐位进行异或运算,得到所述横向子纠错码;
将所述矩阵的每一行中的位元逐位进行异或运算,得到所述纵向子纠错码;
将所述矩阵的左预设斜向中的位元逐位进行异或运算,得到所述左斜向子纠错码;
将所述矩阵的右预设斜向中的位元逐位进行异或运算,得到所述右斜向子纠错码;
将所述横向子纠错码、纵向子纠错码、所述左斜向子纠错码和所述右斜向子纠错码按照第二预设顺序组合为原始纠错码。
6.一种终端设备,其特征在于,包括:
矩阵生成单元,用于在数据写入时,获取原始数据,并基于所述原始数据生成矩阵;
原始纠错码获得单元,用于基于所述矩阵生成原始纠错码;所述原始纠错码包括横向子纠错码、纵向子纠错码、左斜向子纠错码和右斜向子纠错码;
数据写入单元,用于将所述原始数据和所述原始纠错码写入NAND FLASH存储器中;
数据读取单元,用于在数据读出时,从所述NAND FLASH存储器中读取与所述原始数据对应的读出数据和与所述原始纠错码对应的校验纠错码;
计算纠错码获得单元,用于基于生成所述原始数据的原始纠错码的方式,生成所述读出数据的计算纠错码;
校验纠错单元,用于将所述读出数据的计算纠错码与所述校验纠错码进行比较,获得校验结果,并在所述校验结果为所述读出数据出现错误时,对所述读出数据进行纠错处理,包括:将所述计算纠错码和所述校验纠错码中对应位置的位元进行异或运算,获得校验数据串;若所述校验数据串中的位元均为0,则确定所述读出数据和所述校验纠错码正确;若所述校验数据串中的位元存在非0,则所述读出数据或所述校验纠错码码错误,并在所述读出数据错误时对所述读出数据进行纠错处理;
所述校验数据串包括横向校验子串、纵向校验子串、左斜向校验子串和右斜向校验子串;
相应的,若所述校验数据串中的位元包括非0,则所述读出数据或所述校验纠错码错误,并在所述读出数据错误时对所述读出数据进行纠错处理,包括:
当Wx=Wy=Wl=Wr=1且所述矩阵中存在一个四线交点时,所述读出数据中有一个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;
当Wx=Wy=Wl=Wr=2且所述矩阵中存在两个四线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中对应的两个四线交点处的位元取反;
当Wx=Wy=Wl=2,Wr=0且靠左的左斜线经过T1,靠右的左斜线经过T4时,所述读出数据中有两个位元发生错误,将所述矩阵中T1和T4处的位元取反;
当Wx=Wy=Wr=2,Wl=0且靠右的右斜线经过T2,靠左的右斜线经过T3时,所述读出数据中有两个位元发生错误,将所述矩阵中T2和T3处的位元取反;
当Wy=Wl=Wr=2,Wx=0且靠左的左斜线、靠右的右斜线和靠上的横线相交于第一三线交点,靠右的左斜线、靠左的右斜线和靠下的横线相交于第二三线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中第一三线交点和第二三线交点处的位元取反;
当Wx=Wl=Wr=2,Wy=0且靠左的左斜线、靠左的右斜线和靠左的纵线相交于第三三线交点,靠右的左斜线、靠右的右斜线和靠右的纵线相交于第四三线交点时,所述读出数据中有两个位元发生错误,将所述矩阵中第三三线交点和第四三线交点处的位元取反;
当Wx=Wy=Wl=Wr=3且所述矩阵中存在三个四线交点时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的三个四线交点处的位元取反;
当Wx=Wy=Wl=3,Wr=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条纵线构成的四个交点中,选取对应的T1和T4,将所述矩阵中对应的T1和T4处的位元取反;
当Wx=Wy=Wr=3,Wl=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条纵线构成的四个交点中,选取对应的T2和T3,将所述矩阵中对应的T2和T3处的位元取反;
当Wy=Wl=Wr=3,Wx=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条横线和两条左斜线中,选取靠上的横线和靠左的左斜线相交构成的第五三线交点,以及靠下的横线和靠右的左斜线相交构成的第六三线交点,将所述矩阵中第五三线交点和第六三线交点处的位元取反;
当Wx=Wl=Wr=3,Wy=1时,所述读出数据中有三个位元发生错误,将所述矩阵中对应的四线交点处的位元取反;在除构成四线交点以外的两条纵线和两条左斜线中,选取靠左的纵线和靠左的左斜线相交构成的第七三线交点,以及靠右的纵线和靠右的左斜线相交构成的第八三线交点,将所述矩阵中第七三线交点和第八三线交点处的位元取反;
当Wx=Wy=3,Wl=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和一条右斜线确定对应的辅助交点P0,并根据对应的辅助交点P0确定三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=Wl=3,Wy=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条右斜线和三条纵线确定对应的临时交点Q1,并根据对应的临时交点Q1确定对应的临时交点Q2和临时交点Q3;当临时交点Q2和临时交点Q3位于同一条右斜线上时,确定临时交点Q1、临时交点Q2和临时交点Q3为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=Wr=3,Wy=Wl=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和三条纵线确定对应的临时交点Q1’,并根据对应的临时交点Q1’确定对应的临时交点Q2’和临时交点Q3’;当临时交点Q2’和临时交点Q3’位于同一条左斜线上时,确定临时交点Q1’、临时交点Q2’和临时交点Q3’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wy=Wl=3,Wx=Wr=1时,所述读出数据中有三个位元发生错误;根据对应的一条右斜线和三条横线确定对应的临时交点Q1”,并根据对应的临时交点Q1”确定对应的临时交点Q2”和临时交点Q3”;当临时交点Q2”和临时交点Q3”位于同一条右斜线上时,确定临时交点Q1”、临时交点Q2”和临时交点Q3”为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wy=Wr=3,Wx=Wl=1时,所述读出数据中有三个位元发生错误;根据对应的一条左斜线和三条横线确定对应的临时交点Q1”’,并根据对应的临时交点Q1”’确定对应的临时交点Q2”’和临时交点Q3”’;当临时交点Q2”’和临时交点Q3”’位于同一条左斜线上时,确定临时交点Q1”’、临时交点Q2”’和临时交点Q3”’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=3,Wy=Wl=Wr=1时,所述读出数据中有三个位元发生错误;确定对应的三条纵线中中间位置的纵线为第一对称轴,并根据第一对称轴确定辅助交点P1;计算辅助交点P1的虚拟左斜线序号,并根据辅助交点P1的虚拟左斜线序号确定对应的辅助交点P2和辅助交点P3;确定辅助交点P1、辅助交点P2和辅助交点P3为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wy=3,Wx=Wl=Wr=1时,所述读出数据中有三个位元发生错误;确定对应的三条横线中中间位置的横线为第二对称轴,并根据第二对称轴确定辅助交点P1’;计算辅助交点P1’的虚拟左斜线序号,并根据辅助交点P1’的虚拟左斜线序号确定对应的辅助交点P2’和辅助交点P3’;确定辅助交点P1’、辅助交点P2’和辅助交点P3’为三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx=1,Wy=1时,根据所对应的一条横线和一条纵线确定对应的辅助交点P1”;计算辅助交点P1”的虚拟左斜线序号和虚拟右斜线序号,并根据辅助交点P1”的虚拟左斜线序号和虚拟右斜线序号确定对应的三个目标交点,将所述矩阵中对应的三个目标交点处的位元取反;
当Wx、Wy、Wl或Wr中有任意三者为1、其余为0,且所述矩阵中存在一个三线交点时,则判断读出数据有一位误码且校验纠错码中有一位误码,将所述矩阵中对应的三线交点处的位元取反;
当Wx、Wy、Wl或Wr均为1,且所述矩阵中无四线交点,但所述矩阵中存在一个三线交点时,则判断校验纠错码中有两位误码,读出数据有一位误码,将所述矩阵中对应的三线交点处的位元取反;
当Wx、Wy、Wl或Wr中有一者为2、其余为1,且所述矩阵中存在一个四线交点时,则判断校验纠错码中有一位误码,读出数据中有一位误码,将所述矩阵中对应的四线交点处的位元取反;
当Wx、Wy、Wl或Wr中有两者为2、其余为1,且所述矩阵中存在一个四线交点时,则判断校验纠错码中有两位误码,读出数据有一位误码,将所述矩阵中对应的四线交点处的位元取反;
当Wx、Wy、Wl或Wr中有一者为2、一者为0、其余为1,且所述矩阵中存在一个三线交点时,则判断校验纠错码中有两位误码,读出数据有一位误码,将所述矩阵中对应的四线交点处的位元取反;
若Wx、Wy、Wl或Wr中有三者为2、一者为1,且T1和T4中一个为三线交点、另一个为四线交点,或者,T2和T3中一个为三线交点、另一个为四线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点和四线交点处的位元取反;
若Wx、Wy、Wl或Wr中有一者为3、其余均为2,且T1和T4两点均为四线交点,或者,T2和T3两点均为四线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的两个四线交点处的位元取反;
若Wl=0,Wx、Wy和Wr中有两者为2、一者为1,且T2和T3中一个为二线交点、另一个为三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及其对角的二线交点处的位元取反;
若Wl=0,Wx、Wy和Wr中有二者为2、一者为3,且T2和T3均为三线交点时,或者,若Wl=1,Wx、Wy和Wr均为2,且T2和T3均为横线、纵线和右斜线所形成的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点处的位元取反;
若Wr=0,Wx、Wy和Wl中有两者为2、一者为1,且T1和T4中一个为二线交点、另一个为三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及其对角的二线交点处的位元取反;
若Wr=0,Wx、Wy和Wl中有二者为2、一者为3,且T1和T4均为三线交点时,或者,若Wr=1,Wx、Wy和Wl均为2,且T1和T4均为横线、纵线和左斜线所形成的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点处的位元取反;
若Wx=0,Wy、Wl和Wr中有两者为2、一者为1,且所述矩阵中存在一个二线交点和一个三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及其对角的二线交点处的位元取反;
若Wx=0,Wy、Wl和Wr中有两者为2、一者为3,且所述矩阵中存在两个纵向排列的三线交点时,或者,若Wx=1,Wy、Wl和Wr均为2,且所述矩阵中存在两个纵向排列的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的纵向排列的三线交点处的位元取反;
若Wy=0,Wx、Wl和Wr中有两者为2、一者为1,且所述矩阵中存在一个二线交点和一个三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的三线交点及二线交点处的位元取反;
若Wy=0,Wx、Wl和Wr中有两者为2、一者为3,且所述矩阵中存在两个横向排列的三线交点时,或者,若Wy=1,Wx、Wl和Wr均为2,且所述矩阵中存在两个横向排列的三线交点时,则判断读出数据中有两位误码,校验纠错码中有一位误码,将所述矩阵中对应的横向排列的三线交点处的位元取反;
其中,Wx为所述横向校验子串中位元1的个数,Wy为所述纵向校验子串中位元1的个数,Wl为所述左斜向校验子串中位元1的个数,Wr为所述右斜向校验子串中位元1的个数;
在所述矩阵的任意两行中划两条横线、任意两列中划两条纵线,得到四个交点,其中,T1是左上角交点、T2是右上角交点、T3是左下角交点、T4是右下角交点;
所述四线交点为横线、纵线、左斜线和右斜线相交的交点;所述三线交点为横线、纵线、左斜线和右斜线中任意三条线相交的交点;所述二线交点为横线、纵线、左斜线和右斜线中任意两条线相交的交点;
所述横线为所述横向校验子串中的位元1在所述矩阵中对应行所在的横线,所述纵线为所述纵向校验子串中的位元1在所述矩阵中对应列所在的纵线,所述左斜线为所述左斜向校验子串中的位元1对应的所述矩阵中的左预设斜向所在的斜线;所述右斜线为所述右斜向校验子串中的位元1对应的所述矩阵中的右预设斜向所在的斜线。
7.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述方法的步骤。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述方法的步骤。
CN201910461388.8A 2019-05-30 2019-05-30 基于nand flash存储器的校验方法、终端设备及存储介质 Active CN110277131B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910461388.8A CN110277131B (zh) 2019-05-30 2019-05-30 基于nand flash存储器的校验方法、终端设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910461388.8A CN110277131B (zh) 2019-05-30 2019-05-30 基于nand flash存储器的校验方法、终端设备及存储介质

Publications (2)

Publication Number Publication Date
CN110277131A CN110277131A (zh) 2019-09-24
CN110277131B true CN110277131B (zh) 2021-03-23

Family

ID=67960359

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910461388.8A Active CN110277131B (zh) 2019-05-30 2019-05-30 基于nand flash存储器的校验方法、终端设备及存储介质

Country Status (1)

Country Link
CN (1) CN110277131B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110908603B (zh) * 2019-11-01 2024-01-19 惠州市德赛西威汽车电子股份有限公司 一种数据存储防错处理系统及方法
CN111078460B (zh) 2019-11-18 2020-08-25 北京中电兴发科技有限公司 一种快速纠删码计算方法
CN111858135B (zh) * 2020-06-17 2023-12-19 百富计算机技术(深圳)有限公司 数据存储、校验方法、装置、终端设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103578565A (zh) * 2012-07-19 2014-02-12 百富计算机技术(深圳)有限公司 一种NAND Flash存储芯片的校验方法及装置
CN108845890A (zh) * 2018-05-07 2018-11-20 西安电子科技大学 基于Nand Flash存储器阵列的数据校验方法
CN109542668A (zh) * 2018-10-29 2019-03-29 百富计算机技术(深圳)有限公司 基于nand flash存储器的校验方法、终端设备及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102693760B (zh) * 2011-03-24 2015-07-15 扬智科技股份有限公司 Nand快闪存储器的错误校正方法
US9367392B2 (en) * 2014-08-01 2016-06-14 Winbond Electronics Corporation NAND flash memory having internal ECC processing and method of operation thereof
KR102326659B1 (ko) * 2017-07-19 2021-11-16 삼성전자주식회사 비휘발성 메모리의 ecc 제어 방법 및 이를 수행하는 메모리 시스템
JP2019054448A (ja) * 2017-09-15 2019-04-04 東芝メモリ株式会社 メモリシステム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103578565A (zh) * 2012-07-19 2014-02-12 百富计算机技术(深圳)有限公司 一种NAND Flash存储芯片的校验方法及装置
CN108845890A (zh) * 2018-05-07 2018-11-20 西安电子科技大学 基于Nand Flash存储器阵列的数据校验方法
CN109542668A (zh) * 2018-10-29 2019-03-29 百富计算机技术(深圳)有限公司 基于nand flash存储器的校验方法、终端设备及存储介质

Also Published As

Publication number Publication date
CN110277131A (zh) 2019-09-24

Similar Documents

Publication Publication Date Title
CN109542668B (zh) 基于nand flash存储器的校验方法、终端设备及存储介质
CN110277131B (zh) 基于nand flash存储器的校验方法、终端设备及存储介质
US7797609B2 (en) Apparatus and method for merging data blocks with error correction code protection
CN110750381B (zh) 基于nand flash存储器的纠错方法及装置
CN107799151A (zh) 固态盘SSD及高可用性PCIe SSD的方法和系统
US20080126912A1 (en) Storing data redundantly
TWI707345B (zh) 快閃記憶體裝置及快閃記憶體儲存管理方法
DE102007038114A1 (de) Fehlerkorrekturschaltung, Halbleiterspeicherelement und Fehlerkorrekturverfahren
US11436482B2 (en) Storing neural net works and weights for neural networks
US9959166B2 (en) Error correction for non-volatile memory
CN108665940B (zh) Ecc编码电路、解码电路以及存储器控制器
CN105027084A (zh) 在移动通信系统中控制存储器的装置和方法
Moldaschl et al. Fault tolerant communication-optimal 2.5 D matrix multiplication
CN108196799B (zh) 存储设备的写入方法及写入装置
CN109032833B (zh) 多位错误数据的纠正方法、装置、设备及存储介质
US8499224B2 (en) Redundant code generation method and device, data restoration method and device, and raid storage device
CN111858135B (zh) 数据存储、校验方法、装置、终端设备及存储介质
TWI841391B (zh) 快閃記憶體裝置及快閃記憶體儲存管理方法
WO2019232727A1 (zh) 多位错误数据的纠正方法、装置、设备及存储介质
CN115686926A (zh) 硬件实现方法、终端及存储介质
CN116615718A (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