幫助理解CRC原理及應用的經典文章。
一、 CRC 原理
計算CRC的過程,就是用一個特殊的“除法”,來得到余數,這個余數就是CRC。
它不是真正的算術上的除法!過程和算術除法過程一樣,只是加減運算變成了XOR(異或)運算!
算術上的除法:
120÷9=13 余 3,120是被除數,9是除數,13是商,3是余數。念作120除以9,或者9除120,或者9去除120! (除法的過程就不寫了)
這個除法計算機當然會做,但是做起來很麻煩,因為減法有借位,很耗時間和指令!
所以,計算CRC也是除法,但是用XOR來代替減法,這就簡單多了!
CRC 的除法:
120÷9=14 余 6,商、余數和算術除法不一定相同! !因為除法用的是XOR,而不是真正的減法。 以二進制模擬這個計算過程:
0.png (125.41 KB, 下載次數: 53)
下載附件
2018-1-17 20:51 上傳
接收端收到1111110,用它除以1001,計算得余數為000,就說明收到的數據正確。 所以原始數據后面要先擴展出3位0,以容納CRC值!
會發現,在上面的除法過程中,這3位0,能保證所有的4個數據位在除法時都能夠被處理到!不然做一次除法就到結果了,那是不對的。這個概念后面要用到。
所以,實際上,數據是1111,CRC是110。
對于除數1001,我們叫它生成多項式,即生成項,或POLY,即g(x)。
數據1111根據POLY1001,計算得到CRC110。
如果POLY不是1001,而是1011,那得到的CRC也是不同的!
所以生成項不同,得到的CRC也不同。要預先定義好POLY,發送端和接收端要用一樣的POLY!
0.png (129.3 KB, 下載次數: 62)
下載附件
2018-1-17 20:53 上傳
0.png (72.41 KB, 下載次數: 77)
下載附件
2018-1-17 20:53 上傳
0.png (153.15 KB, 下載次數: 45)
下載附件
2018-1-17 20:54 上傳
完整的pdf格式文檔51黑下載地址(共31頁):
CRC32、CRC16、CRC原理和算法.pdf
(173.04 KB, 下載次數: 94)
2018-1-17 09:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|