前言
最近在做CAN網絡管理的工作,發現網絡休眠(關閉)后在ECU系統沒有休眠/下電前如果又收到了NM報文,ECU的網絡沒有被重新喚醒(開啟),ECU系統也沒有結束下電(Shutdown)流程,而是直接下電后再被喚醒,而不是我們期望的在PreShutdown到Shutdown階段收到NM報文重回到Startup階段。
正文
1.網絡休眠時的相關系統狀態
在本地喚醒源(Local wake up source,一般是IGN等硬線信號)Disable掉后,User會調用ComM_RequestComMode請求ComM進入到NoCom狀態,如果這個時候沒有接收到NM報文,且沒有收到診斷請求ComM會切換到NoCom狀態,這個時候ComM會調用CanSM_RequestComMode(network:=
我們具體來看CanSM對Can Transceiver的操作,以及此時Transceiver的狀態。
CanSM-->CanIf-->CanTrcv最終會拉低TJA1043收發器的STB_N腳,這個時候TJA1043收發器的INH腳是處于高電平狀態。
TJA1043收發器處于Standby mode時的報文收發功能是關閉的,也就是收發器在Standby mode下是不能收發報文的。
所以這個時候,ComM處于NoCom狀態,NM處于Bus Sleep狀態,就算這個時候Can-Bus上有NM報文過來,Can Transceiver根本就收不到,也就是不可能讓ECU系統狀態機從Preshutdown跳轉到Startup。
那能讓Can Transceiver別不要進入到Standby Mode么?-- 不能,因為ComM進入NoCom后CanSM-->CanIf-->CanTrcv設置Transceiver進入到Standby mode這個過程是AUTOSAR靜態代碼自動實現的,我們不可能去改靜態代碼。
所以我們該怎么做才能實現網絡關閉后ECU沒有休眠前網絡喚醒?
2.網絡休眠后重新喚醒網絡需要做的準備工作
要實現網絡關閉后ECU沒有休眠前網絡喚醒需要以下必要操作:
1)配置CanIf和EcuM的Wake up validation功能。
2)User判斷Can Transceiver進入到Standby模式后,通過CanIf_SetTransceiverMode --> CanTrcv_SetTransceiverMode設置收發器到Sleep模式。
軟件設置Can收發器到Sleep模式后通過硬件設計保證INH腳在Sleep模式是以低電平狀態輸入到MCU。
3)Can收發器進入Sleep模式后如果收到CAN報文就會使得INH腳切換到High電平狀態,User通過判斷INH腳從Low電平狀態跳變為High狀態來得知Can-Bus收到了報文,這個時候通過調用CanIf_SetTransceiverMode --> CanTrcv_SetTransceiverMode設置Can Transceiver到Normal狀態,這樣Can Transceiver就能接收到報文了,報文就能到達CanIf模塊。
4)允許網絡通信CommunicationAllowed=TRUEComM,這樣通過ComM_EcuM_WakeUpIndication(ChX)這個條件就能使得ComM進入到FullCom狀態,如果收到的是NM報文,就能維持住網絡。
3.總結
想要實現網絡關閉但ECU沒有休眠前網絡喚醒需要通過檢測TJA1043收發器的INH腳的電平狀態來判斷接收到Can報文,然后通過EcuM和CanIf的喚醒源校驗(NM報文校驗)功能來觸發ComM模塊切換到FullCom狀態,最后ComM進入FullCom后調用CanSM接口喚醒網絡,同時NM狀態進入到Network Mode的Repeat Message State,整個網路開啟。
審核編輯:劉清
-
收發器
+關注
關注
10文章
3428瀏覽量
106004 -
AUTOSAR
+關注
關注
10文章
362瀏覽量
21588 -
ecu
+關注
關注
14文章
886瀏覽量
54504 -
CAN網絡
+關注
關注
1文章
44瀏覽量
16937
原文標題:網絡關閉但ECU沒有休眠前如何網絡喚醒
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論