你们好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给你们讲的是嵌入式经常使用的数据差错控制技术,共6篇文章,按部就班地介绍6种经常使用的差错控制技术。html
通讯发展史与数据编码技术发展息息相关,为了检测与纠正在通讯中发生未知的数据错误,经常须要在原始数据编码时要引入一些技巧,这些技巧就是所谓的编码技术。仔细看下面这张图,想象本身就是其中的一个bit,是否是有身临其境地感觉数据通讯编码的感受?是的话,欢迎阅读本系列文章。算法
本系列文章选取了用于差错控制的六大经典的编码校验方式,在进入正文以前,咱们先用一张表对比这六大校验技术差别:编码
校验方法 | 数据块大小 | 校验码长度 | 检错能力 | 纠错能力 | 适用场合 | 失效分析 | 行业应用 |
---|---|---|---|---|---|---|---|
重复校验 | n bits | (q-1)*n bits q为重复数 |
不限bit错误 | x bits 但并不可靠 |
数据块小且对传输效率无要求 | 检错:重复码与原码出错bit位一致 纠错:错误码几率大于原码 |
加强实现版本用于FlexRay通讯协议 |
奇偶校验 | n bits | 1 bit | 奇数个bit错误 | 无 | 数据块小且通常只发生1bit错误 | 偶数个bit错误 | 串口UART通讯协议 |
和校验 | n bytes | 1 byte | 不限bit错误 | 无 | 数据块中等且错误bit较少 | 多个bit错误致使的增量和能整除0x100 | hex, s-record文件 |
循环冗余校验 | n bytes | 1/2/4/8 byte | 不限bit错误 | 设计初衷仅检错,原理上也可纠错(算法复杂) | 数据块大且错误bit无规律 | 多个bit错误致使碰撞现象(即错误数据CRC与原数据CRC刚好相等) | Modbus RTU模式,USB通讯协议 |
汉明码校验 | 256/512 bytes | 22/24 bits | 2 bit错误 | 1 bit错误(仅发生1 bit错误时) | 数据块较大但常只发生1/2 bit错误 | 多于2 bit错误 | SLC NAND Flash ECC |
BCH码校验 | (m*k) bits m组k位 |
(m*n) bits n>k |
(x+1) bit错误 | x bit错误 | 数据块较大且容易发生多bit错误 | 多于(x+1) bit错误 | SSD NAND Flash(MLC/TLC) ECC |
经常使用的数据差错控制技术(1)- 重复校验(Repetition Code)
经常使用的数据差错控制技术(2)- 奇偶校验(Parity Check)
经常使用的数据差错控制技术(3)- 和校验(Checksum)设计
经常使用的数据差错控制技术(4)- 循环冗余校验(CRC)
经常使用的数据差错控制技术(5)- 汉明码校验(Hamming Code SEC-DED)
经常使用的数据差错控制技术(6)- 博斯-乔赫里-霍克文黑姆码校验(BCH Code)htm