王鵬
(赤峰學(xué)院 計算機與信息工程學(xué)院,內(nèi)蒙古 赤峰 024000)
基于CAN總線的CRC校驗碼的原理與實現(xiàn)
王鵬
(赤峰學(xué)院 計算機與信息工程學(xué)院,內(nèi)蒙古 赤峰 024000)
CAN總線又稱為控制器局域網(wǎng)技術(shù),屬于工業(yè)現(xiàn)場總線,應(yīng)用范圍很廣.CAN系統(tǒng)中通常采用反饋重發(fā)機制對通信過程進行差錯控制.當(dāng)接收端反饋給發(fā)送端出錯信息后,發(fā)送端便自動重發(fā),經(jīng)此過程,只需要檢錯就可以了.循環(huán)冗余校驗碼實現(xiàn)簡單,誤判率比較低,還具有糾錯功能,在通信系統(tǒng)中應(yīng)用較為廣泛.
控制器局域網(wǎng);差錯校驗;CRC循環(huán)校驗
CAN(Controller Area Network)全稱控制器局域網(wǎng),是工業(yè)現(xiàn)場總線的一種,是應(yīng)用最廣泛的開放式現(xiàn)場總線之一.與其它通信網(wǎng)的不同之處在于:第一,報文傳送中不包含目的地址,而是以全網(wǎng)廣播為基礎(chǔ),各接收站根據(jù)報文中的標(biāo)識符過濾報文,以決定接收還是丟棄,其優(yōu)點在于可在線上網(wǎng)下網(wǎng)、即插即用和多站接收;第二,強化了對數(shù)據(jù)安全性的要求,滿足控制系統(tǒng)及其它較高數(shù)據(jù)安全要求的系統(tǒng)需求.
CAN系統(tǒng)中通常采用反饋重發(fā)機制對通信過程進行差錯控制,以保證報文能正確的傳輸.當(dāng)接收端反饋給發(fā)送端出錯信息后,發(fā)送端便自動重發(fā),在此過程中,只需要檢錯就可以了.一般的檢錯碼有兩類:奇偶校驗碼和循環(huán)冗余校驗碼.奇偶校驗碼只具有檢錯能力,實現(xiàn)方法簡單,不能糾錯;循環(huán)冗余校驗碼也很簡單,而且誤判率比較低,還具有糾錯功能,在通信系統(tǒng)中應(yīng)用較為廣泛.
下面,通過實例,來說明CAN網(wǎng)絡(luò)中循環(huán)冗余校驗碼的工作原理和實現(xiàn)方法.
一般情況,一個由二進制數(shù)位串組成的發(fā)送序列,可以用一個只含有0和1系數(shù)的多項表達式的系數(shù)表示出來,例如:代碼1001011對應(yīng)的多項式為X6+X3+X+1,再如:代碼為1010111,則對應(yīng)的多項式X6+X4+X2+X+1.
CRC檢錯碼是采用多項式相除的運算方法實現(xiàn)的,如被處理報文的比特序列對應(yīng)的多項式為P (X),收發(fā)雙方約定的多項式為G(X),用P(X)除以G (X)后,求得余數(shù)多項式R(X),并將多項式R(X)附加到多項式P(X)的后邊,生成M(X),這樣能保證M(X)除以G(X)的余數(shù)為0.此時,可以將M(X)作為發(fā)送序列發(fā)給接收方.接收方用收到的報文N(X)去除同樣的G(X),如果余數(shù)等于0,則說明接收到的序列與發(fā)送的序列一致,接收到的數(shù)據(jù)沒有錯誤;否則,說明傳輸過程中出錯,由發(fā)送端重發(fā),重新開始CRC校驗,直到接收到的數(shù)據(jù)沒有錯誤為止.
(1)在進行CRC計算時,采用二進制模2運算規(guī)則,對兩個操作數(shù)進行邏輯異或運算;即2個數(shù)據(jù)相同,結(jié)果為0;2個數(shù)據(jù)不同,結(jié)果為1.
(2)在進行CRC計算前先將多項式P(X)乘以Xn,其中n為生成多項式G(X)的最高冪值.對多項式除法來講,P(X)*Xn就是將P(X)左移n位,用來存放余數(shù)R(X),所以實際發(fā)送的報文就變?yōu)镻(X) *Xn+R(X);即M(X).
(3)在進行基于模2運算的多項式除法時,如果部分余數(shù)首位為1,則商上1,否則商上0.
再異或運算求得余數(shù),余數(shù)最高位舍棄.按此方法,最終得到的余數(shù)比除數(shù)少一位.此余數(shù)即為R(X);添加在信息位后便構(gòu)成CRC碼字的發(fā)送序列.用此發(fā)送序列多項式再除以G(X)的余數(shù)一定為0,以方便接收方的校驗.
下面通過一個實例來說明CRC的運行過程.
例如:假設(shè)待發(fā)送的信息位為1011001,則對應(yīng)的多項式P(X)=X6+X4+X3+1,若選取G(X)=X4+X3+1,其對應(yīng)代碼11001,則X4*P(X)=X10+X8+X7+X4,對應(yīng)的代碼為10110010000,首先由模2除法求余數(shù)多項式R(X),過程如下所示:
得到余數(shù)1010,即R(X)=X3+X,對發(fā)送序列P (X)進行改造,生成M(X):
M(X)=P(X)*X4+R(X)=X10+X8+X7+X4+X3+X,即發(fā)送序列為10110011010.也就是說信道上發(fā)送的碼字為10110011010.若傳輸過程無錯,則接收方收到的代碼序列與發(fā)送方相同,所以接收端的校驗過程就是將接收到的碼字多項式除以G(X).若余數(shù)多項式為零則認為傳輸無差錯;若余數(shù)多項式不為零則傳輸有差錯.
如果發(fā)送序列為10110011010,在接收端收到的是10100011010,對接收端來說,如何發(fā)現(xiàn)錯誤,是通過驗證此時的余數(shù)多項式是否為0來的說明,運算如下:
上式運算結(jié)果得到一個0111的余數(shù)多項式,即余數(shù)不為0,說明接收到的信息有錯誤,要求發(fā)送端重發(fā);當(dāng)然,一些特殊場合,可以進一步計算錯誤位是哪位,從而進行修正,這樣的編碼稱為糾錯碼.
CAN總線中要求生成多項式G(X)的首位和最后一位的系數(shù)必須為1,通常規(guī)定的G(x)有:
CAN總線中的CRC校驗采用的多項式比一般CRC校驗要高很多,其檢錯能力更強,誤判率極低,是提高數(shù)據(jù)傳輸質(zhì)量的有效檢錯手段.
〔1〕楊春杰,王曙光.CAN總線技術(shù)[M].北京航空航天大學(xué)出版社,2011.
〔2〕張培仁.CAN總線設(shè)計及分布式控制[M].清華大學(xué)出版社,2012.
〔3〕饒運濤.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)(第2版)[M].北京航空航天大學(xué)出版社,2007.
TP393.1
A
1673-260X(2014)02-0048-02
本論文的相關(guān)基礎(chǔ)性研究已申請專利,專利名稱“自動閥門傳感裝置”,專利號“201320025792·9”