CAN匯流排中迴圈冗餘校正碼的原理

來源:互聯網
上載者:User

在CAN系統中為保證報文傳輸的正確性,需要對通訊過程進行差錯控制。目前常用的方法是反饋重發,即一旦收到接收端發出的出錯資訊,發送端便自動重發,此時的差錯控制只需要檢錯功能。常用的檢錯碼有兩類:同位碼和迴圈冗餘校正碼。同位碼是一種最常見的檢錯碼,其實現方法簡單,但檢錯能力較差;迴圈冗餘校正碼的編碼也很簡單且誤判率低,所以在通訊系統中獲得了廣泛的應用。下面介紹CAN網路中迴圈冗餘校正碼(即CRC碼)的原理和實現方法。 1 CRC碼檢錯的工作原理          CRC碼檢錯是將被處理報文的位元序列當作一個二進位多項式A(x)的係數,該係數除以發送方和接收方預先約定好的產生多項式g(x)後,將求得的餘數p(x)作為CRC校正碼附加到原始的報文上,並一起發給接收方。接收方用同樣的g(x)去除收到的報文B(x),如果餘數等於p(x),則傳輸無誤(此時A(x)和B(x)相同);否則傳輸過程中出錯,由發送端重發,重新開始CRC校正,直到無誤為止。         上述校正過程中有幾點需注意:①在進行CRC計算時,採用二進位(模2)運演算法,即加法不進位,減法不借位,其本質就是兩個運算元進行邏輯異或運算;②在進行CRC 計算前先將發送報文所表示的多項式A(x)乘以xn,其中n為產生多項式g(x)的最高冪值。對二進位乘法來講,A(x)·xn就是將A(x)左移n位,用來存放餘數(x),所以實際發送的報文就變為A(x)·xn+p(x);③產生多項式g(x)的首位和最後一位的係數必須為1。圖1為CRC校正的工作過程。

          目前已經有多種產生多項式被列入國際標準中,如:CRC-4、CRC-12、CRC-16、CCITT-16、CRC-32等。CAN匯流排中採用的產生多項式為g(x)=x15+x14+x10+x8+x7+x4+x3+1。可以看出,CAN匯流排中的CRC校正採用的多項式能夠校正七級,比一般CRC校正(CRC-4、CRC-12、CRC-16等)的級數(二~五級)要高許多,因而它的檢錯能力很強,誤判率極低,成為提高資料轉送品質的有效檢錯手段。

 

2 CRC序列計算方法

多項式g(x)除法的餘數就是發送到匯流排上的CRC序列。為了實現這個功能,可以使用15位的移位寄存器----CRC_RG(14 : 0)。如果NXTBIT指示位流的下一位,那麼從幀的起始到資料末尾都由沒有填充的位順序給定。CRC序列的計算如下:

CRC_RG=0;                                             //初始化移位寄存器 REPEAT         CRCNXT = NXTBIT  EXOR  CRC_RG(14);        //異或運算         CRC_RG(14 : 1)= CRC_RG(13 : 0);     //寄存器左移1位         CRC_RG(0)=0;                IF CRCNXT THEN              CRC_RG(14 : 0)==CRC_RG(14 : 0)  EXOR   (4599hex);         ENDIF UNTIL   (CRC序列開始或有一錯誤條件)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.