CRC編碼

CRC編碼,是指循環冗餘碼校驗,它是利用除法及餘數的原理來作錯誤偵測(Error Detecting)的。

一、循環冗餘碼校驗英文名稱為Cyclical Redundancy Check,簡稱CRC
它是利用除法及餘數的原理來作錯誤偵測(Error Detecting)的。實際套用時,傳送裝置計算出CRC值並隨數據一同傳送給接收裝置,接收裝置對收到的數據重新計算CRC並與收到的CRC相比較,若兩個CRC值不同,則說明數據通訊出現錯誤。
根據套用環境與習慣的不同,CRC又可分為以下幾種標準:
①CRC-12碼;
②CRC-16碼;
③CRC-CCITT碼;
④CRC-32碼。
CRC-12碼通常用來傳送6-bit字元串。
CRC-16及CRC-CCITT碼則用是來傳送8-bit字元,其中CRC-16為美國採用,而CRC-CCITT為歐洲國家所採用。
CRC-32碼大都被採用在一種稱為Point-to-Point的同步傳輸中。
下面以最常用的CRC-16為例來說明其生成過程。
CRC-16碼由兩個位元組構成,在開始時CRC暫存器的每一位都預置為1,然後把CRC暫存器與8-bit的數據進行異或(異或:二進制運算 相同為0,不同為1;0^0=0;0^1=1;1^0=1;1^1=0),
之後對CRC暫存器從高到低進行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位後已經被移出CRC暫存器)如果為1,則把暫存器與預定義的多項式碼進行異或,否則如果LSB為零,則無需進行異或。重複上述的由高至低的移位8次,第一個8-bit數據處理完畢,用此時CRC暫存器的值與下一個8-bit數據異或並進行如前一個數據似的8次移位。所有的字元處理完成後CRC暫存器內的值即為最終的CRC值。
下面為CRC的計算過程:
1.設定CRC暫存器,並給其賦值FFFF(hex)。
2.將數據的第一個8-bit字元與16位CRC暫存器的低8位進行異或,並把結果存入CRC暫存器。
3.CRC暫存器向右移一位,MSB補零,移出並檢查LSB。
4.如果LSB為0,重複第三步;若LSB為1,CRC暫存器與多項式碼相異或。
5.重複第3與第4步直到8次移位全部完成。此時一個8-bit數據處理完畢。
6.重複第2至第5步直到所有數據全部處理完成。
7.最終CRC暫存器的內容即為CRC值。
常用的CRC循環冗餘校驗標準多項式如下:
CRC(16位) = X16+X15+X2+1
CRC(CCITT) = X16+X12 +X5+1
CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1
以CRC(16位)多項式為例,其對應校驗二進制位列為1 1000 0000 0000 0101。
注意:這兒列出的標準校驗多項式都含有(X+1)的多項式因子;各多項式的係數均為二進制數,所涉及的四則運算仍遵循對二取模的運算規則。
(註:對二取模的四則運算指參與運算的兩個二進制數各位之間凡涉及加減運算時均進行XOR異或運算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1,0 XOR 1=1,即相同為0,不同為1)

相關詞條

熱門詞條

聯絡我們