1.一种基于双层raid信息的增强型纠错方法,其特征在于,当闪存颗粒中出现ecc不可纠的错误数据时,采用的纠错方法包括如下步骤:
s1、确定ecc不可纠的数据a的地址,设该数据a在横向raid行中的位置位于x,其中1≤x≤n,对应的数据记为datax,该数据a在纵向raid行中的位置位于y’,其中1≤y’≤m’,对应的数据记为datay’,所述datax和datay’都是数据a,为同一份数据;
s2、分别计算出经过横向raid行恢复和纵向raid行恢复计算得到的值draid和draid’,所述draid和draid’分别是对横向raid行和纵向raid行进行异或操作后得到的值;
s3、对于不可纠的数据a进行重读,得到新的数据datanew,并对datanew进行异或和位与计算得到数据dataanew。
2.根据权利要求1所述的方法,其特征在于,步骤s2中,draid的数据计算包括如下步骤:
根据横向raid行的绑定规则和数据a的地址,计算出同一横向raid行中除了数据a以外的其他所有数据的地址,包括该横向raid行的校验码数据;
根据计算得到的地址,读出相应的数据,并将这些数据经过ecc纠错后的输出数据逐一进行异或操作,得到draid,所述draid的运算式如下:
draid=dxor_h^data1^data2^…^data(x-1)^data(x+1)^…^datan
上式中,dxor_h为横向raid行的校验码数据,所述dxor_h=data1^data2^data3^…^datan,其中n的数量不受限制,^表示按比特位异或。
3.根据权利要求2所述的方法,其特征在于,步骤s2中,draid’的数据计算包括如下步骤:
根据纵向raid行的绑定规则和数据a的地址,计算出同一纵向raid行中除了数据a以外的其他所有数据的地址,包括该纵向raid行的校验码数据;
根据计算得到的地址,读出相应的数据,并将这些数据经过ecc纠错后的输出数据逐一进行异或操作,得到draid’,所述draid’的运算式如下:
draid’=dxor_v^data1’^data2’^…^data(y-1)’^data(y+1)’^…^datam’
上式中,dxor_v为纵向raid行的校验码数据,所述dxor_v=data1’^data2’^data3’^…^datam’,其中m’的数量不受限制,^表示按比特位异或。
4.根据权利要求3所述的方法,其特征在于,步骤s2中,在分别计算draid和draid’之前,将经过ecc纠错后的输出数据,无论是否出现ecc不可纠的情况,都逐一进行异或操作。
5.根据权利要求1所述的方法,其特征在于,步骤s3中,dataanew的计算公式为:
dataanew=datanew^((draid^datanew)&(draid’^datanew))。
6.根据权利要求1-5任一项所述的方法,其特征在于,步骤s3之后还包括步骤s4,所述步骤s4包括:
对经过步骤s3处理得到的一帧新的数据再进行ecc解码。
7.根据权利要求6所述的方法,其特征在于,经过ecc解码后,判断ecc解码是否成功:
若成功,直接返回正确的数据;
否则,返回解码失败的信息。
8.一种深度纠错方法,其特征在于,当权利要求1-7中任一项所述的基于双层raid信息的增强型纠错方法对不可纠的数据a恢复失败时,则执行深度纠错方法,所述深度纠错方法包括如下步骤:
(1)查找datax所在横向raid行的其他所有不可纠数据;
(2)任取一个所在横向raid行的不可纠数据,通过权利要求1-7任一项所述的基于双层raid信息的增强型纠错方法进行恢复,如果可以恢复,则用恢复出的新数据覆盖之前的错误数据;
(3)判断所在横向raid行的不可纠数据是否全部取完:若是,则执行下一步;否则,返回步骤(2)继续取所在横向raid行的不可纠数据;
(4)查找datay’所在纵向raid行的其他所有不可纠数据;
(5)任取一个所在纵向raid行的不可纠数据,通过权利要求1-7任一项所述的基于双层raid信息的增强型纠错方法进行恢复,如果可以恢复,则用恢复出的新数据覆盖之前的错误数据;
(6)判断所在纵向raid行的不可纠数据是否全部取完:若是,则执行下一步;否则,返回步骤(5)继续取所在纵向raid行的不可纠数据;
(7)在更新完所有横向raid行和纵向raid行的数据后,再次执行权利要求1-7中任一项所述的基于双层raid信息的增强型纠错方法。
9.根据权利要求8所述的深度纠错方法,其特征在于,步骤(1)-(3)与步骤(4)-(6)的顺序可以调换。