数据校验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据校验--ECC校验
数据校验--ECC校验 其中RP0 ~ RP15 为十六个Bit位,表示Row Parity(行 极性), RP0为第0、2、4、6、„.252、254 个字节的极性 RP1-----1、3、5、7„„253、255 RP2----0、1、4、5、8、9„..252、253 (处理2个 Byte,跳过2个Byte) RP3---- 2、3、6、7、10、11„..254、255 (跳过2 个Byte,处理2个Byte) RP4---- 处理4个Byte,跳过4个Byte; RP5---- 跳过4个Byte,处理4个Byte; RP6---- 处理8个Byte,跳过8个Byte RP7---- 跳过8个Byte,处理8个Byte; RP8---- 处理16个Byte,跳过16个Byte RP9---- 跳过16个Byte,处理16个Byte;
数据校验--ECC校验
RP10----处理32个Byte,跳过32个Byte RP11----跳过32个Byte,处理32个Byte; RP12----处理64个Byte,跳过64个Byte RP13----跳过64个Byte,处理64个Byte; RP14----处理128个Byte,跳过128个Byte RP15----跳过128个Byte,处理128个Byte; 可见,RP0 ~ RP15 每个Bit位都是128个字节(也就是 128行)即128*8=1024个Bit位求异或的结果。
数据(n
校验位(k
CRC码(n+k
数据校验--循环冗余校验码 2. 校验位的生成 假设:要传送的数据信息为:100011,即报文 5 多项式为:M(x)= x + x + 1;约定的生成多 3 项式为:G(x)= x + 1, 则数据信息位数n=6,生成多项式位数为4位,所以 校 验位位数k=3。 3. 生成校验位时,用x M(x)去除以G(x),相除时采用 “模2运算”的多项式除法。 3.利用“模2”多项式除法计算xM(x)÷G(x)的过程。
数据校验--ECC校验
数据校验--ECC校验 这样,我们从异或结果中抽取出CP5,CP3,CP1 位,便可定位出错Bit位的列地址。比如上面的 例子中CP5/CP3/CP1 = 001,表示Bit 1出错。 同理,行校验RP1发生变化,抽取RP1,可知 Byte 1发生变化。这样定位出Byte 1的Bit 0出 错。
数据校验--循环冗余校验码
100111
1001 100011000 1001 0011 0000 0111 0000 1110 1001 1110 1001 1110 1001 111 校验位
X M(x)÷G(x)=(x + x + x )÷(x + 1)=x +x+1 校验位为111,CRC码为100011 111。
余数不为0
数据校验--循环冗余校验码
3. CRC码的纠错 •在接收方将收到的CRC码用约定的生成多项式 G(x)去除,如果码字没有错误,则余数为0,若有一 位出错,则余数不为0,而且不同的出错位置其余数 不同。 •更换不同的码字,余数和出错位的关系不变。 只和码制与生成多项式有关。 •如果CRC码中有一位出错,用特定的G(x)作模2除, 则会得到一个不为0的余数。
数据校验--循环冗余校验码
100111
1001 100011111 1001 0011 0000 0111 0000 1111 1001 1101 1001 1001 1001 000 余数为0 1001 101110 101011111 1001
0111 0000
1111 1001 1101 1001 1001 1001 0001 0000 001
当从NAND Flash中读取数据的时候,每256字节 我们生成一个ECC校验和,称之为新ECC校验和。 将从OOB区中读出的原ECC校验和新ECC校验和按 位异或,若结果为0,则表示不存在错(或是出现了 ECC无法检测的错误);若3个字节异或结果中存在11个 比特位为1,表示存在一个比特错误,且可纠正;若3个 字节异或结果中只存在1个比特位为1,表示 OOB区出错; 其他情况均表示出现了无法纠正的错误。
数据校验--ECC校验 ECC的全称是Error Checking and Correction, 是一种用于Nand的差错检测和修正算法。 (NAND Flash是目前市场上主要的非易失闪存芯 片)
• ECC能纠正1个比特错误和检测2个比特错误,而 且计算速度很快,但对1比特以上的错误无法纠 正,对2比特以上的错误不保证能检测。
数据校验--循环冗余校验码 4. 生成多项式的选取 •从查错和纠错的要求来看,选取的一个 生成多项式应满足以下几个条件: 任何一位发生错误时,都应使余数不为0。 不同位发生错误时,余数应该不同。 对余数作模2 除时,应使余数循环。 下面是几种常用的生成多项式: 16 12 5 CRC-CCITT: G(x)=x +x +x +1 16 15 2 CRC-16: G(x)=x +x +x +1 12 11 3 2 CRC-12: G(x)=x +x +x +x +x+1 CRC-32: 32 26 23 16 12 11 10 8 7 5 4 2 G(x)=x +x +x +x +x +x +x +x +x +x +x +x +x+1
3.
8
4
3
3
2
数据校验--循环冗余校验码
上商原则:部分余数首位是1商取1 反之商取0 •如果要校验CRC码,则可将CRC码用同一个 多项式相除,若余数为0,则说明无错; 若余数不为0,则说明有错。
例如:若在接收方的CRC码与发送方一致,即为 100011 111时,用同一个多项式相除后余数为0; 若在接收方的CRC码有一位出错而变为101011 111时, 用同一个多项式相除后余数不为0。
数据校验
数据校验
减少、避免错误
•“冗余校验”:即除原数据信息外,还增加若干位 编码, 这些新增的代码被称为校验位。
数据校验
出错信号 数据输出 M
纠正器
数据输入
M 存储器 或 传输线路
M’ f
P’ 比较 P”
f
P
数据校验 “码字”:由若干位代码组成的一个字。 “距离”:将两个码字逐位比较,具有不同代码 的位的个数。 “码距”:各码字间的最小距离 在数据校验码中,一个码字是指数据位和校验位按照 某种规律排列得到的代码。
当数据位256字节时,行校验使用RP0 ~ RP15, 抽取异或结果的RP15,RP13,RP11,RP9,RP7, RP5,RP3,RP1位便可定位出哪个Byte出错,再 用CP5,CP3,CP1定位哪个Bit出错。
数据校验——完
谢谢 !
• 例: 需要校验数据1010 生成多项式 G(x)=1011 • 校验位:011 • 被除数 余数 除数:1011 • 正确:1010011 000 • 错误:1010010 001(第七位错) • 1010001 010(第六位错) • 1010111 100(第五位错) • 1011011 011(第四位错) • 1000011 110(第三位错) • 1110011 111(第二位错) • 0010011 101(第一位错)
数据校验--ECC校验 综上所述,对256字节的数据共生成了6个Bit的 列校验结果,16个Bit的行校验结果,共22个Bit。 在Nand中使用3个字节存放校验结果,多余的两个 Bit位置1。存放次序如下表所示:
数据校验--ECC校验
在Linux内核中ECC校验算法所在的文件为 drivers/mtd/nand/nand_ecc.c,其实现有新、旧两种, 在2.6.27及更早的内核中使用的程序,从2.6.28开始 已经不再使用,而换成了效率更高的程序。 可以在Documentation/mtd/nand_ecc.txt 文件中找到对新程序的详细介绍。 3.2:drivers/mtd/nand/nand_ecc.c
数据校验--ECC校验 其中CP0 ~ CP5 为六个Bit位,表示Column Parity(列极性), CP0为第0、2、4、6列的极性,CP1为第1、3、5、 7列的极性, CP2为第0、1、4、5列的极性,CP3为第2、3、6、 7列的极性, CP4为第0、1、2、3列的极性,CP5为第4、5、6、 7列的极性。 用公式表示就是:CP0=Bit0⊕Bit2⊕Bit4⊕Bit6, 表示第0列百度文库部256个Bit位异或之后再跟第2列256 个Bit位异或,再跟第4列、第6列的每个Bit位异 或,这样,CP0其实是256*4=1024个Bit位异或的 结果。CP1 ~ CP5 依此类推。
数据校验--ECC校验
可见,当 Bit1发生变化时,列校验值中只有CP1, CP2,CP4发生了变化,而CP0,CP3,CP5没变化, 也就是说6个Bit校验码有一半发生变化,则求异 或的结果中有一半为1。同理,行校验求异或的 结果也有一半为1。这就是为什么前面说256字节 数据中的一个Bit位发生变化时,新旧22Bit校验 码求异或的结果中会有11个Bit 位为1。
数据校验--ECC校验 再来看怎么定位出错的Bit位。以列地址为例,若 CP5发生变化(异或后的CP5=1),则出错处肯定在 Bit 4 ~ Bit 7中;若CP5无变化(异或后的CP5=0), 则出错处在 Bit 0 ~ Bit 3 中,这样就筛选掉了一 半的Bit位。剩下的4个Bit位中,再看CP3是否发生 变化,又选出2个Bit位。剩下的2Bit位中再看CP1是 否发生变化,则最终可定位1个出错的Bit位。下面 的树形结构更清晰地展示了这个判决过程:
数据校验--ECC校验
例 假设待校验的数据为两个字节,0x45(二进制为 0100 0101)和0x38(二进制为0011 1000),其行列 校验码如下表所示:
数据校验--ECC校验
从表中可以计算出CP5 ~ CP0的值,列在下表的 第一行(原始数据)。假设现在有一个数据位发生变 化,0x38变为0x3A,也就是Byte1的Bit 1由0变成了1, 计算得到新的CP5 ~ CP0值放在下表第2行(变化后数 据)。新旧校验码求异或的结果放在下表第三行。
• • • • •
假设第七位错误 余数001; 001后补零成0010 除数1011继续除 余数010 010后补零成0100 …… 余100 …………………..照此法动作 依次得到001 010 100 011 110 111 101 001…..
数据校验--ECC校验 当往NAND Flash的page中写入数据的时候,每 256字节我们生成一个ECC校验和,称之为原ECC校验和, 保存到OOB数据区中。
(传输层协议使用带外数据out-of-band,OOB来发送一些重要的 数据,如果通信一方有重要的数据需要通知对方时,协议能够将 这些数据快速地发送到对方)
数据校验--循环冗余校验码 循环冗余校验码 •循环冗余校验码(Cyclic Redundancy Check), 简称CRC码。通过某种数学运算来建立数据和校验位 之间的约定关系。 •循环冗余校验码常用于外存储器的数据校验以及计算 机通信中。
数据校验--循环冗余校验码 1. CRC码的检错方法 假设要进行校验的数据信息M(x)为一个n位的二进制 数据,将M(x)左移k位后,用一个约定的“生成多项 式”G(x)相除,G(x)是一个k+1位的二进制数,相除 后 得到的k位余数就是校验位。这些校验位拼接到M(x) 的n位数据后面,形成一个n+k位的代码,称这个代码 为循环冗余校验(CRC)码,也称(n+k,n)码。
数据校验--ECC校验 校验码生成算法:ECC校验每次对256字节的数据 进行操作,包含列校验和行校验。对每个待校验的 Bit位求异或,若结果为0,则表明含有偶数个1;若 结果为1,则表明含有奇数个1。256字节数据形成 256行、8列的矩阵,矩阵每个元素表示一个Bit位。
数据校验--ECC校验
相关文档
最新文档