ecc效验和比较的另一种方式

 读取数据后, 计算出自己的ecc效验和放在rddata 中,然后写到寄存器rNFMECCD0和rNFMECCD1中,

然后读取rNFESTAT0寄存器, 判断是否ecc错误

 for(i=0; i<2; i++)
 {
  rddata = (unsigned int) NF_RDDATA();
  Uart_Printf("rddata 0x%x \r\n", rddata);
  eccBuf[i*4+0] = (char)(rddata & 0xff);
  eccBuf[i*4+1] = (char)(rddata>>8 & 0xff);
  eccBuf[i*4+2] = (char)(rddata>>16 & 0xff);
  eccBuf[i*4+3] = (char)(rddata>>24 & 0xff);
    } 
    rNFMECCD0=(DWORD)((DWORD)(eccBuf[1]<<16) | (DWORD)(eccBuf[0]&0xff) );
    rNFMECCD1=(DWORD)((DWORD)(eccBuf[3]<<16) | (DWORD)(eccBuf[2]&0xff) );
 
 NF_nFCE_H();   
 if (((rNFESTAT0)&0x3) == 0x0)
 {
  Uart_Printf("ECC right sector,");
 }
 else
 {
  Uart_Printf("ECC error sector,");
 }
 Uart_Printf("ECC  sector: 0x%08x ,rNFMECC0:0x%08x", sector,rNFMECC0);
 Uart_Printf(",rNFMECCD0:%08x,rNFMECCD1:%08x\r\n",rNFMECCD0,rNFMECCD1);
    return OK;

 

直接读取,nandflash里面的ecc值,然后打印寄存器结果如下:

ECC right sector,ECC  sector: 0x00002700 ,rNFMECC0:0xa0969a6a,rNFMECCD0:69696969,rNFMECCD1:68686868

 

直接读取ofb区域的值如下:

 printf out of band

004E0000:  ff fd fb ff 00 14 00 00 6a 9a 96 a0 ff ff ff ff

004E0010:  ff fd fb ff 01 14 00 00 ff ff ff f0 ff ff ff ff

004E0020:  ff fd fb ff 02 14 00 00 ff ff ff f0 ff ff ff ff

004E0030:  ff fd fb ff 03 14 00 00 ff ff ff f0 ff ff ff ff

 

结论这种方式和一般的方式不一样。

疑问:这种方式,是怎么来的,2440手册上没说有这种方式,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值