你們好,我是痞子衡,是正經搞技術的痞子。本系列痞子衡給你們講的是嵌入式經常使用的數據差錯控制技術,共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