读取数据后, 计算出自己的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手册上没说有这种方式,