王鵬
(赤峰學院 計算機與信息工程學院,內蒙古 赤峰 024000)
基于CAN總線的CRC校驗碼的原理與實現
王鵬
(赤峰學院 計算機與信息工程學院,內蒙古 赤峰 024000)
CAN總線又稱為控制器局域網技術,屬于工業現場總線,應用范圍很廣.CAN系統中通常采用反饋重發機制對通信過程進行差錯控制.當接收端反饋給發送端出錯信息后,發送端便自動重發,經此過程,只需要檢錯就可以了.循環冗余校驗碼實現簡單,誤判率比較低,還具有糾錯功能,在通信系統中應用較為廣泛.
控制器局域網;差錯校驗;CRC循環校驗
CAN(Controller Area Network)全稱控制器局域網,是工業現場總線的一種,是應用最廣泛的開放式現場總線之一.與其它通信網的不同之處在于:第一,報文傳送中不包含目的地址,而是以全網廣播為基礎,各接收站根據報文中的標識符過濾報文,以決定接收還是丟棄,其優點在于可在線上網下網、即插即用和多站接收;第二,強化了對數據安全性的要求,滿足控制系統及其它較高數據安全要求的系統需求.
CAN系統中通常采用反饋重發機制對通信過程進行差錯控制,以保證報文能正確的傳輸.當接收端反饋給發送端出錯信息后,發送端便自動重發,在此過程中,只需要檢錯就可以了.一般的檢錯碼有兩類:奇偶校驗碼和循環冗余校驗碼.奇偶校驗碼只具有檢錯能力,實現方法簡單,不能糾錯;循環冗余校驗碼也很簡單,而且誤判率比較低,還具有糾錯功能,在通信系統中應用較為廣泛.
下面,通過實例,來說明CAN網絡中循環冗余校驗碼的工作原理和實現方法.
一般情況,一個由二進制數位串組成的發送序列,可以用一個只含有0和1系數的多項表達式的系數表示出來,例如:代碼1001011對應的多項式為X6+X3+X+1,再如:代碼為1010111,則對應的多項式X6+X4+X2+X+1.
CRC檢錯碼是采用多項式相除的運算方法實現的,如被處理報文的比特序列對應的多項式為P (X),收發雙方約定的多項式為G(X),用P(X)除以G (X)后,求得余數多項式R(X),并將多項式R(X)附加到多項式P(X)的后邊,生成M(X),這樣能保證M(X)除以G(X)的余數為0.此時,可以將M(X)作為發送序列發給接收方.接收方用收到的報文N(X)去除同樣的G(X),如果余數等于0,則說明接收到的序列與發送的序列一致,接收到的數據沒有錯誤;否則,說明傳輸過程中出錯,由發送端重發,重新開始CRC校驗,直到接收到的數據沒有錯誤為止.
(1)在進行CRC計算時,采用二進制模2運算規則,對兩個操作數進行邏輯異或運算;即2個數據相同,結果為0;2個數據不同,結果為1.
(2)在進行CRC計算前先將多項式P(X)乘以Xn,其中n為生成多項式G(X)的最高冪值.對多項式除法來講,P(X)*Xn就是將P(X)左移n位,用來存放余數R(X),所以實際發送的報文就變為P(X) *Xn+R(X);即M(X).
(3)在進行基于模2運算的多項式除法時,如果部分余數首位為1,則商上1,否則商上0.
再異或運算求得余數,余數最高位舍棄.按此方法,最終得到的余數比除數少一位.此余數即為R(X);添加在信息位后便構成CRC碼字的發送序列.用此發送序列多項式再除以G(X)的余數一定為0,以方便接收方的校驗.
下面通過一個實例來說明CRC的運行過程.
例如:假設待發送的信息位為1011001,則對應的多項式P(X)=X6+X4+X3+1,若選取G(X)=X4+X3+1,其對應代碼11001,則X4*P(X)=X10+X8+X7+X4,對應的代碼為10110010000,首先由模2除法求余數多項式R(X),過程如下所示:

得到余數1010,即R(X)=X3+X,對發送序列P (X)進行改造,生成M(X):
M(X)=P(X)*X4+R(X)=X10+X8+X7+X4+X3+X,即發送序列為10110011010.也就是說信道上發送的碼字為10110011010.若傳輸過程無錯,則接收方收到的代碼序列與發送方相同,所以接收端的校驗過程就是將接收到的碼字多項式除以G(X).若余數多項式為零則認為傳輸無差錯;若余數多項式不為零則傳輸有差錯.
如果發送序列為10110011010,在接收端收到的是10100011010,對接收端來說,如何發現錯誤,是通過驗證此時的余數多項式是否為0來的說明,運算如下:

上式運算結果得到一個0111的余數多項式,即余數不為0,說明接收到的信息有錯誤,要求發送端重發;當然,一些特殊場合,可以進一步計算錯誤位是哪位,從而進行修正,這樣的編碼稱為糾錯碼.
CAN總線中要求生成多項式G(X)的首位和最后一位的系數必須為1,通常規定的G(x)有:

CAN總線中的CRC校驗采用的多項式比一般CRC校驗要高很多,其檢錯能力更強,誤判率極低,是提高數據傳輸質量的有效檢錯手段.
〔1〕楊春杰,王曙光.CAN總線技術[M].北京航空航天大學出版社,2011.
〔2〕張培仁.CAN總線設計及分布式控制[M].清華大學出版社,2012.
〔3〕饒運濤.現場總線CAN原理與應用技術(第2版)[M].北京航空航天大學出版社,2007.
TP393.1
A
1673-260X(2014)02-0048-02
本論文的相關基礎性研究已申請專利,專利名稱“自動閥門傳感裝置”,專利號“201320025792·9”