一种基于LDPC和循环冗余校验码的NANDFLASH差错控制方法与流程

文档序号:16207637发布日期:2018-12-08 07:19阅读:309来源:国知局
一种基于LDPC和循环冗余校验码的NAND FLASH差错控制方法与流程

本发明涉及信息存储技术领域,尤其是涉及一种对nandflash存储器差错控制的方法。

背景技术

在nandflash的实际运用中,随着nandflash读取数据次数、p/e循环次数的增加,以及nandflash放置时间的延长,nandflash中存储数据的错误概率也随之增加。为了保证存储数据的可靠性,通常的方法是采用纠错编码来纠正存储过程中产生的错误。在纠错码领域中最常用的纠错码是低密度奇偶检验码(lowdensityparitycheckcode,ldpc)。传统的纠错过程是把读取的数据直接经过ldpc迭代译码来实现纠错。事实上,在nandflash的实际运用中数据存储产生错误的比例较小,有些flashpage甚至不存在错误。如果读取的存储数据中不存在错误,对没有错误的数据进行译码是没有意义的,即使读取的存储数据存在错误,对错误的数据直接进行ldpc迭代译码,迭代译码的次数会较多,甚至会导致迭代译码失败。所以,将读取的数据直接进行ldpc迭代译码,这样的做法不仅会降低nandflash纠错过程的收敛速度甚至会影响纠错性能。中国专利申请公布号cn103218271a,申请公布日2013年07月24日,名称为“一种数据纠错方法及装置”的发明专利申请文件,公开了一种nandflash中读取的数据进行纠错的方法和装置。方法包括:从存储器中读取被请求的数据及所述被请求数据的n种校验数据;其中,n为大于1的正整数,且n种校验数据能够纠错的数据位数不同;按照n种校验数据的纠错位数由少到多的顺序,依次采用不同种的校验数据对被请求的数据进行纠错,直到采用n种校验数据中的一种校验数据对被请求的数据完成纠错,或直到采用纠错位数最多的校验数据对被请求的数据纠错失败。该方法需要生成n种校验数据,并且这n种校验数据都需要存储在nandflash中,但不是每一种数据都会被使用,这样会造成nandflash存储空间的浪费;除此而外,该方法需要进行多次校验,从而降低了nandflash纠错过程的收敛速度。



技术实现要素:

为了解决现有技术中nandflash纠错过程的收敛速度低,纠错性能差的技术问题,本发明提供一种基于ldpc和循环冗余校验码的nandflash差错控制方法,用于提高nandflash纠错过程的收敛速度和可靠性。

本发明的技术方案是:一种基于ldpc和循环冗余校验码的nandflash差错控制方法:步骤一:对从nandflash读取的crc码字进行一次crc校验判断,区分出有和没有错误的flashpage,没有错误的flashpage直接输出用户数据信息;步骤二:根据错误的flashpage的物理地址,再去存储器中查找相关的比特位置信息,如果找到,根据此信息,从nandflash读取的ldpc码字中找到相应的位置,并对该位置上的值进行取反,得到一个纠正部分错误的码字,进行ldpc迭代译码,如果找不到,把从nandflash读取的ldpc码字直接作为ldpc迭代译码算法的输入数据,进行ldpc迭代译码;步骤三:把译码后的译码序列再进行一次crc校验判断,如果crc值为0,则直接输出用户数据信息,并以该信息为参考,再从nandflash读取的数据信息中找出不同于参考数据的比特位置,并把这些位置信息存储在sram中,更新sram中错误位置信息,如果crc译码结果不为0,则译码失败。

作为优选,步骤一中,将用户信息分别经过crc编码器和ldpc编码器,分别得到crc校验位信息和ldpc校验位信息,用户信息和两个校验信息组成总长度的码字写入nandflash,从nandflash中读取用户信息和crc校验位,组成crc码字,进行crc译码。

作为优选,步骤一中,从nandflash中读取用户信息和ldpc校验位,组成ldpc码字。

作为优选,步骤三中,当crc译码结果不为0时,此时有两种可能性,一种是ldpc迭代译码的过程中已经达到了最大的迭代次数,另一种是这个block损坏。

与现有技术相比,本发明的有益效果是:通过对nandflash中存储的用户数据先进行一次crc检验判断,区分出包含错误的flashpage和不包含错误的flashpage,对于不包含错误的flashpage,将读取的数据直接输出得到用户信息,对于包含错误的flashpage,可以根据flashpage的物理地址到sram存储器中查找相关的错误比特位置存储信息,利用存储的错误比特位置信息先进行一次预纠错,然后在进行ldpc迭代译码,对译码之后的结果又进行一次crc校验判断,判断译码结果是否完全正确,从而提高了nandflash纠错过程的收敛速度和可靠性。

附图说明

附图1为本发明流程图;

附图2为实施过程图;

附图3为flashpage错误比特分布及存储图。

具体实施方式

下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。

实施例1:

如图1和2所示,一种基于ldpc和循环冗余校验码的nandflash差错控制方法,包括以下:步骤一:对从nandflash读取的crc码字进行一次crc校验判断,区分出有和没有错误的flashpage,没有错误的flashpage直接输出用户数据信息。将长度为k的用户信息x{x1,x2,l,xk}分别经过crc编码器和ldpc编码器,得到长度分别为r1和r2的校验位信息。将长度为k的用户信息、长度为r1的crc校验位信息以及长度为r2的ldpc校验位信息组成总长度为n的码字c{c1,c2,l,ck,ck+1,ck+2,l,ck+r1,ck+r1+1,l,cn},其中n=k+r1+r2。将码字c写入nandflash中。其中,长度为k的用户信息存储在nandflash的数据区;长度为r1的crc校验位和长度为r2的ldpc校验位存储在nandflash的冗余区。把长度为r1的crc校验位记作crc-p,长度为r2的ldpc校验位记作ldpc-p。从nandflash中读取长度为k的用户信息和长度为r1的crc校验位,把它们组成crc码字,记作w1{w1,w2,l,wk,wk+1,wk+2,l,wn1},其中n1=k+r1。将码字w1进行crc译码。如果译码结果为0,直接输出用户数据;如果译码结果不为0,那么,执行步骤二。

步骤二:从nandflash中读取长度为k的用户信息和长度为r2的ldpc校验位,把它们组成ldpc码字,记作w2{w1,w2,l,wk,wk+1,wk+2,l,wn2},其中n2=k+r2。根据nandflash中读取的flashpage的物理地址到sram存储器中查找相关的错误比特位置存储信息,如果找到,根据sram存储器中存储的错误比特位置信息,在ldpc码字中找到相应的比特位置,并对这个比特位置上的值进行取反,得到一个纠正部分错误的ldpc码字,记作input1{a1,a2,l,ak,ak+1,ak+2,l,an2},把这个码字input1作为ldpc迭代译码算法的输入数据,进行ldpc迭代译码。如果找不到,把码字w2直接作为ldpc迭代译码算法的输入数据,进行ldpc迭代译码。把译码后的用户信息记作t{t1,t2,l,tk}。

步骤三:把译码后的用户数据t和nandflash中的crc校验位crc-p组成一个crc码字,记作w3{w1,w2,l,wk,wk+1,wk+2,l,wn1}。将码字w3进行crc译码,如果译码结果为0,说明ldpc译码结果正确,那么直接输出用户信息。以输出的用户信息作为参考,再从nandflash读取的数据信息中找出不同于参考数据的比特位置,并把这些位置信息存储在sram中,以完成sram中错误位置信息的更新,供下次译码使用。如果译码结果不为0,则表示译码序列仍存在错误,译码失败。此时有两种可能性,一种可能性是ldpc迭代译码的过程中已经达到了最大的迭代次数,另一种可能性是这个block是坏的,无论是哪一种可能性均会使得存储在nandflash中的数据信息有很高的错误率,所以认为这个block是坏的,把它标记为坏块,不再使用这个block作为存储单元。

下面结合型号为k9f2g08u0anandflash和附图3具体说明:

nandflash的存储单元是由block组成的。block由page组成。数据存储在page上。k9f2g08u0a的总容量是256m。它一共有2048块,每一块有64页,每一页又分为数据区和冗余区。块地址从0~2047,页地址从0~63,可以用第m个block的第n个flashpage来表示读取flashpage的物理地址。并且,nandflash是以page为最小单位进行读写的,以block为最小单位进行擦除的。

步骤一:将长度为k的用户信息x{x1,x2,l,xk}分别经过crc编码器和ldpc编码器,得到长度分别为r1和r2的校验位信息。然后,将长度为k的用户信息、长度为r1的crc校验位信息以及长度为r2的ldpc校验位信息组成总长度为n的码字c{c1,c2,l,ck,ck+1,ck+2,l,ck+r1,ck+r1+1,l,cn},其中n=k+r1+r2。将码字c{c1,c2,l,ck,ck+1,ck+2,l,ck+r1,ck+r1+1,l,cn}写入nandflash的第64个block的第10个flashpage。其中,长度为k的用户信息存储在nandflash的数据区,长度为r1的crc校验位和长度为r2的ldpc校验位存储在nandflash的冗余区,并且把长度为r1的crc校验位记作crc-p,长度为r2的ldpc校验位记作ldpc-p。从nandflash的第64个block的第10个flashpage读取长度为k的用户信息和长度为r1的crc校验位,把它们组成crc码字,记作w1{w1,w2,l,wk,wk+1,wk+2,l,wn1},其中n1=k+r1。将码字w1进行crc译码,这里假设crc的译码结果不为0,那么,执行步骤二。

步骤二:从nandflash中读取长度为k的用户信息和长度为r2的ldpc校验位,把它们组成ldpc码字,记作w2{w1,w2,l,wk,wk+1,wk+2,l,wn2},其中n2=k+r2。根据nandflash中读取的flashpage的物理地址即第64个block的第10个flashpage到sram存储器中查找相应的存储信息。这里假设sram中没有存储该flashpage的错误比特位置信息。把码字w2直接作为ldpc迭代译码算法的输入数据,进行ldpc迭代译码,并把译码后的用户信息记作t{t1,t2,l,tk}。

步骤三:把译码后的用户信息数据t和nandflash中的crc校验位crc-p组成一个crc码字,记作w3{w1,w2,l,wk,wk+1,wk+2,l,wn1},将码字w3进行crc译码。假设crc译码结果为0,此时说明ldpc译码结果正确。那么直接输出用户数据。以输出的用户信息作为参考,再从nandflash读取的数据信息中找出不同于参考数据的比特位置,并把这些位置信息存储在sram存储器中。如图三所示,从nandflash的第64个block的第10个flashpage读取数据时,假设该flashpage的第30、75、180、435、450、525、660、715等位置上的数据发生了错误,这些位置上读取的数据信息分别为0、1、1、1、0、1、0、0,译码后的数据信息分别为1、0、0、0、1、0、1、1,那么把第30、75、180、435、450、525、660、715等位置记录下来存储到sram的数据域中。

当再一次从nandflash的第64个block的第10个flashpage读取数据时,首先进行crc校验,根据nandflash错误位置区域的特点,可以知道此时crc校验结果应该不为0。那么根据nandflash的第64个block的第10个flashpage的物理地址到sram中查找相关的错误比特位置信息,此时位置信息存在。根据存储的错误比特位置信息把对应的错误比特位置上的值进行取反,得到一个纠正了部分错误的序列input1{a1,a2,l,ak,ak+1,ak+2,l,an2},并把取反之后的序列input1进行ldpc迭代译码,得到译码序列t{t1,t2,l,tk}。把译码序列t{t1,t2,l,tk}和nandflash中的crc校验位crc-p组成一个crc码字,再进行一次crc译码,此时crc译码结果为0,直接输出用户信息。并且,把译码后的序列t{t1,t2,l,tk}作为参考,比较译码后的序列t和从nandflash读取的用户数据,记录不同于参考数据的比特位置,并把这些位置信息存储在sram存储器中覆盖之前存在的信息。如果不考虑读写flashpage的极限情况,即每一个flashpage都被写入数据和读取一次数据,并且读取数据的crc校验结果不为0,以及不是每个flashpage都会被再次读取的情况下,那么就不需要考虑每个flashpage的错误比特位置信息都会被保存,所以用sram就足够存储错误比特位置的相关信息。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1