crc 校驗錯誤 E2E中的CRC是怎樣計算的

2021-10-11 06:51:39 字數 2206 閱讀 2464

e2e(end to end)是autosar規範裡規定的一種用於保證資料傳輸正確的概念,屬於功能安全範疇。

下面的例子可以簡單介紹e2e的工作機制,假設汽車內有兩個ecu,a和b,兩個節點之間通過can匯流排進行通訊,a節點要將某一安全相關的資料(比如汽車車速訊號,油門踏板訊號等)傳給b節點,這裡我們假定車速訊號vehspeed = 0x1157,如果採用e2e概念對這個車速資料進行保護,那麼實際上a除了要發給b上邊vehiclespeed資料之外,還要將crc和counter傳給b,b在接受到資料之後也會計算出crc然後將其和收到的進行比較,b會根據校驗的結果進行下一步操作。

那麼現在的問題就是已知資料data=0x1157,計算出crc、counter。

按照autosar規範的要求,e2e存在一系列的profile(配置)每種配置在計算crc時有各自的機制、引數、資料格式,具有非常強的靈活性,使用者可以根據實際需要選擇配置1,或者配置2,目前本人接觸的僅有profile1,所以我們只討論profile1 (⊙﹏⊙)

profile1的一些屬性:crc,counter,timeout monitoring,data id

crc:對資料進行多項式除法計算後的餘數

counter:用於計數每次增加1,a將計數值發給b,b可以依據收到的counter值確定是否接收及時。

timeout monitoring:用來評價counter是否丟失延時等。

dataid:乙個a和b提前定好的特殊數字,一般是16bits,按照e2e_p01dataidmode 的不同分為1a,1b,1c三種細分的配置,計算crc時對dataid做不同處理。

在考慮上述autosar要求後,我們要計算crc的資料最終可寫為data = ;這裡我們假定dataid=0x0009,vehspeed低8位放到陣列靠前位置。

資料填充,從左至右data0-4

總結一下就是下面的過程

1.將counter放入data

2.將dataid(16bits)按照一定規則放入data

3.計算data的crc值

4.將counter增加1

關於crc計算,crc可以理解為多項式做除法後的餘數,按照除數的不同可以分類為crc-8,crc-16,crc-32等,看了一下大概好幾十種。autosar e2e profile 1 規定採用crc-8-sae j1850 ,對應多項式

下面顯示了二進位制除法採用多項式計算0x57: crc=0x8d的過程,實際上0x57按照不同的傳輸順序分為兩種msbit-first(01010111)lsbit-first(11101010)這裡只計算msbit-first的情況。此外這裡數學不是太好不太明白為什麼後邊新增了8個padded bits,但是觀察下來猜測若要計算crc-3要padded 3 bits?crc-16要padded 16 bits??

下邊是c**實現部分,可以看出每計算乙個byte移位8次,如果考慮執行速度的話可以提前計算出0x00-0xff每乙個資料對應的crc先放好,然後再查表,這就是另一種計算crc的方法了,autosar兩種方法都推薦,第一種速度較慢rom占用少,第二種速度快但rom占用多。

另一點要注意的是autosar明確規定profile 1初始值和xor的值均為0x00。假如在某些**中看到u8crc ^= 0xff時一定要留意看一下初始值,若是0xff那就沒問題,異或運算滿**換率就抵消了,否則計算結果錯誤了。

unsigned
online compiler:

擴充套件:其實autosar給出了函式級的配置方案,要對上面的車速訊號做e2e保護只要呼叫e2e_p02protect函式即可,呼叫後的計算的crc會存放在data0,而counter會存放在data1.

參考資料

基於E2P讀寫的CRC 16校驗

在除錯客戶使用平台下 測試出e2p讀crc校驗碼的bug。在客戶重複上電的情況下,讀e2p crc校驗資料不匹配,導致設定預設引數資料進行系統初始化。此問題開始沒有重視,最終測試到時crc校驗出錯。以下是crc原理,演算法可以不用太了解。一 什麼是crc校驗 迴圈校驗碼 jyclic redunda...

crc 校驗錯誤 談談自己對CRC校驗的理解

1 crc是用來幹嘛的?檢測資料傳輸過程中是否出現錯誤 某些位,或某幾位,或者某塊區域位錯誤 2 crc是否能校正資料傳輸中的錯誤?crc只能檢錯,不能糾錯。如果發現錯誤,可根據雙方協議規定要求傳送方重新傳送 3 crc是否能100 檢錯?不是100 檢錯。只能說檢錯的概率比較高。4 crc為什麼檢...

E2 E 原神的故事No 1

安柏一天正在蒙德城外探險,突然發現了乙個寶箱,但是只有點燃前面的 n 個火炬才能點亮寶箱下面的魔紋獲得寶箱。n個火炬的編號為從 1 到 n 按順序排列,而這 n 個火炬的能量分別為 ai 1 i n 現在詢問 m 次,每次告訴你乙個數字 x,安柏能點燃編號從 l 到 r的所有火炬 其中 r l 1 ...