前言
在<
Note: 本文使用的AUTOSAR工具為Vector公司的Davinci Configurator,CAN收發器為NXP公司的TJA1043。
正文
1.CanNM狀體機分析
參考文檔:AUTOSAR架構下關于CanNm的幾點思考
CanNM的Repeat Message State(RMS)狀態包括兩個子狀態:NM Normal Transmit State和NM Immediate Transmit State。
從其他狀態進入到NM Normal Transmit State子狀態,Can NM報文沒有快發階段,直接進入到Normal Cyclic報文發送階段。
從其他狀態進入到NM Immediate Transmit State子狀態,Can NM報文有快發階段(快發周期和次數可配置)。
從Bus Sleep Mode進入到NMNormal Transmit State的條件(NM_02):
當ECU處于Bus-Sleep階段時,如果接收到有效的NM報文(ComM調用NM_PassiveStartUp),則會進入到Normal Transmit State。當進入到該階段后,在T_REPEAT_MESSAGE 超時前,ECU將按照T_NM_MessageCycle周期來傳輸報文,同時T_MESSAGE_TIMEOUT也會啟動。
從BusSleep Mode進入到NM Immediate Transmit State的條件(NM_03):
當ECU在Bus-Sleep階段,存在本地喚醒請求時(ComM調用NM_NetworkRequest),ECU應當主動激活網絡,并進入Immediate Transmit State階段,同時將發送的NM報文中的Active Wake up bit置為1。在該狀態下,應當按照N_ImmediateNM_TIMES的次數發送報文周期為T_NM_ImmediateCycleTime的網絡管理報文。
從Pre-Bus Sleep Mode進入到NMNormal Transmit State的條件(NM_15):
在Pre-Bus-Sleep模式下,如果存在遠程喚醒請求(ComM調用NM_PassiveStartUp),則會進入到RMS階段中的Normal Transimit State。同時啟動T_REPEAT_MESSAGE。
從Pre-BusSleep Mode進入到NM Immediate Transmit State的條件(NM_16):
在Pre-Bus-Sleep模式下,如果存在本地喚醒請求,即ComM調用函數接口CanNm_NetworkRequest來進入到RMS中的Immediate Transmit階段,應當按照N_ImmediateNM_TIMES的次數發送報文周期為T_NM_ImmediateCycleTime的網絡管理報文。
小結:
1)當CanNM處于Bus-Sleep或者Pre-Bus-Sleep模式時,如果有本地喚醒事件發生則ComM調用CanNm_NetworkRequest將CanNM狀態機切換到NM Immediate Transmit State,Can NM進入快發狀態。
2)當CanNM處于Bus-Sleep或者Pre-Bus-Sleep模式時,如果有網絡(遠程)喚醒事件發生則ComM調用NM_PassiveStartUp將CanNM狀態機切換到Normal Transimit State,Can NM報文不會有快發階段,Can NM報文周期發送。
問題:本地喚醒事件和網絡喚醒事件是怎么觸發ComM主動和被動喚醒網絡的?
2.ComM狀態機分析
ECU上電或喚醒后,如果檢測到為本地喚醒或其他條件需要ECU進行主動喚醒時,用戶調用ComM接口ComM_RequestComMode請求ComM COMM_FULL_COMMUNICATION使能通信,ComM在接收到請求后,調用 CanSM_RequestComMode()請求CanSM將相應的Can通道狀態切換為FULLCOM,CanSM再通過CanIf切換控制器和收發器狀態,調用如果該通道的NMVariant為FULL,調用NM接口 Nm_NetworkRequest(),NM再調用CanNm接口 CanNm_NetworkRequest請求進入主動喚醒。
ECU上電或喚醒后,如果檢測到為遠程喚醒或其他添加需要ECU進行passive喚醒時,調用 ComM_EcuM_WakeUpIndication(如果ECUM中的wakeup source綁定了ComM通道,則在調用EcuM_CheckWakeup時自動調用),如果通道的NMVariant為FULL或PASSIVE,ComM調用 Nm_PassiveStartUp請求NM進行passive喚醒,并調用 CanSM_RequestComMode()請求CanSM將相應的Can通道狀態切換為FULLCOM。
問題:本地喚醒事件和網絡喚醒事件是怎么觸發ComM主動和被動喚醒網絡的?
答:本地喚醒事件由User檢測后調用ComM_RequestComMode上報給ComM;網絡喚醒事件由EcuM輪詢到喚醒事件后調用ComM_EcuM_WakeUjpIndication上報給ComM。ComM根據事件類型調用Nm_NetworkRequest主動喚醒網絡,調用Nm_PassiveStartUp被動喚醒網絡。
3.解決方案
通過上面的分析我們可以得到解決本文提出的問題的答案:讓診斷報文喚醒ECU后走主動喚醒網絡的路徑,就能實現診斷報文喚醒網絡后有NM報文快發過程的需求。
具體的做法:就是在<
4.總結
ComM | NM | CanNM | NM報文狀態 | |
User調用ComM_RequestComMode | 主動喚醒網絡:調用NM_NetworkRequest | 調用CanNM_NetworkRequest | 從Sleep狀態切換到NM Immediate Transmit State子狀態 | 快發NM報文結束后周期發送NM報文 |
EcuM調用ComM_EcuM_WakeUjpIndication |
被動喚醒網絡:調用 NM_PassiveStartUp |
調用 CanNM_PassiveStartUp |
從Sleep狀態切換到NM Normal Transmit State | 無快發NM報文過程,直接周期發送NM報文 |
審核編輯:湯梓紅
-
收發器
+關注
關注
10文章
3535瀏覽量
106822 -
CAN
+關注
關注
57文章
2812瀏覽量
465831 -
網絡
+關注
關注
14文章
7678瀏覽量
89944 -
ecu
+關注
關注
14文章
899瀏覽量
55195 -
報文
+關注
關注
0文章
38瀏覽量
4113
原文標題:ECU系統休眠后通過診斷報文喚醒ECU且喚醒網絡后快發NM報文
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
電動汽車的ECU進入休眠后,目前有3種喚醒模式,CAN總線和AC電壓的喚醒設計原理是什么?
CANoe:網絡和ECU開發、測試和分析的專業工具
汽車ECU的低功耗高性能實現
CH582M freeRTOS如何實現休眠? 休眠后如何喚醒?
TJA1145ATK配置完成喚醒ID后,發現任意CAN FD報文將足夠其喚醒是怎么回事?
影響報文超時上報的機制有哪些

評論