點擊上方藍字談思實驗室
獲取更多汽車網絡安全資訊

01
需求描述
ECU在休眠(斷電)狀態下收到第一幀NM報文需要喚醒ECU(對外表現就是電流從低功耗開始上升,但無CAN報文發出),在T wakeup timeout內收到第二幀NM報文需要喚醒網絡(對外表現就是ECU有CAN報文發出)。要求 1s <= T wakeup timeout <= 3s.

02
測試方法
因為要求1s <= T wakeup timeout <= 3s, 則T wakeup timeout可以為[1s, 3s]內的任一值,如果開發工程師實現T wakeup timeout = 2s. 則測試case如下:
第一幀NM報文和第二幀NM報文的間隔時間 | ECU對外表現 |
0.5s, 1s, 1.95s | ECU被喚醒,電流上升且有報文外發 |
2.05s, 2.5s3.5s | ECU被喚醒,電流上升無報文外發 |
注意:ECU在休眠狀態下測試只能通過CANoe工具來測試該需求,通過其他CAN工具(比如TMaster)無法進行測試(TMaster發送一幀NM報文對外表現就把ECU喚醒且喚醒了網絡),在使用CANoe工具發送NM報文時必須勾選如下圖所示的TxSelf-ACK(其他工具如TMaster無此配置選項)。

03
完成需求的方法
這里直接給出方法,只要按照下圖所示配置EcuM中的CAN喚醒源即可(當然前提是CanIf, Cantrcv…等模塊已經配置正確)。

Validation Timeout:配置喚醒源的校驗時間。
Wakeup Source Polling:定義是否需要輪詢檢測該喚醒源。
04
原理詳解
4.1 CanTrcv?接收到第一幀NM報文
如果采用非SBC方案,采用Infineon芯片的ECU在進入休眠狀態后一般會設置Tricore核到Standby狀態,也會設置Can transceiver到Sleep狀態。收到第一幀NM報文后,CanTrcv獲取到遠程喚醒事件,CanTcv的INH引腳會拉高到High Level喚醒ECU,ECU醒來后程序從頭開始運行,CanTcv的Init函數會Check喚醒事件,Check到喚醒事件后會調用EcuM_SetWakeupEvent(ECUM_WAKEUP_SOURCE_CAN). EcuM就會設置ECUM_WAKEUP_SOURCE_CAN狀態到ECUM_WKSTATUS_PENDING狀態。

ECU接收到第一幀NM報文時ECU被喚醒,Can Cantroller處于Stop狀態且CanTrcv處于Sleep狀態,Cantroller不會產生CAN接收中斷,所以第一幀報文不會被軟件處理。
注意:Vector的代碼在CanTrcv_Init就能Check喚醒事件,ETAS的代碼只能在CanTrcv_MainFuncton里面Check喚醒源事件。

4.2 EcuM接收到喚醒事件
EcuM檢測喚醒源狀態到ECUM_WKSTATUS_PENDING后就會調用EcuM_StartWakeupSources().?

EcuM_StartWakeupSources是一個callout函數,一般在EcuM_StartWakeupSources函數中調用CanSM_StartWakeupSource, CanSM_StartWakeupSource正常會設置Can Controller到Normal狀態且設置Can Cantrcv到Normal狀態,同時開始喚醒源的校驗,也就是開始T wakeup timeout的計時。

EcuM同時開始喚醒源的校驗其實就是調用EcuM_CheckValidation函數,EcuM_CheckValidation也是一個Callout函數,一般會在EcuM_CheckValidation函數中調用CanIf_CheckValidation檢測有沒有收到有效的NM報文:
a.如果在T wakeup timeout也就是Validation Timeout時間內收到有效的NM報文就會設置CAN喚醒源事件狀態到ECUM_WKSTATUS_VALIDATED,同時調用ComM_EcuM_WakeUpIndication通知到ComM, ComM一般就會切換到Full狀態,Com模塊就會發送周期報文,CanNm模塊被動喚醒發送進入到RM狀態開始慢發NM報文。
b. 如果在T wakeup timeout也就是Validation Timeout時間內沒有收到有效的NM報文就會設置CAN喚醒源事件狀態到ECUM_WKSTATUS_EXPIRED,EcuM就會調用EcuM_StopWakeupSources(), EcuM_StopWakeupSources是一個callout函數,因EcuM_StopWakeupSources()會調用CanSM_StartWakeupSource, CanSM_StartWakeupSource又會設置Can Controller到Stop狀態且設置CanTrcv到Standby狀態。

4.3 CanTcv接收到第二幀NM報文
EcuM調用EcuM_StartWakeupSources后Can Cantroller和CanTrcv被打開,如果CanTrcv接收到第二幀NM報文,Can controller就會產生接收中斷,Can controller就會調用CanIf_RxIndication將有效報文傳遞到CanIf模塊。這個時候EcuM_CheckValidation -> CanIf_CheckValidation就能完成喚醒源校驗。
4.4 EcuM完成喚醒源校驗
如4.1, 4.2, 4.3章節所述,ECU 在T wakeup timeout時間內收到2幀有效的NM報文,EcuM就能完成喚醒源檢驗,對外就是有CAN報文發出。
05
總結
ECU的休眠喚醒(CAN報文喚醒)需要CanTrcv, Can Controller, CanIf, CanSM, EcuM, Com, ComM這么多模塊的共同參與,非常的復雜,通過一篇文章很難全部都講清楚,本文從T wakeup timeout實際需求出發,簡要的介紹了完成這個需求各個模塊的功能和動作,希望能給大家帶來一些啟發。
來源:汽車嵌入式
?end?

?專業社群?

?精品活動推薦?



更多文章
關于涉嫌仿冒AutoSec會議品牌的律師聲明
一文帶你了解智能汽車車載網絡通信安全架構
網絡安全:TARA方法、工具與案例
汽車數據安全合規重點分析
淺析汽車芯片信息安全之安全啟動
域集中式架構的汽車車載通信安全方案探究
系統安全架構之車輛網絡安全架構
車聯網中的隱私保護問題
智能網聯汽車網絡安全技術研究
AUTOSAR 信息安全框架和關鍵技術分析
AUTOSAR 信息安全機制有哪些?
信息安全的底層機制
汽車網絡安全
Autosar硬件安全模塊HSM的使用
首發!小米雷軍兩會上就汽車數據安全問題建言:關于構建完善汽車數據安全管理體系的建議