具体资料今天没带,官方也有说明的,给个你参考吧
/*
STM32 Nand ECC函数校验,完成ECC数据的校正,针对STM32内部自带的ECC生成
返回0表示没有数据错误
返回1表示存在1bit的数据错误,但是可以恢复
其余表示出现不可恢复的错误
此函数只针对STM32 的内部ECC有效
*/
U8 STM32_ECC512Check(U32 ECCMem,U32 ECCNew,U8* Data)
{
U32 ECCXOR,ERRBitPostion,i,CountOf1,ERRBytePostion;
ECCXOR=(ECCMem^ECCNew)&0x00FFFFFF;
//检验没有错误
if(ECCXOR==0x00) return 0x0;
CountOf1=0;
for(i=0;i<24;i++)
{
if((ECCXOR&(0x01<<i))!=0) CountOf1+=1;
}
ERRBytePostion=0;
ERRBitPostion=0;
//为可以校正的错误,进行错误校正
if(CountOf1==12)
{
ERRBitPostion=((ECCXOR>>1)&0x01)|((ECCXOR>>2)&0x02)|((ECCXOR>>3)&0x04);
ERRBytePostion=((ECCXOR>>7)&0x01)|((ECCXOR>>8)&0x02)|((ECCXOR>>9)&0x04)|((ECCXOR>>10)&0x08)|((ECCXOR>>11)&0x10)\
|((ECCXOR>>12)&0x20)|((ECCXOR>>13)&0x40)|((ECCXOR>>14)&0x80)|((ECCXOR>>15)&0x100);
Data[ERRBytePostion]=Data[ERRBytePostion]^(1<<ERRBitPostion);
return 0x01;
}
else return 0x03;
}
|