ECC错误修改只能纠正一位的数据错误,能检测出两位的错误但是无法纠正
汉明码原理是
1、根据数据长度计算校验位的个数,计算公式为在满足2^k≥n+k+1的前提下,取最小的那个正整数 k,其中k为校验位的个数,n为数据长度的位数,如32位数据则校验位为6位
2、根据校验位个数修改原本的数据格式即插入校验位进行数据整合,以32位数据、6位校验位为例,在第1、2、4、8、16、32位插入校验位(数据起始位为第1位)
3、先对数据进行分组,分组方式:第1组为数据格式重组后数据下标值的第一位为1的数据(数据下标从1开始)用于计算第1位校验位的值,将分组后的数据通过偶校验计算校验位的值,如除校验位以外1个数为奇数则校验位为1,反之为0;同理计算出其余校验位的值
4、数据存储时存储重组后的数据格式,数据读取时计算每组数据(第三步的分组)的异或值,若每组的异或值均为0则校验通过,若计算出的值存在非0值则组合每组的异或值(高位存放最高组的值),得到的值即错误的数据的下标(数据下标从1开始且为整合后的数据)
5、对错误的数据进行反转即得到正确的数据,拆除校验位的值即得到原始数据