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