裸奔程序7(三)-NAND芯片的读写及ECC检验软硬件实现

本文详细介绍了NAND芯片的ECC校验算法,包括行检验码的生成过程,如何通过字节位置判断行检验码变化,以及ECC校验错误位置的确定方法。内容涵盖算法原理、优化和S3C2440硬件ECC检验的编程实现。
摘要由CSDN通过智能技术生成

行检验码的生成过程:
根据异或规则,当一个数的ECC码第bit6位(En=1)时,将改变11位行检验码,显然,问题的关键是如何判断这11位行检验码。
当我们用i来表示字节在2048个字节中的位置时,由于2^11=2048,即i只取11位。

考虑如下:
   2048个字节中第i个字节,其值ECC码第6位为1
再让我们考虑一下行检验码的生成规则
将其进行2平分后异或
P8912_1=E1024+E1025+……+E2047(显然,i[10]=1)
P8912_0=E0  +  E1……   +E1023(显然,i[10]=0)
从以上规则可知:当i[10]=1时,即i在1024~2047之间,将改变p8912_1的值
                当i[10]=0时,即i在0~1024   之间,将改变p8192_0的值
将其进行4平分后交差取值异或
P4196_1=E512+…+E1023+E1536+…+E2047
P4196_0= E0+…+ E511+E1024+…+E1535
显然,对512~1023而言,i[10,9]=01 1536~2047而言 i[10,9]=11
      对0~511   而言, i[10,9]=00 1024~1535而言i[10,9]=10
从以上分析可以得知:我们只管i[9]而不用管i[10](用以判断P8192_0/1的值)
     当i[9]=1时,即i在512~1023、1536~2047之间,将改变p4196_1的值
     当i[9]=0时,即i在0~511、   1024~1535之间,将改变p4196_0的值

同理,我们根据位置i每一位的值为0/1来判断要改变的行检验码。
通过以上分析,我们知道,i取值范围为0~2047共2048个字节,i为11位。正好对应需要改变的11位行检验码。程序描述如下:

for(i=0;i<2048;i++)
        {
                j=pData;                             //得到要检验的数值
                byte=Ecc_Table[j];                      //查表得到ECC结果
                list^=(byte&0x3f);                      //得到列检验码bit6位清零
if(byte&0x40)                           //判断第6位行检验码是否为1
{
   If(bit0(i)==1)    p8_1^=1;
       Else    p8_0^=1;

   ……………………………
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值