前言
E2E(End-to-End)保護存在于安全性較高的信號,在信號傳遞的過程中,受軟硬件的影響,發送端和接收端的數據可能不一致,此時E2E的作用就體現出來,系統可以快速檢測出E2E異常,以便做出相應的異常處理。
本文以常用的Profile1為例,介紹相關的定義的和使用
E2E的依賴:E2E會調用CRC中的函數,例如Crc_CalculateCRC8
E2E Development Errors
E2E_E_INPUTERR_NULL(0x13):至少有一個指針參數是NULL指針
E2E_E_INPUTERR_WRONG(0x17):至少有一個輸入參數錯誤,例如超出范圍
E2E_E_INTERR(0x19):發生了內部庫錯誤(例如,程序流監控檢測到的錯誤,違反了不變式或后置條件)
E2E_E_WRONGSTATE(0x1A):函數在錯誤的狀態下執行
Type definitions類型定義
本章定義了對調用方可見的E2E庫定義的數據類型。
下面顯示的一些屬性定義了數據偏移量。偏移量的定義規則如下:
偏移量以位為單位,
在一個字節中,位從0往上編號,第0位是最低位(與微控制器或總線端序無關)。
E2E_P01ConfigType
CounterOffset:Counter的位偏移。CounterOffset應為4的倍數。在變體1A、1B和1C中,CounterOffset為8。
CRCOffset:CRC的位偏移量。偏移量應為8的倍數。在變體1A、1B和1C中,CRCOffset為0。
DataID:兩字節,根據具體要求來定,每個Group的Data Id都可能不一樣。
DataIDNibbleOffset:DataID的高字節的low nibble位偏移量。只有當DataIDMode = E2E_P01_DATAID_NIBBLE時,E2E庫才會使用該參數(否則會被E2E Library忽略)
DataIDMode:Data ID的使用方式,包括both bytes, alternating, or low byte 等,在后面介紹
DataLength:數據的長度,以位為單位。該值應為8的倍數。DataLength包含Checksum和Counter
MaxDeltaCounterInit:兩個連續接收到的有效數據的兩個計數器值之間的初始最大允許間隙。例如,如果接收方獲得計數器為1的數據,并且MaxDeltaCounterInit為1,那么在下一次接收時,接收方可以接受值為2和3的計數器,但不能接受值為4的計數器。
MaxNoNewOrRepeatedData:在正常通信條件下,接收方不希望超過的丟失或重復數據的最大數量。也就是允許counter不變時的次數
SyncCounterInit:在檢測到接收到的計數器的意外行為后,必須用有效計數器(即在允許的鎖定范圍內的計數器)接收的驗證計數器一致性所需的數據數。這個相當于是一個debounce,在故障確認后,需要連續檢測SyncCounterInit配置的值后status才會變為正常狀態
E2E_P01DataIDMode
E2E_P01_DATAID_BOTH:兩個字節包含在CRC(雙字節ID配置)中,這在E2E變體1A中使用。
E2E_P01_DATAID_ALT:包括兩個字節字節中的一個,根據Counter的奇偶性(交替ID配置)交替高字節和低字節。對于偶數Counter,使用低字節。對于奇數Counter,使用高字節。這在E2E變型1B中使用。
E2E_P01_DATAID_LOW:只包含低字節,從不使用高字節。這適用于特定系統中的id為8位的情況
E2E_P01_DATAID_NIBBLE:低字節包含在隱式CRC計算中,高字節的低字節與數據一起傳輸(即顯式包含),不使用高字節的高字節。這適用于最多12位的id。這在E2E型1C中使用。也就是說data id的高字節的低四位是包含在data中的
E2E_P01CheckStateType
LastValidCounter:最近收到的計數器值。如果尚未接收到數據,則該值為0x0。每次接收后,計數器都會使用接收到的值進行更新
MaxDeltaCounter:當前Counter最大差值
WaitForFirstData:如果為true,則表示在接收器初始化或重新初始化后尚未收到正確的數據(具有正確的data ID和CRC)
NewDataAvailable:向端到端庫表示有新的數據可供庫檢查。此屬性由E2E Library調用方設置,而不是由E2E Library。
LostData:自收到最后一個有效數據(消息)以來丟失的數據(消息)數。只有當Status等于E2E_P01STATUS_OK或E2E_P01STATUS_OKSOMELOST時,才會設置該屬性。對于Status的其他值,LostData的值是undefined。E2E_P01CheckStatusType Status數據校驗結果,由Check函數確定
Status:數據驗證的結果,由Check函數確定
SyncCounter:在檢測到接收到的計數器的意外行為后,必須用有效計數器(即在允許的鎖定范圍內的計數器)接收的驗證計數器一致性所需的數據數。也就是故障出現后,重新接收到有效數據的計數。當SyncCounter超過SyncCounterInit后,E2E接收的數據才會變為有效
NoNewOrRepeatedDataCounter:連續接收周期的數量,其中(1)沒有新數據,或(2)數據重復。
E2E_P01CheckStatusType
E2E_P01STATUS_OK:CRC校驗通過,計數器相對于最近收到的狀態為_INITIAL、_OK或_OKSOMELOST的數據加1.這意味著自最后一次正確的數據接收以來沒有數據丟失
E2E_P01STATUS_NONEWDATA:錯誤:Check函數已被調用,但根據通信介質,自上次調用以來沒有新的數據不可用.因此,沒有執行數據的E2E檢查。
E2E_P01STATUS_WRONGCRC:錯誤:根據通信介質已經接收到數據,但是
1.CRC不正確(適用于所有E2E配置文件1)或
2.數據ID高字節的low nibble錯誤(僅適用于E2E_P01DataIDMode = E2E_P01_DATAID_NIBBLE的E2E Profile1)
E2E_P01STATUS_SYNC:NOT VALID:在檢測到計數器的意外行為后,新數據已被接收。數據有一個正確的CRC和一個在預期范圍內的計數器,相對于最近收到的數據,但是計數器的確定的連續性檢查還沒有完成
E2E_P01STATUS_INITIAL:初始化:根據通信介質已經接收到新的數據,CRC是正確的,但這是接收方初始化或重新初始化后的第一個數據,因此計數器還不能驗證
E2E_P01STATUS_REPEATED:錯誤:根據通信介質已經接收到新的數據,CRC是正確的,但是計數器與最近收到的狀態為_INITIAL, _OK或_OKSOMELOST的數據相同。
E2E_P01STATUS_OKSOMELOST根據通信介質已經接收到新數據,CRC是正確的,計數器相對于最近收到的狀態為_INITIAL, _OK或_OKSOMELOST的數據增加DeltaCounter (1 < DeltaCounter = MaxDeltaCounter)。這意味著自最后一次正確/初始接收以來,序列中的一些數據可能已經丟失,但這在配置的公差范圍內。
E2E_P01STATUS_WRONGSEQUENCE:錯誤:根據通信介質已經接收到新的數據,CRC是正確的,但是計數器Delta (DeltaCounter > MaxDeltaCounter)相對于最近收到的狀態為_INITIAL, _OK或_OKSOMELOST的數據太大。這意味著自最后一次正確/初始接收以來,序列中可能丟失了太多數據。
函數定義
E2E_P01Protect
輸入參數:ConfigPtr:E2E_P01的配置參數
輸入輸出參數:
StatePtr:當前E2E_P01通信狀態
DataPtr:要發送的數據指針,經過E2E計算的
E2E_P01Protect函數主要用來根據輸入的DATA和DATA ID等計算Counter和CRC
E2E_P01ProtectInit
初始化E2E_P01ProtectState
E2E_P01Check
輸入參數:Config:E2E_P01的配置參數
Data :需要E2E校驗的數據
輸入輸出參數:State:當前E2E_P01的通信狀態
E2E_P01Check主要用來根據輸入的DATA和DATA ID等校驗數據是否正常
E2E_P01CheckInit
初始化E2E_P01CheckState
E2E_P01MapStatusToSM
將Profile 1的check status映射為通用check status,供E2E狀態機檢查功能使用。
審核編輯:湯梓紅
-
微控制器
+關注
關注
48文章
7566瀏覽量
151604 -
信號
+關注
關注
11文章
2794瀏覽量
76872 -
AUTOSAR
+關注
關注
10文章
362瀏覽量
21623 -
函數
+關注
關注
3文章
4338瀏覽量
62734
原文標題:Autosar E2E及其實現(基于E2E_P01)
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論