CN103218271B - 一种数据纠错方法及装置 - Google Patents
一种数据纠错方法及装置 Download PDFInfo
- Publication number
- CN103218271B CN103218271B CN201310135916.3A CN201310135916A CN103218271B CN 103218271 B CN103218271 B CN 103218271B CN 201310135916 A CN201310135916 A CN 201310135916A CN 103218271 B CN103218271 B CN 103218271B
- Authority
- CN
- China
- Prior art keywords
- data
- error correction
- checking data
- place
- checking
- 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
Links
Abstract
本发明涉及微电子技术领域,尤其涉及一种数据纠错方法及装置,用以解决现有技术中每次对从NAND Flash中读取的数据进行纠错的效率较低,导致从系统中访问数据速度较慢的问题;本发明实施例提供的一种数据纠错方法,包括:从存储器中读取被请求的数据及所述被请求数据的N种校验数据;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败。
Description
技术领域
本发明涉及微电子技术领域,尤其涉及一种数据纠错方法及装置。
背景技术
固态硬盘(Solid State Disk,SSD)是用固态电子存储芯片阵列而制成的硬盘,由于它的存储介质为与非闪存(NAND Flash),因此具有低功耗、无噪声、抗震动、存储密度大、传输速度快等优点。
由于NAND Flash的材料和工艺的特点,在NAND Flash的读写使用和存放过程中很容易产生坏块,因此通常使用错误检查和纠正(Error CorrectingCode,ECC)技术来保证数据存取的完整性。ECC是在NAND Flash的每一个页面上用额外的存储空间来保存校验数据;如图1所示,为ECC纠错示意图;当写入数据的时候进行数据编码,即根据原始数据计算出具有固定长度的校验数据,并将校验数据存放在NAND Flash的冗余位中,当读取数据的时候进行数据解码,即通过校验数据对读取的数据进行纠错,若当前数据出错位(bit)数在校验数据的纠错能力内,则可以将数据校正过来,若当前数据出错位数不在校验数据的纠错能力内,则无法完成校正。ECC能校正多少位数据与校验数据位数有关,一般来说,能校正的数据越多,需要的校验数据位数也就越多,通过校正数据,可以弥补NAND Flash的硬件缺陷,延长NAND Flash的使用寿命。
然而,为了减少输出数据的出错率,SSD对ECC纠错能力的要求越来越高,因此,ECC的校验数据的纠错位数在不断增加,通常每次均使用超长纠错位数的校验数据对从NAND Flash中读取的数据进行纠错,由于每次都使用超长纠错位数的校验数据对读取的数据进行纠错,而使用超长纠错位数的校验数据对读取的数据进行纠错的复杂度较高,因此会影响数据的纠错效率,进而影响访问数据的速度。
发明内容
本发明实施例提供一种数据纠错方法及装置,用以解决现有技术中从NAND Flash中读取的数据进行纠错的效率较低,导致访问数据速度慢的问题。
第一方面,提供一种数据纠错方法,包括:
从存储器中读取被请求的数据及所述被请求数据的N种校验数据;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;
按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败。
结合第一方面,在第一种可能的实现方式中,所述N种校验数据由以下步骤生成:
根据待写入所述存储器中的原始数据,生成纠错位数最多的校验数据;其中,所述待写入的原始数据为所述被请求的数据对应的被写入所述存储器之前的数据;
针对任意一种非纠错位数最多的校验数据,根据所述待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成所述非纠错位数最多的校验数据;其中,所述其它纠错位数的校验数据比所述非纠错位数最多的校验数据能够纠错的数据位数多。
结合第一方面,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,N=2。
结合第一方面,或第一方面的第一或第二种可能的实现方式,在第三种可能的实现方式中,所述按照所述N种校验数据的纠错位数由少到多的顺序,依次对所述被请求的数据进行纠错之前,还包括:
分别确定采用所述N种校验数据进行纠错时需占用的存储器带宽;
则所述按照所述N种校验数据的纠错位数由少到多的顺序,依次对所述被请求的数据进行纠错,具体包括:
针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定的存储器带宽进行纠错;其中,所述确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
结合第一方面,或第一方面的第一至三种可能的实现方式,在第四种可能的实现方式中,所述存储器为与非闪存NAND Flash。
第二方面,提供一种数据纠错装置,包括:
读取模块,用于从存储器中读取被请求的数据及所述被请求数据的N种校验数据,并将读取的所述被请求的数据和N种校验数据传输至纠错模块;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;
纠错模块,用于接收所述读取模块读取的所述被请求的数据和N种校验数据,按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败。
结合第一方面,在第一种可能的实现方式中,所述装置还包括:
生成模块,用于根据待写入所述存储器中的原始数据,生成纠错位数最多的校验数据,并针对任意一种非纠错位数最多的校验数据,根据所述待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成所述非纠错位数最多的校验数据;其中,所述待写入的原始数据为所述被请求的数据对应的被写入所述存储器之前的数据,所述其它纠错位数的校验数据比所述非纠错位数最多的校验数据能够纠错的数据位数多。
结合第一方面,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,N=2。
结合第一方面,或第一方面的第一或第二种可能的实现方式,在第三种可能的实现方式中,所述装置还包括:
确定模块,用于在所述纠错模块进行纠错之前,分别确定采用所述N种校验数据进行纠错时需占用的存储器带宽,并将确定的存储器带宽传输至纠错模块;
所述纠错模块具体用于:针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定模块确定的存储器带宽进行纠错;其中,所述确定模块确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
结合第一方面,或第一方面的第一至三种可能的实现方式,在第四种可能的实现方式中,所述存储器为与非闪存NAND Flash。
第三方面,提供一种存储设备,包括:
控制器,用于从存储器中读取被请求的数据及所述被请求数据的N种校验数据,按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;
所述存储器,用于存储所述被请求的数据及所述被请求数据的N种校验数据。
结合第一方面,在第一种可能的实现方式中,所述控制器还用于:
根据待写入所述存储器中的原始数据,生成纠错位数最多的校验数据,针对任意一种非纠错位数最多的校验数据,根据所述待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成所述非纠错位数最多的校验数据;其中,所述待写入的原始数据为所述被请求的数据对应的被写入所述存储器之前的数据,所述其它纠错位数的校验数据比所述非纠错位数最多的校验数据能够纠错的数据位数多。
结合第一方面,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,N=2。
结合第一方面,或第一方面的第一或第二种可能的实现方式,在第三种可能的实现方式中,所述存储器为与非闪存NAND Flash。
结合第一方面,或第一方面的第一至三种可能的实现方式,在第四种可能的实现方式中,所述存储设备为固态硬盘SSD。
根据第一方面提供的数据纠错方法,第二方面提供的数据纠错装置,及第三方面提供的存储设备,采用本发明实施例,对每次读取的被请求数据,可以首先采用纠错位数较少的校验数据进行纠错,若采用纠错位数较少的校验数据完成了纠错,则结束纠错,就不必采用纠错位数较多的校验数据进行纠错,在采用纠错位数较少的校验数据纠错失败后,再采用纠错位数较多的校验数据进行纠错,本发明实施例由于设置了不同纠错位数的校验数据,不必每次都采用超长纠错位数的校验数据进行纠错,对每次读取的数据完成纠错所采用的校验数据是所有能对该次读取的数据完成纠错的校验数据中纠错位数最少的,从而可以在保证输出数据的准确率的前提下,提高从访问数据的速度。
附图说明
图1为背景技术中ECC纠错示意图;
图2为本发明实施例提供的进行数据纠错的方法流程图;
图3为本发明实施方式一提供的进行数据纠错的方法流程图;
图4为本发明实施方式二提供的进行数据纠错的方法流程图;
图5为本发明实施方式三提供的进行数据纠错的方法流程图;
图6为本发明实施例对NAND Flash进行数据纠错的示意图;
图7为本发明实施例校验数据生成和应用示意图;
图8为本发明实施例提供的进行数据纠错的装置结构图;
图9为本发明实施例提供的一种存储设备示意图。
具体实施方式
本发明实施例中从存储器中读取被请求的数据及所述被请求数据的N种校验数据;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败。采用本发明实施例,对每次读取的被请求数据,可以首先采用纠错位数较少的校验数据进行纠错,若采用纠错位数较少的校验数据完成了纠错,则结束纠错,就不必采用纠错位数较多的校验数据进行纠错,在采用纠错位数较少的校验数据纠错失败后,再采用纠错位数较多的校验数据进行纠错,本发明实施例由于设置了不同纠错位数的校验数据,不必每次都采用超长纠错位数的校验数据进行纠错,对每次读取的数据完成纠错所采用的校验数据是所有能对该次读取的数据完成纠错的校验数据中纠错位数最少的,从而可以在保证输出数据的准确率的前提下,提高从系统中访问数据的平均速度。
下面结合说明书附图对本发明实施例作进一步详细描述。
如图2所示,为本发明实施例提供的进行数据纠错的方法流程图,包括以下步骤:
S201:从存储器中读取被请求的数据及被请求数据的N种校验数据;其中,N为大于1的正整数,且该N种校验数据能够纠错的数据位数不同;
S202:按照N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对被请求的数据进行纠错,直到采用N种校验数据中的一种校验数据对被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对被请求的数据纠错失败。
本发明实施例中的存储器可以是NAND Flash等任何可实现存储功能的存储介质;本发明实施例的执行主体可以为对存储器的数据读写具有控制作用的控制器,控制器和存储器为SSD等存储设备的主要组成部分;
在具体实施过程中,当接收到数据读取请求时,从存储器中读取被请求的数据及被请求数据的不同种校验数据,其中,不同种校验数据能够纠错的数据位数(bit),即纠错位数不同,若采用一种ECC纠错算法生成不同纠错位数的校验数据,则纠错位数越多的校验数据的位数也就越多。由于读取的被请求数据出现错误,不再是原始数据,可以首先采用纠错位数最少的校验数据进行纠错,若出错位数在该纠错位数最少的校验数据的纠错能力范围内,则可以采用该纠错位数最少的校验数据成功完成纠错;若读取的数据的出错位数超出了该纠错位数最少的校验数据的纠错能力,则采用纠错位数多的校验数据重新对读取的数据进行纠错,如此重复下去,直到完成纠错,或直到采用纠错位数最多的校验数据纠错失败。
在具体实施过程中,可以根据实际情况,如厂商对输出数据准确率的要求、对存储设备使用寿命的要求、对平均访问速度的要求等来设计校验数据的级别和不同级别的校验数据位数,这里,校验数据级别越高,能够纠错的数据位数就越多;假如厂商对输出数据准确率、存储设备使用寿命等要求较高,可以设计使最高级别的校验数据纠错位数较多,以使得存储设备在使用后期出错情况较多时,仍可以正确输出数据;假如厂商对系统的平均访问速度要求较高,由于NAND Flash等存储器在使用前期出错位数较少,在使用后期出错位数较多的情况也是概率性的,因此可以设计使最低级别的校验数据纠错位数较少且符合大多数情况下对校验数据纠错位数的要求,这样,可以使存储器的数据读取表现出很高的平均性能。在相同的纠错资源,即逻辑门电路资源规模下,采用本发明实施例可以在保证输出数据准确率的前提下,提高系统的平均访问速度。
较佳地,步骤S201中,N种校验数据由以下步骤生成:
根据待写入存储器中的原始数据,生成纠错位数最多的校验数据;其中,待写入的原始数据为被请求的数据对应的被写入存储器之前的数据;
针对任意一种非纠错位数最多的校验数据,根据待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成非纠错位数最多的校验数据;这里的其它纠错位数的校验数据比该非纠错位数最多的校验数据能够纠错的数据位数多。
在具体实施过程中,可以直接根据原始数据生成纠错位数不同的校验数据;也可以在根据原始数据生成纠错位数最多的校验数据后,针对一个非纠错位数最多的校验数据,根据原始数据和至少一个纠错位数比该非纠错位数最多的校验数据纠错位数多的校验数据生成该非纠错位数最多的校验数据,具体地,可以根据原始数据和所有比该非纠错位数最多的校验数据纠错位数多的校验数据生成该非纠错位数最多的校验数据,比如,一共有三个级别的校验数据,按纠错位数由少到多,依次为一级、二级、三级校验数据,在根据原始数据生成三级校验数据后,根据原始数据和三级校验数据生成二级校验数据,再根据原始数据、三级校验数据和二级校验数据生成一级校验数据,采用这种较佳的实施方式,低级别的校验数据除了可以对原始数据进行纠错外,还可以纠正高级别的校验数据的反转比特位。
在具体实施过程中,可以采用任意一种或多种ECC纠错算法生成不同纠错位数的校验数据,如Simple Hamming纠错算法、Reed-Solomon纠错算法、BCH(Bose、Ray-Chaudhuri、Hocquenghem)纠错算法等等。
较佳地,步骤S202之前,还包括:
确定从存储器中读取的被请求数据存在错误。
在具体实施过程中,由于从存储器中读取的被请求数据不一定存在错误,因此可以在从存储器中读取数据后,先检测该读取的被请求数据是否存在错误,在确定从该存储器中读取的被请求数据存在错误后,再采用本发明实施例进行数据纠错,由于检测过程为现有技术,本发明实施例不再作进一步解释;采用该实施方式,可以避免在从存储器中读取的被请求数据不存在错误的情况下,就进入数据纠错过程,进一步提高系统的平均访问速度。
较佳地,N=2。
在具体实施过程中,可以仅采用两种不同纠错位数的校验数据,其中,纠错位数较少的校验数据用于完成绝大多数情况下数据的纠错,而纠错位数较多的校验数据作为备用,在偶尔数据出错位数较多时使用。由于在绝大多数情况下,尤其是存储设备使用前期,数据的出错位数都较少,因此,在绝大多数情况下采用纠错位数较少的校验数据进行纠错可以使设备对外表现出较高的读取性能,在偶尔数据出错位数较多时,在采用纠错位数较少的校验数据纠错失败后还可以采用纠错位数较多的校验数据进行纠错,保证了输出数据的准确性。
较佳地,步骤S202之前,还包括:
按照N种校验数据的纠错位数由少到多的顺序,依次对被请求的数据进行纠错之前,还包括:
分别确定采用N种校验数据进行纠错时需占用的存储器带宽;
则按照N种校验数据的纠错位数由少到多的顺序,依次对被请求的数据进行纠错,具体包括:
针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定的存储器带宽进行纠错;其中,确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
在具体实施过程中,可以设置在采用不同纠错位数的校验数据进行纠错时占用相同的存储器带宽,较佳地,为提高数据读取速度,使大多数情况下表现出很高的数据读取性能,可以设置采用纠错位数较少的校验数据进行纠错时占用的存储器带宽较大,比如,对于存储介质为NAND Flash的SSD,现有技术中为提高SSD输出数据的准确率,采用纠错位数为32bit的校验数据、占用1G的存储器带宽进行纠错,而根据本发明实施例提供的实施方式,可以设计纠错位数分别为8bit、32bit两种纠错位数的校验数据,设计在采用纠错位数为8bit的校验数据进行纠错时占用1G的存储器带宽,采用纠错位数为32bit的校验数据进行纠错时占用200M的存储器带宽,由于在一般厂商规定的SSD使用期限内,纠错位数为8bit的校验数据可以完成绝大多数的纠错情况,因此,采用本发明实施例,不仅减少了纠错时使用的逻辑门电路资源,还提高了数据读取速度。
较佳地,步骤S202中,采用校验数据对所述读取的数据进行纠错后,包括:
若采用纠错位数最多的校验数据对被请求数据纠错失败,则将纠错失败的信息通知给数据请求方。
在具体实施过程中,若采用所有的校验数据都无法完成纠错,则可以将纠错失败的信息通知给数据请求方,以便用户采取进一步的措施,这里的数据请求方指的是请求数据的设备。
较佳地,步骤S202中,采用校验数据对读取的被请求数据进行纠错后,包括:
若对读取的被请求数据完成纠错,则将纠错后的数据存入数据缓存,从该数据缓存中读取纠错后的数据传输给数据请求方。
在具体实施过程中,可以在将原始数据写入存储器之前,首先将原始数据存入数据缓存中,从数据缓存中读取数据生成不同纠错位数的校验数据,并将原始数据和校验数据一起写入存储器中,当数据请求方请求数据时,从存储器中读取数据和对应的校验数据,并对读取的数据进行检测,在检测到数据存在错误后,采用对应的校验数据进行纠错,并将纠错后的数据存入数据缓存,然后从该数据缓存中读取数据通过接口传输给数据请求方;
这里的数据缓存为存储设备内部的高速存储器,可以用来将一些数据暂时性地保存起来以供读取和再读取,采用数据缓存可以大大提高数据再读取的速度,提高存储设备的性能。
为了详细地描述本发明实施例进行数据纠错的方法,下面列举几种比较具体的实施方式进行介绍。
如图3所示,为本发明实施方式一提供的进行数据纠错的方法流程图,包括:
S301:根据待写入存储器中的原始数据,生成N种校验数据,并将原始数据和N种校验数据写入存储器中;其中,N为大于1的正整数,且该N种校验数据能够纠错的数据位数不同;
在具体实施过程中,N种校验数据可以由以下步骤生成:
根据待写入存储器中的原始数据,生成纠错位数最多的校验数据;针对任意一种非纠错位数最多的校验数据,根据待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成非纠错位数最多的校验数据;这里的其它纠错位数的校验数据比该非纠错位数最多的校验数据能够纠错的数据位数多;
在具体实施过程中,可以在根据原始数据生成纠错位数最多的校验数据后,针对一个非纠错位数最多的校验数据,根据原始数据和所有比该非纠错位数最多的校验数据纠错位数多的校验数据生成该非纠错位数最多的校验数据,比如,一共有三个级别的校验数据,按纠错位数由少到多,依次为一级、二级、三级校验数据,在根据原始数据生成三级校验数据后,根据原始数据和三级校验数据生成二级校验数据,再根据原始数据、三级校验数据和二级校验数据生成一级校验数据,采用这种较佳的实施方式,低级别的校验数据除了可以对原始数据进行纠错外,还可以纠正高级别的校验数据的反转比特位;在具体实施过程中,可以采用任意一种或多种ECC纠错算法生成不同纠错位数的校验数据,如Simple Hamming纠错算法、Reed-Solomon纠错算法、BCH(Bose、Ray-Chaudhuri、Hocquenghem)纠错算法等等。
S302:当数据请求方请求读取数据时,从存储器中读取被请求数据及该被请求数据的N种校验数据;其中,被请求数据为步骤S301中的原始数据或该原始数据出错后的数据;
S303:判断读取的被请求数据是否存在错误,若确定读取的被请求数据存在错误,则进入步骤S304,否则,进入步骤S305;
S304:按照N种校验数据纠错位数由少到多的顺序,依次采用不同种的校验数据对被请求的数据进行纠错,并判断是否完成纠错,若采用其中一种纠错位数的校验数据对读取的被请求数据完成纠错,则进入步骤S305,否则进入步骤S306;
S305:将数据传输给数据请求方;
这里,传输给数据请求方的数据为没有出现错误的数据或纠错成功后的数据。
S306:通知数据请求方数据纠错失败。
下面以存储介质为NAND Flash的SSD为例,详细说明本发明实施例进行数据纠错的方法步骤;本实施方式的执行主体可以为SSD控制器;
如图4所示,为本发明实施方式二提供的进行数据纠错的方法流程图,包括:
S401:针对待写入SSD中的原始数据,将该原始数据存入SSD中的数据缓存,然后从数据缓存中读取原始数据,根据读取的原始数据生成不同纠错位数的校验数据,并将原始数据和不同纠错位数的校验数据写入NAND Flash中;
S402:在数据请求方请求读取SSD中的数据后,从NAND Flash中读取被请求的数据,并检测读取的数据是否正确,若正确,则进入步骤S404,否则,进入步骤S403;
S403:按照校验数据纠错位数由少到多的顺序,对读取的数据进行纠错,并判断是否完成纠错,若采用其中一种纠错位数的校验数据对读取的数据完成纠错,则进入步骤S404,否则进入步骤S405;
S404:将不存在错误的数据或纠错后的数据存入数据缓存中,从该数据缓存中读取数据传输给数据请求方;
S405:通知数据请求方数据纠错失败。
下面以采用两种纠错位数的校验数据,分别为纠错位数较多的强校验数据和纠错位数较少的弱校验数据为例,对本发明实施例进行数据纠错的方法作进一步说明;
如图5所示,为本发明实施方式三提供的进行数据纠错的方法流程图,包括:
S501:针对待写入SSD中的原始数据,将该原始数据存入SSD中的数据缓存,然后从数据缓存中读取原始数据,根据读取的原始数据生成第一校验数据,再根据原始数据和生成的第一校验数据生成第二校验数据,并将原始数据、第一校验数据和第二校验数据写入NAND Flash中;其中,第一校验数据能够纠错的数据位数大于第二校验数据能够纠错的数据位数。
S502:在数据请求方请求获取SSD中的数据后,从NAND Flash中读取被请求的数据,并检测读取的数据是否正确,若正确,则进入步骤S505,否则,进入步骤S503;
S503:采用第二校验数据对读取的数据进行纠错,并判断是否完成纠错,若完成纠错则进入步骤S505,否则,进入步骤S504;
S504:采用第一校验数据对读取的数据进行纠错,并判断是否完成纠错,若完成纠错则进入步骤S505,否则,进入步骤S506;
S505:将不存在错误的数据或纠错后的数据存入数据缓存中,从该数据缓存中读取对应的数据传输给数据请求方;
S506:通知数据请求方数据纠错失败。
如图6所示,为本发明实施例对NAND Flash进行数据纠错的示意图;
图中示意的SSD由SSD控制器、NAND Flash和数据缓存组成,其中,SSD控制器为本发明实施例进行数据纠错的执行主体,即,SSD控制器将数据写入数据缓存中,并从数据缓存中读取数据,采用第一编码,根据读取的原始数据生成第一校验数据,再采用第二编码,根据原始数据和采用第一编码得到的第一校验数据生成第二校验数据,最后将原始数据、第一校验数据和第二校验数据一起写入NAND Flash中;其中,第一校验数据能够纠错的数据位数大于第二校验数据能够纠错的数据位数。在从NAND Flash中读取数据后,若检测到读取的数据存在错误,则采用第二校验数据对读取的数据进行第二纠错,若完成纠错,则将纠错后的数据存入数据缓存中,否则,采用第一校验数据对读取的数据进行第一纠错,在完成纠错后将纠错后的数据存入数据缓存中,否则通知数据请求方数据纠错失败。
如图7所示,为本发明实施例校验数据生成和应用示意图;图中,第一校验数据1010111010010011为根据原始数据1010111010010011生成的,第二校验数据1101为根据原始数据和第一校验数据生成的;其中,其中,第一校验数据能够纠错的数据位数大于第二校验数据能够纠错的数据位数。因此,该第二校验数据可以纠正第一校验数据的反转比特位。
基于同一发明构思,本发明实施例中还提供了一种与数据纠错方法对应的数据纠错装置和一种存储设备,由于该装置和存储设备解决问题的原理与本发明实施例进行数据纠错的方法相似,因此该装置和存储设备的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,为本发明实施例提供的进行数据纠错的装置结构图,包括:
读取模块81,用于从存储器中读取被请求的数据及被请求数据的N种校验数据,并将读取的被请求的数据和N种校验数据传输至纠错模块82;其中,N为大于1的正整数,且N种校验数据能够纠错的数据位数不同;
纠错模块82,用于接收读取模块81读取的被请求的数据和N种校验数据,按照N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对被请求的数据进行纠错,直到采用N种校验数据中的一种校验数据对被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对被请求的数据纠错失败。
较佳地,该装置还包括:
生成模块83,用于根据待写入存储器中的原始数据,生成纠错位数最多的校验数据,并针对任意一种非纠错位数最多的校验数据,根据待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成该非纠错位数最多的校验数据;其中,待写入的原始数据为被请求的数据对应的被写入存储器之前的数据,其它纠错位数的校验数据比该非纠错位数最多的校验数据能够纠错的数据位数多。
较佳地,纠错模块82具体用于在确定从存储器中读取的被请求数据存在错误后,采用不同纠错位数的校验数据进行纠错。
较佳地,N=2。
较佳地,该装置还包括:
确定模块84,用于在纠错模块82进行纠错之前,分别确定采用N种校验数据进行纠错时需占用的存储器带宽,并将确定的存储器带宽传输至纠错模块82;
纠错模块82具体用于:针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定模块84确定的存储器带宽进行纠错;其中,确定模块84确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
较佳地,所述存储器为NAND Flash。
较佳地,该装置还包括:
通知模块85,用于若纠错模块82采用纠错位数最多的校验数据对本次读取的数据纠错失败,则将纠错失败的信息通知给数据请求方。
较佳地,该装置还包括:
传输模块86,用于在纠错模块82对读取的被请求数据完成纠错后,将纠错后的数据存入数据缓存,从该数据缓存中读取纠错后的数据传输给数据请求方。
如图9所示,为本发明实施例提供的一种存储设备示意图,包括:
控制器91,从存储器92中读取被请求的数据及被请求数据的N种校验数据,按照N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对被请求的数据进行纠错,直到采用N种校验数据中的一种校验数据对被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对被请求的数据纠错失败;其中,N为大于1的正整数,且N种校验数据能够纠错的数据位数不同;
存储器92,用于存储被请求的数据及被请求数据的N种校验数据
较佳地,控制器91还用于:
根据待写入存储器中的原始数据,生成纠错位数最多的校验数据,针对任意一种非纠错位数最多的校验数据,根据待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成该非纠错位数最多的校验数据;其中,待写入的原始数据为被请求的数据对应的被写入存储器之前的数据,至少一种其它纠错位数的校验数据比该非纠错位数最多的校验数据能够纠错的数据位数多。
较佳地,N=2。
较佳地,存储器92为NAND Flash。
较佳地,存储设备为SSD。
较佳地,控制器91还用于,在采用N种校验数据进行纠错之前,分别确定采用N种校验数据进行纠错时需占用的存储器带宽;针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定的存储器带宽进行纠错;其中,确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
较佳地,控制器91具体用于在确定从存储器92中读取的被请求数据存在错误后,采用不同纠错位数的校验数据对读取的被请求数据进行纠错。
较佳地,控制器91还用于若采用纠错位数最多的校验数据对读取的被请求数据纠错失败,则将纠错失败的信息通知给数据请求方。
较佳地,该存储设备还包括:
数据缓存93,用于对控制器91写入该存储设备中的原始数据和需要输出的数据进行缓存,以使控制器91从数据缓存93中读取原始数据生成不同纠错位数的校验数据,和将纠错后的数据存入数据缓存93中,从该数据缓存93中读取数据传输给数据请求方。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种数据纠错方法,其特征在于,所述方法包括:
从存储器中读取被请求的数据及所述被请求数据的N种校验数据;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;
按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败;
所述N种校验数据由以下步骤生成:
根据待写入所述存储器中的原始数据,生成纠错位数最多的校验数据;其中,所述待写入的原始数据为所述被请求的数据对应的被写入所述存储器之前的数据;
针对任意一种非纠错位数最多的校验数据,根据所述待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成所述非纠错位数最多的校验数据;其中,所述其它纠错位数的校验数据比所述非纠错位数最多的校验数据能够纠错的数据位数多。
2.如权利要求1所述的方法,其特征在于,N=2。
3.如权利要求1所述的方法,其特征在于,所述按照所述N种校验数据的纠错位数由少到多的顺序,依次对所述被请求的数据进行纠错之前,还包括:
分别确定采用所述N种校验数据进行纠错时需占用的存储器带宽;
则所述按照所述N种校验数据的纠错位数由少到多的顺序,依次对所述被请求的数据进行纠错,具体包括:
针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定的存储器带宽进行纠错;其中,所述确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
4.如权利要求1所述的方法,其特征在于,所述存储器为与非闪存NANDFlash。
5.一种数据纠错装置,其特征在于,所述装置包括:
读取模块,用于从存储器中读取被请求的数据及所述被请求数据的N种校验数据,并将读取的所述被请求的数据和N种校验数据传输至纠错模块;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;
纠错模块,用于接收所述读取模块读取的所述被请求的数据和N种校验数据,按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败;
生成模块,用于根据待写入所述存储器中的原始数据,生成纠错位数最多的校验数据,并针对任意一种非纠错位数最多的校验数据,根据所述待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成所述非纠错位数最多的校验数据;其中,所述待写入的原始数据为所述被请求的数据对应的被写入所述存储器之前的数据,所述其它纠错位数的校验数据比所述非纠错位数最多的校验数据能够纠错的数据位数多。
6.如权利要求5所述的装置,其特征在于,N=2。
7.如权利要求5所述的装置,其特征在于,所述装置还包括:
确定模块,用于在所述纠错模块进行纠错之前,分别确定采用所述N种校验数据进行纠错时需占用的存储器带宽,并将确定的存储器带宽传输至纠错模块;
所述纠错模块具体用于:针对一种纠错位数的校验数据,在采用该校验数据进行纠错时,占用确定模块确定的存储器带宽进行纠错;其中,所述确定模块确定的存储器带宽为确定的采用该校验数据进行纠错时需占用的存储器带宽,且针对任意两种纠错位数的校验数据,采用纠错位数少的校验数据进行纠错时占用的存储器带宽大于采用纠错位数多的校验数据进行纠错时占用的存储器带宽。
8.如权利要求5所述的装置,其特征在于,所述存储器为与非闪存NANDFlash。
9.一种存储设备,其特征在于,所述存储设备包括:
控制器,用于从存储器中读取被请求的数据及所述被请求数据的N种校验数据,按照所述N种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对所述被请求的数据进行纠错,直到采用所述N种校验数据中的一种校验数据对所述被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对所述被请求的数据纠错失败;其中,N为大于1的正整数,且所述N种校验数据能够纠错的数据位数不同;
所述存储器,用于存储所述被请求的数据及所述被请求数据的N种校验数据;
所述控制器还用于:
根据待写入所述存储器中的原始数据,生成纠错位数最多的校验数据,针对任意一种非纠错位数最多的校验数据,根据所述待写入存储器中的原始数据和至少一种其它纠错位数的校验数据生成所述非纠错位数最多的校验数据;其中,所述待写入的原始数据为所述被请求的数据对应的被写入所述存储器之前的数据,所述其它纠错位数的校验数据比所述非纠错位数最多的校验数据能够纠错的数据位数多。
10.如权利要求9所述的存储设备,其特征在于,N=2。
11.如权利要求9所述的存储设备,其特征在于,所述存储器为与非闪存NAND Flash。
12.如权利要求9~11任一所述的存储设备,其特征在于,所述存储设备为固态硬盘SSD。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310135916.3A CN103218271B (zh) | 2013-04-18 | 2013-04-18 | 一种数据纠错方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310135916.3A CN103218271B (zh) | 2013-04-18 | 2013-04-18 | 一种数据纠错方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103218271A CN103218271A (zh) | 2013-07-24 |
CN103218271B true CN103218271B (zh) | 2015-09-09 |
Family
ID=48816092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310135916.3A Active CN103218271B (zh) | 2013-04-18 | 2013-04-18 | 一种数据纠错方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103218271B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893167A (zh) * | 2016-03-28 | 2016-08-24 | 联想(北京)有限公司 | 一种信息处理方法及装置、电子设备 |
CN106209116A (zh) * | 2016-06-29 | 2016-12-07 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
WO2020010604A1 (zh) * | 2018-07-13 | 2020-01-16 | 华为技术有限公司 | 一种ssd数据读取方法和装置 |
CN111352754B (zh) * | 2018-12-21 | 2023-09-15 | 中国石油天然气集团有限公司 | 一种数据存储检错纠错方法及数据存储装置 |
CN110459259A (zh) * | 2019-07-31 | 2019-11-15 | 至誉科技(武汉)有限公司 | 存储设备写错误纠错能力的测试方法、系统及存储介质 |
CN110444247A (zh) * | 2019-07-31 | 2019-11-12 | 至誉科技(武汉)有限公司 | 存储设备写错误纠错能力的测试装置 |
CN116932424B (zh) * | 2023-09-14 | 2023-12-15 | 上海芯联芯智能科技有限公司 | 一种基于ecc检测的缓存访问方法、装置、介质和设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281788A (zh) * | 2007-04-06 | 2008-10-08 | 群联电子股份有限公司 | 闪存系统及其控制方法 |
CN101587744A (zh) * | 2009-06-19 | 2009-11-25 | 上海微小卫星工程中心 | 一种大规模flash存储阵列的多层次数据冗余方法 |
CN102063342A (zh) * | 2010-12-28 | 2011-05-18 | 深圳市江波龙电子有限公司 | 一种闪存存储设备数据的管理方法及系统 |
CN102969028A (zh) * | 2012-10-18 | 2013-03-13 | 记忆科技(深圳)有限公司 | 一种ecc动态调整方法、系统及闪存 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961890B2 (en) * | 2001-08-16 | 2005-11-01 | Hewlett-Packard Development Company, L.P. | Dynamic variable-length error correction code |
-
2013
- 2013-04-18 CN CN201310135916.3A patent/CN103218271B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281788A (zh) * | 2007-04-06 | 2008-10-08 | 群联电子股份有限公司 | 闪存系统及其控制方法 |
CN101587744A (zh) * | 2009-06-19 | 2009-11-25 | 上海微小卫星工程中心 | 一种大规模flash存储阵列的多层次数据冗余方法 |
CN102063342A (zh) * | 2010-12-28 | 2011-05-18 | 深圳市江波龙电子有限公司 | 一种闪存存储设备数据的管理方法及系统 |
CN102969028A (zh) * | 2012-10-18 | 2013-03-13 | 记忆科技(深圳)有限公司 | 一种ecc动态调整方法、系统及闪存 |
Also Published As
Publication number | Publication date |
---|---|
CN103218271A (zh) | 2013-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103218271B (zh) | 一种数据纠错方法及装置 | |
US10459793B2 (en) | Data reliability information in a non-volatile memory device | |
US8185706B2 (en) | Copyback optimization for memory system | |
US9513992B2 (en) | Method and apparatus to perform concurrent read and write memory operations | |
US9875035B2 (en) | Memory system having a read and copy-back operation and method for the same | |
CN107807792A (zh) | 一种基于副本存储系统的数据处理方法及相关装置 | |
US20130318418A1 (en) | Adaptive error correction for phase change memory | |
US20130339820A1 (en) | Three dimensional (3d) memory device sparing | |
US8566672B2 (en) | Selective checkbit modification for error correction | |
US20140082264A1 (en) | Nand flash storage chip checking method and device | |
JP5720210B2 (ja) | アクセス制御装置、誤り訂正制御方法およびストレージ装置 | |
US20120079346A1 (en) | Simulated error causing apparatus | |
US20130304970A1 (en) | Systems and methods for providing high performance redundant array of independent disks in a solid-state device | |
TW201447902A (zh) | 具有錯誤校正邏輯之記憶體裝置 | |
US11355213B2 (en) | Apparatus and method for verifying reliability of data read from memory device through clock modulation, and memory system including the same | |
US11030040B2 (en) | Memory device detecting an error in write data during a write operation, memory system including the same, and operating method of memory system | |
US9754682B2 (en) | Implementing enhanced performance with read before write to phase change memory | |
US20230236934A1 (en) | Instant write scheme with dram submodules | |
CN101634938A (zh) | 固态硬盘的数据迁移方法、数据迁移装置及固态硬盘 | |
US9037948B2 (en) | Error correction for memory systems | |
US11537510B2 (en) | Storage devices having minimum write sizes of data | |
US10025652B2 (en) | Error location pointers for non volatile memory | |
CN105788647A (zh) | 一种非易失存储器的纠错方法和装置 | |
CN105575439B (zh) | 一种存储单元失效纠错的方法及存储器 | |
KR20130105972A (ko) | 라이트 데이터의 에러 검출 방법 및 상기 방법을 수행할 수 있는 데이터 처리 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |