打印

stm32硬件ECC的矫正

[复制链接]
5660|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
夜夜|  楼主 | 2010-6-11 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32做nand flash控制器,硬件ECC比对出了1位错误,如何矫正数据呢。

即怎么定位到错误的位置。

找了好久都没看到相关资料,苦恼啊。

另外stm32的硬件ECC用的是什么编码;有高手知道么。

这些,对于做nand flash 的文件存储很重要,期待解答。
沙发
258963519| | 2010-6-12 11:57 | 只看该作者
具体资料今天没带,官方也有说明的,给个你参考吧
/*
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;                               
}

使用特权

评论回复
板凳
夜夜|  楼主 | 2010-6-14 11:57 | 只看该作者
非常感谢,请教ST的说明文档是什么编号;这段代码是来自参考还是兄弟字节写的呢?

我在写nand flash过程中,测试发现大文件的写很容易就出现些位的错误。
数据错误并不是写入之初就错,而是出现在回写页的copy-back操作的过程中。
即用nand flash的 0x35 0x85读写指令时容易造成位翻转。

不知道楼上的兄弟有没有遇到同样的问题。 发了站内消息,望回复我个联系方式,多谢。

使用特权

评论回复
地板
zqh1630| | 2015-4-27 16:58 | 只看该作者
mark一下!!

使用特权

评论回复
5
ddllxxrr| | 2015-6-9 14:47 | 只看该作者
夜夜 发表于 2010-6-14 11:57
非常感谢,请教ST的说明文档是什么编号;这段代码是来自参考还是兄弟字节写的呢?

我在写nand flash过程中 ...

怎么回事还能读错了?????

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一庭芳草围新绿 有情芍药含春泪

14

主题

63

帖子

1

粉丝