1、基本原理ide
CRC檢驗原理實際上就是在一個p位二進制數據序列以後附加一個r位二進制檢驗碼(序列),從而構成一個總長爲n=p+r位的二進制序列;附加在數據序列以後的這個檢驗碼與數據序列的內容之間存在着某種特定的關係。若是因干擾等緣由使數據序列中的某一位或某些位發生錯誤,這種特定關係就會被破壞。所以,經過檢查這一關係,就能夠實現對數據正確性的檢驗。
2、幾個基本概念code
一、幀檢驗序列FCS(Frame Check Sequence):爲了進行差錯檢驗而添加的冗餘碼。generator
二、多項式模2運行:其實是按位異或(Exclusive OR)運算,即相同爲0,相異爲1,也就是不考慮進位、借位的二進制加減運算。如:10011011 + 11001010 = 01010001。it
三、生成多項式(generator polynomial):當進行CRC檢驗時,發送方與接收方須要事先約定一個除數,即生成多項式,通常記做G(x)。生成多項式的最高位與最低位必須是1。經常使用的CRC碼的生成多項式有:class
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。
3、CRC檢驗碼的計算
設信息字段爲K位,校驗字段爲R位,則碼字長度爲N(N=K+R)。設雙方事先約定了一個R次多項式g(x),則CRC碼:
V(x)=A(x)g(x)=xRm(x)+r(x)
其中: m(x)爲K次信息多項式, r(x)爲R-1次校驗多項式。
這裏r(x)對應的代碼即爲冗餘碼,加在原信息字段後即造成CRC碼。
r(x)的計算方法爲:在K位信息字段的後面添加R個0,再除以g(x)對應的代碼序列,獲得的餘數即爲r(x)對應的代碼(應爲R-1位;若不足,而在高位補0)。
計算示例
設須要發送的信息爲M = 1010001101,產生多項式對應的代碼爲P = 110101,R=5。在M後加5個0,而後對P作模2除法運算,得餘數r(x)對應的代碼:01110。故實際須要發送的數據是101000110101110。
4、錯誤檢測
當接收方收到數據後,用收到的數據對P(事先約定的)進行模2除法,若餘數爲0,則認爲數據傳輸無差錯;若餘數不爲0,則認爲數據傳輸出現了錯誤,因爲不知道錯誤發生在什麼地方,於是不能進行自動糾正,通常的作法是丟棄接收的數據。
5、幾點說明:
一、CRC是一種經常使用的檢錯碼,並不能用於自動糾錯。
二、只要通過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的機率就很小很小。
三、僅用循環冗餘檢驗 CRC 差錯檢測技術只能作到無差錯接受(只是很是近似的認爲是無差錯的),並不能保證可靠傳輸。