CRC校驗(CRC-32 CRC-8...)


CRC-32在線校驗網址:(以下都可以)

https://crccalc.com/

http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

https://www.lammertbies.nl/comm/info/crc-calculation.html

 

CRC即循環冗余校驗(Cyclic Redundancy Check),CRC是一種常用的檢錯碼,並不能用於自動糾錯

 

CRC碼校驗原理:

發送端:發送端根據信息字段與生成多項式生產呢個CRC碼,CRC碼作為數據發送給接收端,同時也會把計算出的校驗字段的數據一同發送(注:目的是如果接受端檢測到發送的數據是正確的,接收端能夠從CRC碼中提取出信息字段的數據)。

接收端:接收到CRC碼數據后,檢測接收到的數據是否正確,方法:將CRC碼數據與生成多項式進行模2除,如果余數為0,則說明接收到的數據是正確的。然后,從CRC碼中提取出信息字段的數據。

 

發送端生成CRC碼方法:

CRC碼是由兩部分組成的,前部分是信息字段,就是需要校驗的信息,后部分是校驗字段,如果CRC碼共長n個bit,信息字段長k個bit,就稱為(n,k)碼。它的編碼規則是:

  1. 首先將信息字段值(k bit)左移r位(k+r=n)
  2. 運用一個生成多項式g(x) (也可看成二進制數) 模2,除上面的式子,得到的余數就是校驗字段值。模2運算實際上是按位異或(Exclusive OR)運算,即相同為0,相異為1,也就是不考慮進位、借位的二進制加減運算。
  3. 生成的CRC碼值為:信息字段值+校驗字段值(單位:位bit,次序:高位到低位),例如字段值為1001,校驗字段值為110,則CRC碼為1001110

 

常見的多項式:

CRC8=X8+X5+X4+1

CRC-CCITT=X16+X12+X5+1

CRC16=X16+X15+X5+1

CRC12=X12+X11+X3+X2+1

CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1

如CRC8對應代碼:100110001

 

下面是看起來復雜,其實就是套公式的數學公式計算方法:

設待校驗的信息碼有k位,即:m = (mk-1mk-2mk-3……m1m0), 多項式m(x)可表示為
m(x) = mk-1xk-1+ mk-2xk-2 +……m1x1+ m0x0   ----------------------------------------------------------------- 式(1)
用多項式g(x)的最高次冪R對應的X乘以m(x),將得到式(2)
Xm(x) = mk-1xk+R-1+ mk-2xk+R-2 +……m1x1+R+ m0x0+R -----------------------------------------------------式(2)
將Xm(x) 模2除以g(x),得到多項式商為A(x),余數為r(x),即:
A(x)g(x) = Xm(x) +r(x) ------------------------------------------------------------------------------------------式(3)
余數多項式r(x)可表示為
r(x) = rR-1xR-1+ rR-2xR-2 +……r1x1+ r0x------------------------------------------------------------------------式(4)
將式(2)和式(4)代入式(3)得
A(x)g(x) = mk-1xk+R-1+ mk-2xk+R-2 +……m1x1+R+ m0x0+R  rR-1xR-1+ rR-2xR-2 +……r1x1+ r0x0   ---------式(5)
式(5)對應的碼組為K+R位,即:
N = (mk-1+ mk-2 +……m1+ m0  rR-1+ rR-2 +……r1+ r0) ------------------------------------------------------式(6)
從M到N就是CRC的編碼過程mk-1+ mk-2 +……m1+ m0  為K位信息碼rR-1+ rR-2 +……r1+ r0為R位校驗碼
 

信息接收端,將接受到的K+R位碼除以相同的多項式g(x),根據式(3)所產生的余數為0,則接受到的數據信息正確無誤,否則則認為信息在傳輸過程中產生的誤碼。
根據式(1)~式(6),CRC編碼必須進行模2除運算,CRC的校驗位就是模2除得到的余數,如果余數用寄存器的存數表示,模2除用異或門表示,那么通用的CRC串行電路就可以同圖6.2所示的電路來實現。

 

參考:https://blog.csdn.net/u013898698/article/details/78864161

https://blog.csdn.net/android_mnbvcxz/article/details/78902737

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM