Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3167710
  • 博文数量: 685
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5303
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-19 14:17
个人简介

文章分类

全部博文(685)

文章存档

2015年(116)

2014年(569)

分类: LINUX

2014-09-21 14:50:04

原文地址:http://www.cnblogs.com/cdfyanghua/archive/2008/05/27/1208637.html

校验的时候,根据上述ECC生成原理不难推断:将原ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错;若异或结果中存在11个比特(如是512B,则12个比特,以此类推)位为1,表示存在一个比特错误,且可纠正;若只存在1个比特位为1,表示原ECC出错;其他情况均表示出现了无法纠正的错误。

在讨论这个问题之前,我们先了解一下ECC原理。


上图是ECC原理图。
其中P1,P2,P4为列校验,其余为行校验.
校验的时候,根据上述ECC生成原理不难推断:将原ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错;若异或结果中存在11个比特(如是512B,则12个比特,以此类推)位为1,表示存在一个比特错误,且可纠正;若只存在1个比特位为1,表示原ECC出错;其他情况均表示出现了无法纠正的错误。

 

为了简单起见,我们先讨论只一个字节的情形,假设有一个字节,它的ECC较验码为:

    p1=1,p1'=0,  p2=1,p2'=0,  p4=1,p4'=0, 

现在假设它的Bit3出错,则新的ECC较验码为:

    p1=0,p1'=0,  p2=0,p2'=0,  p4=1,p4'=1,  (因为p1,p2,p4'包含了Bit3)

将新的p4,p2,p1与原始的p4,p2,p1异或,结果为011B,得知是Bit3出错.

 同理,在多个字节的情形下,可以通过P8,p16,p32...找到出错的哪个字节.

 

下表是2440的ECC位示意:

 

当被校验的数据为512B时,只用到P1~P2048;
当被校验的数据为1024B时,用到了P1~P4096;
当被校验的数据为2048B时,则用到了P1~P8192;
在纠正时,根据P4,P2,P1组成一个字节,即为出错的位。将P8192,P4096,P2048,P1024,P512,P256...P8组成一个字,即为出错的字节.
知道哪个字节及哪一位出错后,就可以纠正了。

阅读(1743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~