本帖最后由 lixiaoxu2meng 于 2012-6-8 15:59 编辑
大家好,我最近想要使用STM32的ECC功能,看了数据手册也看了论坛里一些网友发的关于ECC的帖子,怎么配置STM32的ECC及获取ECC也有所了解,但是我想问下,如果发现ECC有一个位出错,如果实行矫正呢。ST有提供相应的例子与函数吗?在论坛上看见个网友发了
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;
}
不知道这个是官网提供的吗 在哪里可以获得相关的函数?还是需要自己编写 |