導讀:CRC校驗(循環(huán)冗余校驗)是數據通訊中最常采用的校驗方式。CAN協(xié)議中,總線通信節(jié)點也常采用CRC算法對各種總線傳輸的數據進行校驗。CRC8校驗在整車通信系統(tǒng)中應用比較廣泛,鑒于此,本篇文章將以CRC8校驗為例,介紹在BabyLIN產品中如何使用CRC校驗算法。
CRC校驗原理
在CAN報文中,增加Checksum校驗,能夠用來檢測和校驗數據傳輸或保存后可能出現的錯誤。它是利用除法及余數的原理來作錯誤偵測的。CRC8校驗算法,就是對一幀報文進行校驗和計算的算法。
其主要原理是:在發(fā)送節(jié)點,根據要傳送的數據序列,以一定的規(guī)則產生一個校驗用的校驗碼(CRC碼),附在原始報文中,構成一個新的數據序列,然后發(fā)送出去。在接收節(jié)點,根據報文信息和CRC碼之間遵循的規(guī)則進行檢驗,校驗采用計算機的模二除法(即生成多項式)做異或運算,進行異或運算時除數和被除數最高位對齊,進行按位異或運算,若最終的數據能被除盡,則傳輸正確;否則,傳輸錯誤。
CRC算法實現
在自定義CRC算法中,CRC算法在線計算工具中需要填寫以下六項參數。(具體的CRC算法代碼實現這里不做展示)
1.寬度位數:CRC校驗結果的比特數。支持 8位,16位,32位和 64位。
2.多項式POLY:生成公式的簡寫,以16進制表示。忽略最高位的"1"。
3.初始值INIT:算法初始預置值,以16進制表示。
4.輸入數據反轉REFIN:輸入數據的每個字節(jié)是否按位反轉。
5.輸出數據反轉REFOUT:在計算后之后,結果輸出之前,整個數據是否按位反轉。
6.結果異或值XOROUT:計算結果與此參數異或后得到最終的CRC值。
BabyLIN應用與驗證
在BabyLIN產品的SDF程序編寫中,在SessionConf軟件的Signalfunctios中定義了CRC算法的實現。具體的CRC算法實現所要設置的參數值[*4][*5][*6][*11]和CRC算法在線計算工具基本一致。如下圖CRC8算法實現所示,實際中選擇具體的報文幀[*0]進行CRC校驗即可,報文中進行CRC校驗的數據序列[*1][*2][*7][*8][*9][*10],以及CRC校驗值存放位置[*3]均可根據實際情況設置。
Signalfunctios中CRC-8 Bit實現具體需要設置的參數項的含義解釋如圖:
導入含有CRC算法的SDF程序,在BabyLIN產品中建立與ECU的通信,得到CRC算法實現結果,可以看出,得到的校驗值與CRC算法在線計算工具中的計算結果一致。
結語
通過在BabyLIN產品中實現CRC算法,我們可以確保數據傳輸的準確性和可靠性。通過合理設置CRC算法的參數,以及正確應用在數據傳輸過程中,我們可以大大提高數據傳輸的穩(wěn)定性,從而為各種通信系統(tǒng)的正常運行提供重要保障。未來,我們還將在總線通信中繼續(xù)探索和應用更先進的校驗算法和技術,并在BabyLIN產品中進行實際應用。
審核編輯 黃宇
-
總線
+關注
關注
10文章
2881瀏覽量
88085 -
LIN
+關注
關注
4文章
216瀏覽量
40283 -
CRC算法
+關注
關注
0文章
15瀏覽量
8853
發(fā)布評論請先 登錄
相關推薦
評論