CRC校驗的最底層原理是什么?
CRC最基礎的運算就是移位運算和異或運算。
由于硬件可以完成CRC運算,即固化CRC算法,故實際運算又被分成左移或右移運算,即CRC成員中的“CRC方向”。
CRC的成員有:
CRCn:常見的有CRC4,CRC8,CRC16,CRC32,CRC64。
權值:即多項式poly,它是CRC運算中的“密鑰”,即算法的核心。
由于上面說過CRC算法分為左移或右移運算,故當左移運算時,權值的最低位D0為“1”時,CRC可逆,否則CRC不可逆。
當右移運算時,權值的最高位Dn-1為“1”時,CRC可逆。否則CRC不可逆。
通俗地說,多項式中含“+1”或“+X0”時,CRC可逆。否則CRC不可逆。
CRC方向:開始已經論述,分為左移或右移運算。
CRC初值:即CRC運算的初始值init,它只對第一個CRC待校驗數據作用,并與其滿足交換律。
CRC出值:即CRC運算過程結束后,它對最后一個運算過程的中間結果異或后的輸出值xorout。
CRC結果:即CRC運算的最終校驗和。
CRC表格:與CRC初值或CRC出值無關,并對連續的待校驗數據(例如00-0xFF)進行CRC運算的校驗和結果流。
CRC簡寫式:它包含了CRCn,CRC權值,CRC方向,CRC初值和CRC出值。它是CRC運算中最為完整的表述。
CRC算法:它至少有五種算法:
1.CRC移位算法。它沒有CRC表格,主要是對CRC權值的移位和異或運算,故相對速度最慢。
2.CRC大表和單表算法,其中大表內有256個查表數據單元。只有一個CRC表格。
3.CRC小表和單表算法,其中小表內只有16個查表數據單元。只有一個CRC表格。它比大表算法慢一倍。
4.CRC大表和雙表組合算法,它比算法2多了一個CRC表格,但數據寬度降低一倍,運算速度比算法2稍慢。它是低位數MCU的最佳選擇。
5.CRC小表和雙表組合算法,它比算法3多了一個CRC表格,但數據寬度降低一倍,運算速度比算法3稍慢。它是低位數MCU的最佳選擇。
學習CRC最底層原理可以從以上5種算法中看出,特別是從移位算法中搞清楚CRC的基本原理和運算。
下圖中的HotCRC計算器就可以自動生成任意CRC權值(CRC表格)的5種C語言表格和源碼。
而且可以根據學習的要求生成更為詳細帶有調試信息的源碼。