CN111858135A - 数据存储、校验方法、装置、终端设备及存储介质 - Google Patents

数据存储、校验方法、装置、终端设备及存储介质 Download PDF

Info

Publication number
CN111858135A
CN111858135A CN202010554289.7A CN202010554289A CN111858135A CN 111858135 A CN111858135 A CN 111858135A CN 202010554289 A CN202010554289 A CN 202010554289A CN 111858135 A CN111858135 A CN 111858135A
Authority
CN
China
Prior art keywords
ecc code
data
bit
row
column
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
Application number
CN202010554289.7A
Other languages
English (en)
Other versions
CN111858135B (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 CN202010554289.7A priority Critical patent/CN111858135B/zh
Publication of CN111858135A publication Critical patent/CN111858135A/zh
Application granted granted Critical
Publication of CN111858135B publication Critical patent/CN111858135B/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/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Error Detection And Correction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本申请适用于NAND flash存储器领域,提供一种数据存储、校验方法、装置、终端设备及存储介质。本申请通过在执行写操作时,基于待写入的第一数据生成第一二维阵列;基于第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;基于第一数据生成第一整体ECC码的第一位元,基于第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码生成第一整体ECC码的第二位元;将第一行方向ECC码、第一列方向ECC码、第一斜排方向ECC码和第一整体ECC码组合成第一ECC码;将第一数据和第一ECC码写入NAND flash存储器,能够在对第一数据执行读操作时根据第一ECC码以及采用相同方式基于读出的第二数据生成的第三ECC码,确定读出的第二数据和第二ECC码中的一到两个位元错误。

Description

数据存储、校验方法、装置、终端设备及存储介质
技术领域
本申请属于NAND flash存储器领域,尤其涉及一种数据存储、校验方法、装置、终端设备及存储介质。
背景技术
NAND flash存储器中存储的数据,通常容易出现位元反转,为了提高NAND flash存储器的可靠性,通常需要采用基于错误检查和纠正(Error Correcting Code,ECC)技术的算法对数据进行校验和纠错。ECC技术是指在对数据进行读和写时分别计算待写入数据和已读出数据的ECC码,通过比较待写入数据的ECC码与已读出数据的ECC码,来校验已读出数据是否出现位元反转并在出现位元反转时进行纠错处理。
然而,目前的基于ECC技术的算法只能校验已读出数据中出现的位元错误、无法校验已读出数据的ECC码中出现的位元错误。
发明内容
有鉴于此,本申请实施例提供了一种数据存储、校验方法、装置、终端设备及存储介质,以解决目前的基于ECC技术的算法只能校验已读出数据中出现的位元错误、无法校验已读出数据的ECC码中出现的位元错误的问题。
本申请实施例的第一方面提供了数据存储方法,基于NAND flash存储器实现,所述方法包括:
在执行写操作时,基于待写入的第一数据生成第一二维阵列;
基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;
基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元;
将所述第一行方向ECC码、所述第一列方向ECC码、所述第一斜排方向ECC码和所述第一整体ECC码组合成第一ECC码;
将所述第一数据和所述第一ECC码写入所述NAND flash存储器。
本申请实施例的第二方面提供了一种数据校验方法,基于NAND flash存储器实现,所述方法包括:
在执行读操作时,读取已存储的第一数据和基于所述第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;
基于所述第二数据生成第二二维阵列;
基于所述第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;
基于所述第二数据生成第二整体ECC码的第一位元,基于所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码生成所述第二整体ECC码的第二位元;
将所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码和所述第二整体ECC码组合成第三ECC码;
基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验;其中,所述第一ECC码和所述第三ECC码的生成方式相同。
本申请实施例的第三方面提供了一种数据存储装置,基于NAND flash存储器实现,所述装置包括:
第一阵列生成模块,用于在执行写操作时,基于待写入的第一数据生成第一二维阵列;
第一ECC码生成模块,用于:
基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;
基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元;
将所述第一行方向ECC码、所述第一列方向ECC码、所述第一斜排方向ECC码和所述第一整体ECC码组合成第一ECC码;
写模块,用于将所述第一数据和所述第一ECC码写入所述NAND flash存储器。
本申请实施例的第四方面提供了一种数据校验装置,基于NAND flash存储器实现,所述装置包括:
读模块,用于在执行读操作时,读取已存储的第一数据和基于所述第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;
第二阵列生成模块,用于基于所述第二数据生成第二二维阵列;
第三ECC码生成模块,用于:
基于所述第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;
基于所述第二数据生成第二整体ECC码的第一位元,基于所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码生成所述第二整体ECC码的第二位元;
将所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码和所述第二整体ECC码组合成第三ECC码;
校验模块,用于基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验;其中,所述第一ECC码和所述第三ECC码的生成方式相同。
本申请实施例的第五方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请实施例第一方面提供的数据存储方法和/或第二方面提供的数据校验方法的步骤。
本申请实施例的第六方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被一个或多个处理器执行时实现本申请实施例第一方面提供的数据存储方法和/或第二方面提供的数据校验方法的步骤。
本申请实施例的第七方面提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本申请实施例第一方面提供的数据存储方法和/或第二方面提供的数据校验方法的步骤。
本申请实施例的第一方面提供的基于NAND flash存储器实现的数据存储方法,在执行写操作时,基于待写入的第一数据生成第一二维阵列;基于第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;基于第一数据生成第一整体ECC码的第一位元,基于第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码生成第一整体ECC码的第二位元;将第一行方向ECC码、第一列方向ECC码、第一斜排方向ECC码和第一整体ECC码组合成第一ECC码;将第一数据和第一ECC码写入NAND flash存储器,由于第一数据中每个位元参与至少四次ECC码计算,三个方向的ECC码参与一次ECC码计算,使得在对第一数据执行读操作时能够根据第一ECC码以及采用相同方式基于读出的第二数据生成的第三ECC码,确定读出的第二数据和第二ECC码中的一到两个位元错误。
本申请实施例的第二方面提供的基于NAND flash存储器实现的数据存储方法,通过在执行读操作时,读取已存储的第一数据和在执行写操作时基于第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;然后采用与第一ECC码相同的生成方式,基于第二数据生成第二二维阵列;基于第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;基于第二数据生成第二整体ECC码的第一位元,基于第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码生成第二整体ECC码的第二位元;将第二行方向ECC码、第二列方向ECC码、第二斜排方向ECC码和第二整体ECC码组合成第三ECC码;基于第二ECC码和第三ECC码,对第二数据和第二ECC码进行校验;可以确定第二数据和第二ECC码中的一到两个位元错误。
可以理解的是,上述第三方面的有益效果可以参见上述第一方面中的相关描述,上述第四方面的有益效果可以参见上述第二方面中的相关描述,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的数据存储方法的第一种流程示意图;
图2是本申请实施例提供的第一二维阵列的示意图;
图3是本申请实施例提供的数据存储方法的第二种流程示意图;
图4是本申请实施例提供的第一二维阵列中的左向斜排和右向斜排的示意图;
图5是本申请实施例提供的第一二维阵列中的斜排组的示意图;
图6是本申请实施例提供的数据存储方法的第三种流程示意图;
图7是本申请实施例提供的数据校验方法的第一种流程示意图;
图8是本申请实施例提供的数据校验方法的第二种流程示意图;
图9是本申请实施例提供的第二二维阵列中有一个位元错误时的示意图;
图10是本申请实施例提供的第二二维阵列中有两个位元错误时的第一种示意图;
图11是本申请实施例提供的第二二维阵列中有两个位元错误时的第二种示意图;
图12是本申请实施例提供的第二二维阵列中有两个位元错误时的第三种示意图;
图13是本申请实施例提供的第二二维阵列中有两个位元错误时的第四种示意图;
图14是本申请实施例提供的第二二维阵列中有两个位元错误时的第五种示意图;
图15是本申请实施例提供的第二二维阵列中有两个位元错误时的第六种示意图;
图16是本申请实施例提供的第二二维阵列和第二ECC码中各有一个位元错误时的第一种示意图;
图17是本申请实施例提供的第二二维阵列和第二ECC码中各有一个位元错误时的第二种示意图;
图18是本申请实施例提供的数据存储装置的结构示意图;
图19是本申请实施例提供的数据校验装置的结构示意图;
图20是本申请实施例提供的终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
本申请实施例提供一种数据存储方法,基于NAND flash存储器实现,可以应用于任意的能够与NAND flash存储器建立通讯连接,将数据写入NAND flash存储器并具有计算功能的第一终端设备,由第一终端设备的处理器在运行具有相应功能的计算机程序时执行。数据存储方法用于在执行写操作时,根据待写入的第一数据生成三个方向的ECC码,然后根据第一数据和三个方向的ECC码进一步生成第一整体ECC码,最后将第一数据以及由三个方向的ECC码和第一整体ECC码组成的第一ECC码写入NAND flash存储器中进行存储。
在应用中,第一终端设备可以是手机、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digitalassistant,PDA)等,本申请实施例中对第一终端设备的具体类型不作任何限制。
如图1所示,本实施例提供的数据存储方法,包括如下步骤S101~S105:
步骤S101、在执行写操作时,基于待写入的第一数据生成第一二维阵列。
在应用中,NAND flash存储器由多个块组成,每个块由相同数目的若干页组成,每页由数据区和冗余区组成,数据区用于存储数据,冗余区用于存储ECC码,在ECC码的长度超出冗余区的容量时,会有一部分ECC码溢出冗余区,溢出冗余区的ECC码可以跨区存储在数据区中。在NAND flash存储器中写入数据时,需要一页一页地写入数据,第一数据为待写入NAND flash存储器的一页中的数据。由于所述NAND flash存储器的特性,为了能够在后续进行读操作时,校验出读出的第一数据是否出现位元反转,需要在存储第一数据时基于第一数据生成ECC码,并将第一数据和ECC码写入NAND flash存储器的一页中。本实施例中在基于第一数据生成ECC码之前,需要先对第一数据进行处理,生成第一二维阵列。
在一个实施例中,步骤S101中基于待写入的第一数据生成第一二维阵列的操作,具体包括:
基于待写入的第一数据的位元数确定第一二维阵列的行数和列数;
基于所述行数和所述列数,将所述第一数据的位元依序排列成所述第一二维阵列。
在应用中,第一数据可以包括多个字节(byte),每个字节(byte)包括多个位元(bit),位元是计算机中的最小数据单位,为0或者1。第一数据存储在NAND flash存储器中时是以位元的形式存储。在生成第一二维阵列时,需要按照位元的形式生成第一二维阵列,即第一二维阵列中的一个元素表示第一数据的一个位元。可以根据第一数据的位元数确定第一二维阵列的行数和列数,行数和列数的乘积应等于或略大于第一数据的位元数,并且行数和列数之和应当等于其所有组合中的最小值,以得到后续生产的ECC码的长度最小。当行数和列数不等时,应使得行数大于列数,且行数和列数之间的差值为1。这些措施用以简化后续斜排方向ECC码的生成和校验过程。例如,第一数据的位元数为56时,可以设置第一二维阵列的行数为8、列数为7;第一数据的位元数为57~64中的任一位元数时,可以设置第一二维阵列的行数为8、列数为8。
在一个实施例中,基于公式
Figure BDA0002543732890000061
确定第一二维阵列的行数和列数;
其中,m表示所述行数,n表示所述列数,T表示所述第一数据的位元数,argmin()表示取最小值函数。
在应用中,在确定了第一二维阵列的行数和列数后,可以将第一数据的位元依序排列成第一二维阵列。第一数据的所有位元在第一二维阵列中的依序排列方式可以是:依字节先从左到右再从上到下、先从上到下再从左到右、先从左到右再从下到上、先从上到下再从右到左、先从右到左再从上到下、先从右到左再从下到上、先从下到上再从左到右、先从下到上再从右到左等排列顺序中的一种,还可以是上述未列举出的其它顺序。至于单个字节的8个位元填入第一二维阵列的次序,可以先放最高位再放次高位,也可以先放最低位再放次低位,通常各字节选定同一次序存放。当所有数据填充完毕后第一二维阵列未被填满时,第一二维阵列中未填满的位置全部置零。
在应用中,先从左到右再从上到下的顺序,是指先将数据字节从左到右逐位地排列到第一二维阵列的第一行,当本行排满时,即转入第二行、并从左到右逐位地排列到第一二维阵列的第二行,……,如此地不断往后排列,直到排列完毕。同理,先从上到下再从左到右的顺序,是指先将数据字节从上到下逐位地排列到第一二维阵列的第一列,当本列排满时,即转入第二列、并从上到下逐位地排列到第一二维阵列的第二列,……,如此地不断往后排列,直到排列完毕。其它排列顺序在此不再举例。
如图2所示,示例性地示出了按照先从左到右再从上到下的顺序排列第一数据时,生成的第一二维阵列;其中,T=64,m=8,n=8,8个字节(64个bit位元)的数据依次为00、01、02、03、04、05、06、07(十六进制表达)以,设定单个字节内的次序是先放入高位,则按先从左到右再从上到下的顺序排列的二进制第一二维阵列为图2所示的第一二维阵列。
步骤S102、基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码。
在应用中,第一行方向、第一列方向和第一斜排方向分别与第一二维阵列的行所处的行线、列所处的列线和斜排所处的斜线平行。斜排方向可以平行于经过第一二维阵列的第1行、第n列的位元与第n行、第1列的位元的斜线,也可以平行于经过第一二维阵列的第1行、第1列的位元与第n行、第n列的位元的斜线。可以对第一二维阵列的每一行中的位元进行异或运算得到第一行方向ECC码,对第一二维阵列的每一列中的位元进行异或运算得到第一列方向ECC码,对第一二维阵列的每一斜排中的位元进行异或运算得到第一斜排方向ECC码。
如图3所示,在一个实施例中,步骤S102包括如下步骤S301~S304:
步骤S301、将所述第一二维阵列的每一行中的位元逐位进行异或运算,得到第一行方向ECC码。
在应用中,在生成第一行方向ECC码时,将第一二维阵列中第1行的各位元逐位进行异或运算,得到第一行方向ECC码的第1位元;再将第一二维阵列中第2行的各位元逐位进行异或运算,得到第一行方向ECC码的第2位元;……;依此类推,直到最后将第一二维阵列中第m行的各位元逐位进行异或运算,得到第一行方向ECC码的第m位元。第一行方向ECC码的第i位元的生成公式,可用数学式表述为:H(i)=ai1^ai2^…^aij^…^ain;其中,H(i)表示第一行方向ECC码的第i位元,aij表示第一二维阵列中第i行j列的位元,i=1,2,…,m,j=1,2,…,n,^是异或运算符。
步骤S302、将所述第一二维阵列的每一列中的位元逐位进行异或运算,得到第一列方向ECC码。
在应用中,在生成第一列方向ECC码时,将第一二维阵列中第1列的各位元逐位进行异或运算,得到第一列方向ECC码的第1位元;再将第一二维阵列中第2列的各位元逐位进行异或运算,得到第一列方向ECC码的第二位元;……;依此类推,直到最后将第一二维阵列中第n列的各位元逐位进行异或运算,得到第一列方向ECC码的第n位元。第一列方向ECC码的第i位元的生成公式,可用数学式表述为:V(j)=a1j^a2j^…^aij^…^amj;其中,V(j)表示第一列方向ECC码的第j位元,aij表示第一二维阵列中第i行j列的位元,i=1,2,…,m,j=1,2,…,n,^是异或运算符。
步骤S303、将所述第一二维阵列的第i斜排和第m+i+Δ斜排组合成第i斜排组,将第k斜排作为第k斜排组;其中,i=1,2,…,m-1-Δ,k=m-Δ,m-Δ+1,…,m+Δ,Δ=(m+1)%2,%表示求余运算符。
在应用中,在生成第一斜排方向ECC码时,首先需要确定第一斜排方向,可以将第一斜排方向设置为平行于经过第一二维阵列的第1行、第n列的位元与第n行、第1列的位元的斜线,并将第一二维阵列中在此第一斜排方向上的各斜排定义为左向斜排;也可以将第一斜排方向设置为平行于经过第一二维阵列的第1行、第1列的位元与第n行、第n列的位元的斜线,并将第一二维阵列在此第一斜排方向上的各斜排定义为右向斜排。
如图4所示,示例性地示出了一个8行×8列的第一二维阵列中的左向斜排和右向斜排;其中,左图中各斜线所在的斜排为第一二维阵列中的左向斜排,右图中各斜线所在的斜排为第一二维阵列中的右向斜排。
在应用中,在确定第一斜排方向之后,进一步地将第一二维阵列中的第i斜排与第m+i+Δ斜排进行组合,形成一个斜排组,称为第i斜排组。一个斜排组中包含n-Δ个位元,Δ是取值为0或1的偏移调节因子,m为偶数时Δ取值为1,m为奇数时Δ取值为0,可采用数学式描述为:Δ=(m+1)%2,i=1,2,…,m-1-Δ,%表示求余运算符。
在应用中,将第一二维阵列中的第k斜排单独作为第k斜排组,第k斜排组中包含n-1或n个位元,k=m-Δ,m-Δ+1,…,m+Δ,第k斜排组共有1+2Δ个,排列于所有斜排组中的最后位置。
如图5所示,示例性地示出了一个8行×8列的第一二维阵列中的左向斜排组合成的斜排组;其中,由于m=8,因此,Δ=(8+1)%2=9%2=1,第1、2、…、6斜排与第10、11、…、15斜排依次两两组合,形成第1、2、…、6斜排组;第7、8、9斜排分别作为只由一个斜排组成的第7、8、9斜排组。
步骤S304、将所述第一二维阵列的每一斜排组中的位元逐位进行异或运算,得到第一斜排方向ECC码。
在应用中,在第一二维阵列的斜排组组合完成之后,第1斜排组中的各位元逐位进行异或运算,得到第一斜排方向ECC码的第1位元;再将第2斜排组中的各位元逐位进行异或运算,得到第一斜排方向ECC码的第1位元;……;依此类推,直到最后将第一二维阵列中第m+Δ斜排的各位元逐位进行异或运算,得到第一斜排方向ECC码的第m+Δ位元。第一斜排方向ECC码的第k位元的生成公式,可用数学式表述为:
S(k)=ak,1^ak-1,2^…^a1,k^am,k+2^am-1,k+3^…^am-n+k+2,n,k<m-Δ;
S(k)=ak,1^ak-1,2^…^a1,k,k=m-Δ;
S(k)=ak,1^ak-1,2^…^ak-n+1,n,k=m;
S(k)=ak,1+Δ^ak-1,3^…^ak-n+2,n,k=m+Δ;
其中,S(k)表示第一斜排方向ECC码的第k位元,aij表示第一二维阵列中第i行j列的位元,i=1,2,…,m,j=1,2,…,n,k=1,2,…,m+Δ,^是异或运算符。
步骤S103、基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元。
在应用中,在生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码之后,进一步地对第一数据的位元进行异或预算得到第一整体ECC码的第一位元,再对第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码的位元进行异或运算得到第一整体ECC码的第二位元,第一整体ECC码由第一位元和第二位元组成。
如图6所示,在一个实施例中,步骤S103包括如下步骤S601和S602:
步骤S601、将所述第一数据的所有位元逐位进行异或运算,得到所述第一整体ECC码的第一位元。
在应用中,第一整体ECC码的第一位元的生成公式,可用数学式表述为:C1=a1^a2^…^aT;其中,C1表示第一整体ECC码的第一位元,a1表示第一数据中的第1个位元,a2表示第一数据中的第2个位元,aT表示第一数据中的第T个位元(也即最后一个位元),^是异或运算符。
步骤S602、分别将所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码的所有位元逐位进行异或运算,得到所述第一整体ECC码的第二位元。
在应用中,第一整体ECC码的第二位元的生成公式,可用数学式表述为:C2=H(1)^H(2)^…H(i)^…^H(m)^V(1)^V(2)^…V(j)^…^V(n)^S(1)^S(2)^…S(k)^…^S(m+Δ);其中,C2表示第一整体ECC码的第二位元,H(i)表示第一行方向ECC码的第i位元,V(j)表示第一列方向ECC码的第j位元,S(k)表示第一斜排方向ECC码的第k位元,i=1,2,…,m,j=1,2,…,n,k=1,2,…,m+Δ,^是异或运算符。
步骤S104、将所述第一行方向ECC码、所述第一列方向ECC码、所述第一斜排方向ECC码和所述第一整体ECC码组合成第一ECC码。
在应用中,在获得第一行方向ECC码、第一列方向ECC码、第一斜排方向ECC码和第一整体ECC码之后,将这四个部分的ECC码拼接合并在一起,组合成最终的2m+n+2+Δ位ECC码,即第一ECC码。四个部分ECC码的组合顺序可以根据实际需要预先设定,例如:先写入m位的第一行方向ECC码,接着写入n位的第一列方向ECC码,再写入m+Δ位的第一斜排方向ECC码,最后写入2位的第一整体ECC码。根据排列数公式进行计算,可得四个部分的ECC码的组合顺序总共有
Figure BDA0002543732890000091
种,可以根据实际需要选择其中任一种。
步骤S105、将所述第一数据和所述第一ECC码写入所述NAND flash存储器。
在应用中,在生成第一ECC码之后,将第一数据和第一ECC码一同写入NAND flash存储器中进行存储。
本申请实施例提供的基于NAND flash存储器实现的数据存储方法,通过在执行写操作时,基于待写入的第一数据生成第一二维阵列;基于第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;基于第一数据生成第一整体ECC码的第一位元,基于第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码生成第一整体ECC码的第二位元;将第一行方向ECC码、第一列方向ECC码、第一斜排方向ECC码和第一整体ECC码组合成第一ECC码;将第一数据和第一ECC码写入NAND flash存储器,由于第一数据中每个位元参与至少四次ECC码计算,三个方向的ECC码参与一次ECC码计算,使得在对第一数据执行读操作时能够根据第一ECC码以及采用生成第一ECC码的方式基于读出的第二数据生成的第三ECC码,确定第二数据和第三ECC码中的一到两个位元错误的位置并进行纠正;
通过将第一二维阵列中的一部分斜排两两组合成斜排组,剩余部分斜排单独作为斜排组,并将每一斜排组中的位元逐位进行异或运算得到包括m+Δ个位元的第一斜排方向ECC码,相对于直接根据第一二维阵列的每个斜排中的位元生成包括m+n-1个位元的第一斜排方向ECC码,可以将第一斜排方向ECC码缩短Δ-n+1位,进而将第一ECC码由2m+2n-1位缩短为2m+n+2+Δ位,从而可以有效减少第一ECC码占用的存储空间,使NAND flash存储器的每页可以写入更多数据。
本申请实施例还提供一种数据校验方法,基于NAND flash存储器实现,可以应用于任意的能够与NAND flash存储器建立通讯连接,从NAND flash存储器中读出数据并具有计算功能的第二终端设备,由第二终端设备的处理器在运行具有相应功能的计算机程序时执行。NAND flash存储器中存储有基于上述实施例中的数据存储方法写入的第一数据和第一ECC码。数据校验方法用于在执行读操作时,根据读出的第二数据生成三个方向的ECC码,然后根据第二数据和三个方向的ECC码进一步生成第二整体ECC码,最后将由三个方向的ECC码和第二整体ECC组成的第三ECC码与第一ECC码进行比对,校验第二数据和读出的第二ECC码中存在的位元错误的数量,确定位元错误的位置并纠正。
在应用中,第二终端设备可以是手机、平板电脑、笔记本电脑、超级移动个人计算机、上网本、个人数字助理等,本申请实施例中对第二终端设备的具体类型不作任何限制。
在应用中,第一终端设备和第二终端设备可以是同一个或不同的终端设备。第一终端设备和第二终端设备是不同的终端设备时,第一终端设备将待写入的第一数据和第一ECC码写入NAND flash存储器中进行存储之后,由第二终端设备读取NAND flash存储器中存储的第一数据和第一ECC码并进行校验。
如图7所示,本实施例提供的数据校验方法,包括如下步骤S701~S706:
步骤S701、在执行读操作时,读取已存储的第一数据和基于所述第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;
步骤S702、基于所述第二数据生成第二二维阵列;
步骤S703、基于所述第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;
步骤S704、基于所述第二数据生成第二整体ECC码的第一位元,基于所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码生成所述第二整体ECC码的第二位元;
步骤S705、将所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码和所述第二整体ECC码组合成第三ECC码;
步骤S706、基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验;其中,所述第一ECC码和所述第三ECC码的生成方式相同。
在一个实施例中,步骤S702包括:
基于所述第二数据的位元数确定第二二维阵列的行数和列数;
基于所述行数和所述列数,将所述第二数据的位元依序排列成所述第二二维阵列。
在一个实施例中,所述基于所述第二数据的位元数确定第二二维阵列的行数和列数,包括:
基于公式
Figure BDA0002543732890000111
确定第二二维阵列的行数和列数;
其中,m表示所述行数,n表示所述列数,T表示所述第二数据的位元数,argmin()表示取最小值函数。
在一个实施例中,步骤S703包括:
将所述第二二维阵列的每一行中的位元逐位进行异或运算,得到第二行方向ECC码;
将所述第二二维阵列的每一列中的位元逐位进行异或运算,得到第二列方向ECC码;
将所述第二二维阵列的第i斜排和第m+i+Δ斜排组合成第i斜排组,将第k斜排作为第k斜排组;
将所述第二二维阵列的每一斜排组中的位元逐位进行异或运算,得到第二斜排方向ECC码;
其中,i=1,2,…,m-1-Δ,k=m-Δ,m-Δ+1,…,m+Δ,Δ=(m+1)%2,%表示求余运算符,所述斜排方向平行于经过所述第二二维阵列的第1行、第n列的位元与第n行、第1列的位元的斜线或平行于经过所述第二二维阵列的第1行、第1列的位元与第n行、第n列的位元的斜线,m表示所述第二二维阵列的行数,n表示所述第二二维阵列的列数。
在一个实施例中,步骤S704包括:
将所述第二数据的所有位元逐位进行异或运算,得到所述第二整体ECC码的第一位元;
分别将所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码的所有位元逐位进行异或运算,得到所述第二整体ECC码的第二位元。
在应用中,第三ECC码与上述数据存储方法实施例中的第一ECC码的生成方式相同,也即步骤S702~S705与步骤S101~S104的实现方式相同。因此,本实施例中不再赘述第三ECC码的生成过程,将步骤S101~S104中第二数据等效视为第一数据,并将第三ECC码等效视为第一ECC码,即可得到第三ECC码的生成过程。
在应用中,在对NAND flash存储器中已存储的第一数据和第一ECC码执行读操作时,从NAND flash存储器中读出的第二数据和第二ECC码可能会因为少数位元出现反转而导致第二数据和第二ECC码与NAND flash存储器中存储的第一数据和第一ECC码不一致,因此,需要对第二数据和第二ECC码进行校验,确定位元错误的数量和位置并进行纠正,以得到正确的第二数据和第二ECC码,正确的第二数据即为第一数据,正确的第二ECC码即为第一ECC码。通过比对第二ECC码和第三ECC码中位置对应的位元,可以确定第二数据和第二ECC码中存在的位元错误的数量,并确定第二数据中一到两个位元错误的具体位置。
如图8所示,在一个实施例中,步骤S706包括如下步骤S801~S803:
步骤S801、将所述第二ECC码和所述第三ECC码中位置对应的位元进行异或运算,获得校验位元串。
在应用中,由于第三ECC码和第一ECC码基于相同的方式生成,第二ECC码是从NANDflash存储器中读出的第一ECC码,因此,第一ECC码、第二ECC码和第三ECC码的数据结构相同,校验位元串包括分别与第二行方向ECC码、第二列方向ECC码、第二斜排方向ECC码、第二整体ECC码的第一位元和第二位元对应的行方向校验位元串、列方向校验位元串、斜排方向校验位元串、第一整体校验位元串和第二整体校验位元串。校验位元串中各部分位元串的顺序与第三ECC码和第一ECC码中各部分的ECC码的组合顺序一致。例如,假设第一ECC码为00000001、第三ECC码为00010000,则校验位元串为00000001^00010000=00010001。
步骤S802、当所述校验位元串中的位元均为0时,确定所述第二数据和所述第二ECC码正确。
在应用中,当校验位元串中的位元均为0时,表明第二数据和二ECC码正确,无需对第二数据进行纠正。
步骤S803、当所述校验位元串中的位元包括非0时,确定所述第二数据和所述第二ECC码中有至少一个位元错误。
在应用中,当校验位元串中的位元包括非0时,表明第二数据和第二ECC码中的至少一个位元错误,需要对第二数据中存在的位元错误进行定位并纠正,第二ECC码中的错误由于不影响需要使用的有效数据(即第二数据)可以不纠正。
在一个实施例中,设定WX表示行方向校验位元串中位元1的个数,WY表示列方向校验位元串中位元1的个数,WZ表示斜排方向校验位元串中位元1的个数,X1表示行方向校验位元串中第1个位元1的序号,X2表示行方向校验位元串中第2个位元1的序号,X1和X2的取值范围为1~m,Y1表示列方向校验位元串中第1个位元1的序号,Y2表示列方向校验位元串中第2个位元1的序号,Y1和Y2的取值范围为1~n,Z1表示斜排方向校验位元串中第1个位元1的序号,Z2表示斜排方向校验位元串中第2个位元1的序号,Z1和Z2的取值范围为1~m+Δ,Δ=(m+1)%2,%表示求余运算符,LX表示位于行方向校验位元串中位元1在第二二维阵列中所处的行的行线,LY表示位于列方向校验位元串中位元1在第二二维阵列中所处的列的列线,LZ表示位于斜排方向校验位元串中位元1在第二二维阵列中所处的斜排的斜线,Ca1表示第一整体校验位元串,Ca2表示第二整体校验位元串,斜排方向平行于经过第二二维阵列的第1行、第n列的位元与第n行、第1列的位元的斜线或平行于经过第二二维阵列的第1行、第1列的位元与第n行、第n列的位元的斜线,m表示第二二维阵列的行数,n表示第二二维阵列的列数;
基于上述设定,步骤S803包括如下步骤S901~S913:
步骤S901、当WX=WY=WZ=1,且X1+Y1=Z1+1或X1+Y1=Z1+m+1+Δ时,确定所述第二数据中有一个位元错误,将位于LX、LY和LZ的交点处的一个位元取反。
如图9所示,基于步骤S901,示例性地示出了一个8行×8列的第二二维阵列中有一个位元错误时的示意图;其中,假设CX=00010000、CY=00100000、CZ=000001000,则第二数据中的一个位元错误为第二二维阵列中的位元a43,即位于第4行第3列的位元“0”,对这一个位元“0”取反,恢复为正确的位元“1”,第二数据中的一个位元错误即得到纠正。
步骤S902、WX=WY=2、WZ=0,且X1+Y2=X2+Y1时,确定所述第二数据中有两个位元错误,将位于LX和LY的四个交点中的两个交点处且处于同一斜排的两个位元取反。
如图10所示,基于步骤S902,示例性地示出了一个8行×8列的第二二维阵列中有两个位元错误时的示意图;其中,假设CX=00100001、CY=00100001、CZ=000000000,则第二数据中的两个位元错误为第二二维阵列中的位元a83和a38,即位于第8行第3列的位元“0”和位于第3行第8列的位元“0”,对这两个位元“0”和“0”分别取反,恢复为两个正确的位元“1”和“1”,第二数据中的两个位元错误即得到纠正。
步骤S903、当WX=WY=2、WZ=0,且X1+Y1+m+Δ=X2+Y2时,确定所述第二数据中有两个位元错误,将位于LX和LY的四个交点中的两个交点处且处于同一斜排的两个位元取反。
如图11所示,基于步骤S903,示例性地示出了一个8行×8列的第二二维阵列中有两个位元错误时的示意图;其中,假设CX=00100001、CY=00010001、CZ=000000000,则第二数据中的两个位元错误为第二二维阵列中的位元a34和a88,即位于第3行第4列的位元“0”和位于第8行第8列的位元“1”,对这两个位元“0”和“1”分别取反,恢复为两个正确的位元“1”和“0”,第二数据中的两个位元错误即得到纠正。
步骤S904、当WX=WY=WZ=2,且X1+Y2=X2+Y1时,确定所述第二数据中有两个位元错误,将位于LX、LY和LZ的两个交点处的两个位元取反。
在应用中,位于LX、LY和LZ的交点可以采用等式X+Y=Z+1或X+Y=Z+m+1+Δ来确定,其中X取值为X1或X2、Y取值为Y1或Y2、Z取值为Z1或Z2;X、Y和Z的所有组合数为6,故可以依次判定12个等式,若其中任一等式成立,则该组合所对应的点(X,Y)即为LX、LY和LZ的交点;检测到LX、LY和LZ的两个交点后,即停止对剩下的等式进行判定,可以节省计算时间。
如图12所示,基于步骤S904,示例性地示出了一个8行×8列的第二二维阵列中有两个位元错误时的示意图;其中,假设CX=00100001、CY=00100001、CZ=000011000,则第二数据中的两个位元错误为第二二维阵列中的位元a33和a88,即位于第3行第3列的位元“0”和位于第8行第8列的位元“1”,对这两个位元“0”和“1”分别取反,恢复为两个正确的位元“1”和“0”,第二数据中的两个位元错误即得到纠正。
步骤S905、当WX=WY=WZ=2,且X1+Y2≠X2+Y1时,确定所述第二数据中有两个位元错误,将位于LX、LY和LZ的两个交点处的两个位元取反。
如图13所示,基于步骤S905,示例性地示出了一个8行×8列的第二二维阵列中有两个位元错误时的示意图;其中,假设CX=00100010、CY=00100001、CZ=100000001,则第二数据中的两个位元错误为第二二维阵列中的位元a38和a73,即位于第3行第8列的位元“0”和位于第7行第3列的位元“0”,对这两个位元“0”和“0”分别取反,恢复为两个正确的位元“1”和“1”,第二数据中的两个位元错误即得到纠正。
步骤S906、当WX=2、WY=0、WZ=2,且Z1-X1=Z2-X2、Z1-X1=Z2+m+Δ-X2、Z1-X1+m+Δ=Z2-X2、Z1-X2=Z2-X1、Z1-X2=Z2+m+Δ-X1和Z1-X2+m+Δ=Z2-X1中任一式成立时,确定所述第二数据中有两个位元错误,将位于LX和LZ的三个或四个交点中的两个交点处且处于同一列的两个位元取反。
如图14所示,基于步骤S906,示例性地示出了一个8行×8列的第二二维阵列中有两个位元错误时的示意图;其中,假设CX=00100001、CY=00000000、CZ=100010000,则第二数据中的两个位元错误为第二二维阵列中的位元a33和a83,即位于第3行第3列的位元“0”和位于第8行第3列的位元“0”,对这两个位元“0”和“0”分别取反,恢复为两个正确的位元“1”和“1”,第二数据中的两个位元错误即得到纠正。
步骤S907、当WX=0、WY=WZ=2,且Z1-Y1=Z2-Y2、Z1+m+Δ-Y1=Z2-Y2、Z1-Y1=Z2+m+Δ-Y2、Z1-Y2=Z2-Y1、Z1+m+Δ-Y2=Z2-Y1和Z1-Y2=Z2+m+Δ-Y1中任一式成立时,确定所述第二数据中有两个位元错误,将位于LY和LZ的三个或四个交点中的两个交点处且处于同一行的两个位元取反。
如图15所示,基于步骤S907,示例性地示出了一个8行×8列的第二二维阵列中有两个位元错误时的示意图;其中,假设CX=00000000、CY=00100010、CZ=100010000,则第二数据中的两个位元错误为第二二维阵列中的位元a83和a67,即位于第8行第3列的位元“0”和位于第6行第7列的位元“1”,对这两个位元“0”和“1”分别取反,恢复为两个正确的位元“1”和“0”,第二数据中的两个位元错误即得到纠正。
步骤S908、当WX、WY和WZ中仅有一个等于1、其余都等于0,且Ca1=0、Ca2=1时,确定所述第二数据正确且所述第二ECC码中有一个位元错误;
步骤S909、当WX、WY和WZ中仅有一个等于2、其余都等于0,且Ca1=0、Ca2=0时,确定所述第二数据正确且所述第二ECC码中有两个位元错误;
步骤S910、当WX、WY和WZ中有两个等于1、其余等于0,且Ca1=0、Ca2=0时,确定所述第二数据正确且所述第二ECC码中有两个位元错误。
在应用中,步骤S908、S909或S910中,由于第二数据正确,因此不需要进行纠错处理。
步骤S911、当WX、WY和WZ中仅有一个等于2、其余都等于1,且Ca1=1、Ca2=1时,确定所述第二数据和所述第二ECC码中各有一个位元错误,将位于LX、LY和LZ的交点处一个位元取反。
如图16所示,基于步骤S911,示例性地示出了一个8行×8列的第二二维阵列和第二ECC码中各有一个位元错误时的示意图;其中,假设CX=00010001、CY=00100000、CZ=000001000,则第二数据中的一个位元错误为第二二维阵列中的位元a43,即位于第4行第3列的位元“0”,对这一个位元“0”取反,恢复为正确的位元“1”,第二数据中的一个位元错误即得到纠正,第二ECC码中的一个位元错误为CX的第8位位元“1”,无需纠正。
步骤S912、当WX、WY和WZ中有两个等于1、其余等于0,且Ca1=1、Ca2=1时,确定所述第二数据和所述第二ECC码中各有一个位元错误,将位于LX和LZ的交点处的位元取反。
如图17所示,基于步骤S912,示例性地示出了一个8行×8列的第二二维阵列和第二ECC码中各有一个位元错误时的示意图;其中,假设CX=00010001、CY=00000000、CZ=000001000,则第二数据中的一个位元错误为第二二维阵列中的位元a43,即位于第4行第3列的位元“0”,对这一个位元“0”取反,恢复为正确的位元“1”,第二数据中的一个位元错误即得到纠正,第二ECC码中的一个位元错误为CY的第3位位元“0”,无需纠正。
步骤S913、当不符合上述任一种情况时,确定所述第二数据和所述第二ECC码中有至少三个位元错误。
在应用中,当不符合步骤S802和步骤S901~S913中的任一种情况时,表明第二数据和第二ECC码中有至少三个位元错误,无法纠错,可以通过状态位或返回值报告“错误过多、无法纠错”。
在一个实施例中,步骤S913之后,包括:
发出用于表征所述第二数据和所述第二ECC码中有至少三个位元错误、无法纠错的提示信息,所述提示信息为状态位或返回值。
在应用中,可以顺序或逆序判断步骤S802和步骤S901~S913中的每种情况是否成立,当确定其中任一种情况成立时即结束判断。
本申请实施例提供的基于NAND flash存储器实现的数据校验方法,通过在执行读操作时,读取已存储的第一数据和在执行写操作时基于第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;然而采用与第一ECC码相同的生成方式,基于第二数据生成第二二维阵列;基于第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;基于第二数据生成第二整体ECC码的第一位元,基于第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码生成第二整体ECC码的第二位元;将第二行方向ECC码、第二列方向ECC码、第二斜排方向ECC码和第二整体ECC码组合成第三ECC码;基于第二ECC码和第三ECC码,对第二数据和第二ECC码进行校验;可以确定第二数据和第二ECC码中的一到两个位元错误的位置并进行纠正;
通过将第二二维阵列中一部分斜排两两组合成斜排组,剩余部分斜排单独作为斜排组,并将每一斜排组中的位元逐位进行异或运算得到包括m+Δ个位元的第二斜排方向ECC码,相对于直接根据第二二维阵列的每个斜排中的位元生成包括m+n-1个位元的第二斜排方向ECC码,可以将第二斜排方向ECC码缩短Δ-n+1位,进而将第三ECC码由2m+2n-1位缩短为2m+n+2+Δ位,从而可以有效减少第三ECC码占用的存储空间,降低对第二数据和第二ECC码进行校验时的计算量。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请实施例还提供一种数据存储装置,基于NAND flash存储器实现,用于执行上述数据存储方法实施例中的步骤。数据存储装置可以是第一终端设备中的虚拟装置(virtual appliance),由第一终端设备的处理器运行,也可以是第一终端设备本身。
如图18所示,本申请实施例提供的数据存储装置18包括:
第一阵列生成模块181,用于在执行写操作时,基于待写入的第一数据生成第一二维阵列;
第一ECC码生成模块182,用于:
基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;
基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元;
将所述第一行方向ECC码、所述第一列方向ECC码、所述第一斜排方向ECC码和所述第一整体ECC码组合成第一ECC码;
写模块183,用于将所述第一数据和所述第一ECC码写入所述NAND flash存储器。
在应用中,数据存储装置中的各模块可以为软件程序模块,也可以通过处理器中集成的不同逻辑电路实现,还可以通过多个分布式处理器实现。
本申请实施例还提供一种数据校验装置,基于NAND flash存储器实现,用于执行上述数据校验方法实施例中的步骤。数据校验装置可以是第二终端设备中的虚拟装置,由第二终端设备的处理器运行,也可以是第二终端设备本身。
如图19所示,本申请实施例提供的数据校验装置19包括:
读模块191,用于在执行读操作时,读取已存储的第一数据和基于所述第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;
第二阵列生成模块192,用于基于所述第二数据生成第二二维阵列;
第三ECC码生成模块193,用于:
基于所述第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;
基于所述第二数据生成第二整体ECC码的第一位元,基于所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码生成所述第二整体ECC码的第二位元;
将所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码和所述第二整体ECC码组合成第三ECC码;
校验模块194,用于基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验;其中,所述第一ECC码和所述第三ECC码的生成方式相同。
在一个实施例中,所述数据校验装置还包括:
提示模块,用于发出用于表征所述第二数据和所述第二ECC码中有至少三个位元错误、无法纠错的提示信息,所述提示信息为状态位或返回值。
在应用中,数据校验装置中的各模块可以为软件程序模块,也可以通过处理器中集成的不同逻辑电路实现,还可以通过多个分布式处理器实现。
如图20所示,本申请实施例还提供一种终端设备20,包括:至少一个处理器21(图20中仅示出一个处理器)、存储器22以及存储在存储器22中并可在至少一个处理器21上运行的计算机程序23。终端设备20可以是上述数据存储方法实施例中的第一终端设备或数据校验方法实施例中的第二终端设备,终端设备20是第一终端设备时,处理器21执行计算机程序23时实现上述数据存储方法实施例中的步骤;终端设备20是第二终端设备时,处理器21执行计算机程序23时实现上述数据校验方法实施例中的步骤。
在应用中,终端设备可包括,但不仅限于,处理器和存储器,还可以包括显示器、电源器件等支持终端设备正常工作的必要部件。本领域技术人员可以理解,图20仅仅是终端设备的举例,并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
在应用中,处理器可以是中央处理模块(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
在应用中,存储器在一些实施例中可以是终端设备的内部存储模块,例如终端设备的硬盘或内存。存储器在另一些实施例中也可以终端设备的外部存储设备,例如,终端设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。存储器还可以既包括终端设备的内部存储模块也包括外部存储设备。存储器用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如计算机程序的程序代码等。存储器还可以用于暂时地存储已经输出或者将要输出的数据。
需要说明的是,上述装置/模块之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将所述装置的内部结构划分成不同的功能模块或模块,以完成以上描述的全部或者部分功能。实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中,上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述数据储存方法和/或数据校验方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备可实现上述数据储存方法和/或数据校验方法实施例中的步骤。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或模块的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种数据存储方法,其特征在于,基于NAND flash存储器实现,所述方法包括:
在执行写操作时,基于待写入的第一数据生成第一二维阵列;
基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;
基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元;
将所述第一行方向ECC码、所述第一列方向ECC码、所述第一斜排方向ECC码和所述第一整体ECC码组合成第一ECC码;
将所述第一数据和所述第一ECC码写入所述NAND flash存储器。
2.如权利要求1所述的数据存储方法,其特征在于,所述基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码,包括:
将所述第一二维阵列的每一行中的位元逐位进行异或运算,得到第一行方向ECC码;
将所述第一二维阵列的每一列中的位元逐位进行异或运算,得到第一列方向ECC码;
将所述第一二维阵列的第i斜排和第m+i+Δ斜排组合成第i斜排组,将第k斜排作为第k斜排组;
将所述第一二维阵列的每一斜排组中的位元逐位进行异或运算,得到第一斜排方向ECC码;
其中,i=1,2,…,m-1-Δ,k=m-Δ,m-Δ+1,…,m+Δ,Δ=(m+1)%2,%表示求余运算符,所述斜排方向平行于经过所述第一二维阵列的第1行、第n列的位元与第n行、第1列的位元的斜线或平行于经过所述第一二维阵列的第1行、第1列的位元与第n行、第n列的位元的斜线,m表示所述第一二维阵列的行数,n表示所述第一二维阵列的列数,m≥n。
3.如权利要求1或2所述的数据存储方法,其特征在于,所述基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元,包括:
将所述第一数据的所有位元逐位进行异或运算,得到所述第一整体ECC码的第一位元;
分别将所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码的所有位元逐位进行异或运算,得到所述第一整体ECC码的第二位元。
4.一种数据校验方法,其特征在于,基于NAND flash存储器实现,所述方法包括:
在执行读操作时,读取已存储的第一数据和基于所述第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;
基于所述第二数据生成第二二维阵列;
基于所述第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;
基于所述第二数据生成第二整体ECC码的第一位元,基于所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码生成所述第二整体ECC码的第二位元;
将所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码和所述第二整体ECC码组合成第三ECC码;
基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验;其中,所述第一ECC码和所述第三ECC码的生成方式相同。
5.如权利要求4所述的数据校验方法,其特征在于,所述基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验,包括:
将所述第二ECC码和所述第三ECC码中位置对应的位元进行异或运算,获得校验位元串;
当所述校验位元串中的位元均为0时,确定所述第二数据和所述第二ECC码正确;
当所述校验位元串中的位元包括非0时,确定所述第二数据和所述第二ECC码中有至少一个位元错误。
6.如权利要求5所述的数据校验方法,其特征在于,所述校验位元串包括分别与所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码、所述第二整体ECC码的第一位元和第二位元对应的行方向校验位元串、列方向校验位元串、斜排方向校验位元串、第一整体校验位元串和第二整体校验位元串;
所述当所述校验位元串中的位元包括非0时,确定所述第二数据和所述第二ECC码中有至少一个位元错误,包括:
当WX=WY=WZ=1,且X1+Y1=Z1+1或X1+Y1=Z1+m+1+Δ时,确定所述第二数据中有一个位元错误,将位于LX、LY和LZ的交点处的一个位元取反;
当WX=WY=2、WZ=0,且X1+Y2=X2+Y1时,确定所述第二数据中有两个位元错误,将位于LX和LY的四个交点中的两个交点处且处于同一斜排的两个位元取反;
当WX=WY=2、WZ=0,且X1+Y1+m+Δ=X2+Y2时,确定所述第二数据中有两个位元错误,将位于LX和LY的四个交点中的两个交点处且处于同一斜排的两个位元取反;
当WX=WY=WZ=2,且X1+Y2=X2+Y1时,确定所述第二数据中有两个位元错误,将位于LX、LY和LZ的两个交点处的两个位元取反;
当WX=WY=WZ=2,且X1+Y2≠X2+Y1时,确定所述第二数据中有两个位元错误,将位于LX、LY和LZ的两个交点处的两个位元取反;
当WX=2、WY=0、WZ=2,且Z1-X1=Z2-X2、Z1-X1=Z2+m+Δ-X2、Z1-X1+m+Δ=Z2-X2、Z1-X2=Z2-X1、Z1-X2=Z2+m+Δ-X1和Z1-X2+m+Δ=Z2-X1中任一式成立时,确定所述第二数据中有两个位元错误,将位于LX和LZ的三个或四个交点中的两个交点处且处于同一列的两个位元取反;
当WX=0、WY=WZ=2,且Z1-Y1=Z2-Y2、Z1+m+Δ-Y1=Z2-Y2、Z1-Y1=Z2+m+Δ-Y2、Z1-Y2=Z2-Y1、Z1+m+Δ-Y2=Z2-Y1和Z1-Y2=Z2+m+Δ-Y1中任一式成立时,确定所述第二数据中有两个位元错误,将位于LY和LZ的三个或四个交点中的两个交点处且处于同一行的两个位元取反;
当WX、WY和WZ中仅有一个等于1、其余都等于0,且Ca1=0、Ca2=1时,确定所述第二数据正确且所述第二ECC码中有一个位元错误;
当WX、WY和WZ中仅有一个等于2、其余都等于0,且Ca1=0、Ca2=0时,确定所述第二数据正确且所述第二ECC码中有两个位元错误;
当WX、WY和WZ中有两个等于1、其余等于0,且Ca1=0、Ca2=0时,确定所述第二数据正确且所述第二ECC码中有两个位元错误;
当WX、WY和WZ中仅有一个等于2、其余都等于1,且Ca1=1、Ca2=1时,确定所述第二数据和所述第二ECC码中各有一个位元错误,将位于LX、LY和LZ的交点处一个位元取反;
当WX、WY和WZ中有两个等于1、其余等于0,且Ca1=1、Ca2=1时,确定所述第二数据和所述第二ECC码中各有一个位元错误,将位于LX和LZ的交点处的位元取反;
当不符合上述任一种情况时,确定所述第二数据和所述第二ECC码中有至少三个位元错误;
其中,WX表示所述行方向校验位元串中位元1的个数,WY表示所述列方向校验位元串中位元1的个数,WZ表示所述斜排方向校验位元串中位元1的个数,X1表示所述行方向校验位元串中第1个位元1的序号,X2表示所述行方向校验位元串中第2个位元1的序号,X1和X2的取值范围为1~m,Y1表示所述列方向校验位元串中第1个位元1的序号,Y2表示所述列方向校验位元串中第2个位元1的序号,Y1和Y2的取值范围为1~n,Z1表示所述斜排方向校验位元串中第1个位元1的序号,Z2表示所述斜排方向校验位元串中第2个位元1的序号,Z1和Z2的取值范围为1~m+Δ,Δ=(m+1)%2,%表示求余运算符,LX表示位于所述行方向校验位元串中位元1在所述第二二维阵列中所处的行的行线,LY表示位于所述列方向校验位元串中位元1在所述第二二维阵列中所处的列的列线,LZ表示位于所述斜排方向校验位元串中位元1在所述第二二维阵列中所处的斜排的斜线,Ca1表示所述第一整体校验位元串,Ca2表示所述第二整体校验位元串,所述斜排方向平行于经过所述第二二维阵列的第1行、第n列的位元与第n行、第1列的位元的斜线或平行于经过所述第二二维阵列的第1行、第1列的位元与第n行、第n列的位元的斜线,m表示所述第二二维阵列的行数,n表示所述第二二维阵列的列数,m≥n。
7.一种数据存储装置,其特征在于,基于NAND flash存储器实现,所述装置包括:
第一阵列生成模块,用于在执行写操作时,基于待写入的第一数据生成第一二维阵列;
第一ECC码生成模块,用于:
基于所述第一二维阵列生成第一行方向ECC码、第一列方向ECC码和第一斜排方向ECC码;
基于所述第一数据生成第一整体ECC码的第一位元,基于所述第一行方向ECC码、所述第一列方向ECC码和所述第一斜排方向ECC码生成所述第一整体ECC码的第二位元;
将所述第一行方向ECC码、所述第一列方向ECC码、所述第一斜排方向ECC码和所述第一整体ECC码组合成第一ECC码;
写模块,用于将所述第一数据和所述第一ECC码写入所述NAND flash存储器。
8.一种数据校验装置,其特征在于,基于NAND flash存储器实现,所述装置包括:
读模块,用于在执行读操作时,读取已存储的第一数据和基于所述第一数据生成的第一ECC码,获得读出的第二数据和第二ECC码;
第二阵列生成模块,用于基于所述第二数据生成第二二维阵列;
第三ECC码生成模块,用于:
基于所述第二二维阵列生成第二行方向ECC码、第二列方向ECC码和第二斜排方向ECC码;
基于所述第二数据生成第二整体ECC码的第一位元,基于所述第二行方向ECC码、所述第二列方向ECC码和所述第二斜排方向ECC码生成所述第二整体ECC码的第二位元;
将所述第二行方向ECC码、所述第二列方向ECC码、所述第二斜排方向ECC码和所述第二整体ECC码组合成第三ECC码;
校验模块,用于基于所述第二ECC码和所述第三ECC码,对所述第二数据和所述第二ECC码进行校验;其中,所述第一ECC码和所述第三ECC码的生成方式相同。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至3任一项所述的数据存储方法和/或如权利要求4至6任一项所述的数据校验方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述的数据存储方法和/或如权利要求4至6任一项所述的数据校验方法的步骤。
CN202010554289.7A 2020-06-17 2020-06-17 数据存储、校验方法、装置、终端设备及存储介质 Active CN111858135B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010554289.7A CN111858135B (zh) 2020-06-17 2020-06-17 数据存储、校验方法、装置、终端设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010554289.7A CN111858135B (zh) 2020-06-17 2020-06-17 数据存储、校验方法、装置、终端设备及存储介质

Publications (2)

Publication Number Publication Date
CN111858135A true CN111858135A (zh) 2020-10-30
CN111858135B CN111858135B (zh) 2023-12-19

Family

ID=72986710

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010554289.7A Active CN111858135B (zh) 2020-06-17 2020-06-17 数据存储、校验方法、装置、终端设备及存储介质

Country Status (1)

Country Link
CN (1) CN111858135B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3825893A (en) * 1973-05-29 1974-07-23 Ibm Modular distributed error detection and correction apparatus and method
JPH10334697A (ja) * 1997-05-28 1998-12-18 Sony Corp 半導体記憶装置およびその誤り訂正方法
US20080016428A1 (en) * 2005-10-24 2008-01-17 Samsung Electronics Co., Ltd. Semiconductor memory device and bit error detection method thereof
CN101183565A (zh) * 2007-12-12 2008-05-21 深圳市硅格半导体有限公司 存储介质中数据校验方法
US20170235941A1 (en) * 2016-02-16 2017-08-17 Samsung Electronics Co., Ltd. Key generating method and apparatus using characteristic of memory
CN109542668A (zh) * 2018-10-29 2019-03-29 百富计算机技术(深圳)有限公司 基于nand flash存储器的校验方法、终端设备及存储介质
CN110277131A (zh) * 2019-05-30 2019-09-24 百富计算机技术(深圳)有限公司 基于nand flash存储器的校验方法、终端设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3825893A (en) * 1973-05-29 1974-07-23 Ibm Modular distributed error detection and correction apparatus and method
JPH10334697A (ja) * 1997-05-28 1998-12-18 Sony Corp 半導体記憶装置およびその誤り訂正方法
US20080016428A1 (en) * 2005-10-24 2008-01-17 Samsung Electronics Co., Ltd. Semiconductor memory device and bit error detection method thereof
CN101183565A (zh) * 2007-12-12 2008-05-21 深圳市硅格半导体有限公司 存储介质中数据校验方法
US20170235941A1 (en) * 2016-02-16 2017-08-17 Samsung Electronics Co., Ltd. Key generating method and apparatus using characteristic of memory
CN109542668A (zh) * 2018-10-29 2019-03-29 百富计算机技术(深圳)有限公司 基于nand flash存储器的校验方法、终端设备及存储介质
CN110277131A (zh) * 2019-05-30 2019-09-24 百富计算机技术(深圳)有限公司 基于nand flash存储器的校验方法、终端设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
章宇杰;沈小波;: "基于FPGA的固态盘ECC实现", 电子与封装, no. 11 *

Also Published As

Publication number Publication date
CN111858135B (zh) 2023-12-19

Similar Documents

Publication Publication Date Title
CN109542668B (zh) 基于nand flash存储器的校验方法、终端设备及存储介质
US5708667A (en) Method for detecting and correcting error by means of a high-dimension matrix and device using the same
US8010875B2 (en) Error correcting code with chip kill capability and power saving enhancement
CN112860475B (zh) 基于rs纠删码的校验块恢复方法、装置、系统及介质
US8640013B2 (en) Storage device
KR20080018560A (ko) 에러 정정 회로, 그 방법 및 상기 회로를 구비하는 반도체메모리 장치
CN110750381B (zh) 基于nand flash存储器的纠错方法及装置
CN103325425B (zh) 存储器控制器
KR102064508B1 (ko) 오류 검출 정정 회로 및 이를 포함하는 메모리 장치
CN110277131B (zh) 基于nand flash存储器的校验方法、终端设备及存储介质
JP3345385B2 (ja) チェンサーチ装置
CN108665940B (zh) Ecc编码电路、解码电路以及存储器控制器
CN111858135B (zh) 数据存储、校验方法、装置、终端设备及存储介质
CN210110352U (zh) 纠正NAND Flash中多比特错误的ECC装置
RU2417409C2 (ru) Отказоустойчивый процессор
CN114124107A (zh) 一种循环冗余校验的计算方法和装置
RU51428U1 (ru) Отказоустойчивый процессор повышенной достоверности функционирования
US7188294B2 (en) High-efficiency error detection and/or correction code
CN101931415A (zh) 编码装置及方法、译码装置及方法和纠错系统
RU2211492C2 (ru) Отказоустойчивое оперативное запоминающее устройство
US11831335B2 (en) Memory system and control method of controlling nonvolatile memory
CN108540138B (zh) 一种csraa编码电路及编码器
US20220179741A1 (en) Programmable error correction code encoding and decoding logic
RU2297034C2 (ru) Отказоустойчивое устройство хранения информации
RU2297030C2 (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