前言
最近遇到一個特殊需求:在ECU系統休眠后需要通過網絡管理報文和診斷報文喚醒網絡,但是應用報文不能喚醒網絡。通常情況下,在ECU系統休眠后,AUTOSAR架構中只能配置通過網絡管理報文喚醒網絡或者所有報文都能喚醒網絡,沒有單獨的診斷報文喚醒網絡的配置。那在AUTOSAR架構下如何來實現這個功能了?
本文先詳細介紹這個需求在AUTOSAR架構下遇到的問題,然后再給出一個具體的解決辦法。
Note: 使用Vector的工具,以及TJA1043的CAN收發器。
正文
1.面臨的問題
1.1 TJA1043的INH腳喚醒事件
ECU系統休眠后TJA1043的INH腳處于floating高阻態,系統休眠后通過硬件外部電路下拉到低電平狀態/Low-level,ECU系統休眠前把TJA1043的INH腳配置為喚醒腳,系統休眠后如果收到任意的CAN報文,TJA1043的INH腳會被拉高,產生CAN收發器的硬件喚醒事件(Low-Level to High-Level)。如果ECU系統是斷電系統,那么INH腳應該接在SBC上,因為SBC是常電狀態,檢測到INH的喚醒事件后就會給ECU-MCU供電,MCU冷啟動。如果是ECU系統是常電系統,INH腳應該接到MCU的一個中斷喚醒腳上,檢測到INH的喚醒事件后,中斷喚醒MCU,MCU中的軟件可以選擇繼續跑,也可以通過軟件Reset后重新熱啟動。
參考文章:關于CanTrcv模塊的幾點思考
總之,無論是斷電系統還是常電系統,在ECU系統休眠后,任意的CAN報文都能喚醒ECU。
1.2 EcuM配置網絡喚醒
實現網絡喚醒,需要在EcuM模塊中配置喚醒源,同時配置喚醒源檢測。
開啟EcuM的網絡喚醒源校驗Validation后需要User實現三個Callout函數函數:
1) EcuM_StartWakeupSources(EcuM_WakeupSourceType);
2) EcuM_StopWakeupSources(EcuM_WakeupSourceType);
3) EcuM_CheckValidation(EcuM_WakeupSourceType);
參考文章:AUTOSAR架構下關于CanNm的幾點思考
1.3 CanIf配置喚醒報文過濾
CanIf中可以配置Wakeup Check Valition,有兩種配置可選:
1)所有報文可以通過校驗
2)只有NM報文可以通過校驗
1.4ComM網絡喚醒
EcuM調用CanIf接口校驗網絡喚醒源成功后,EcuM就會調用ComM_EcuM_WakeUpIndication請求通信,ComM在CommunicationAlllowed后就會調轉到Full Com狀態開啟網絡。
參考文章:AUTOSAR網絡通信問題分析
1.5診斷報文喚醒面臨的問題
我們的需求是:在ECU系統休眠后需要通過網絡管理報文和診斷報文喚醒網絡,但是應用報文不能喚醒網絡。
但是從上文中我們可以得知:
1)如果CanIf配置為所有報文可以校驗通過,那么應用報文也會通過校驗,從而喚醒網絡。
2)如果CanIf配置為只有NM報文可以通過校驗,那么診斷報文也就不能通過校驗, 從而診斷報文不能喚醒網絡。
3)只要ECU被喚醒后,因為程序已經跑起來了,理論上肯定可以讓診斷報文來喚醒網絡的,但是在AUTOSAR架構下沒有提供這個配置,代碼框架已經被限制,要實現這個功能就不知道在哪里實現。
也就是說,在AUTOSAR架構下按通常配置是無法實現ECU系統休眠后需要通過網絡管理報文和診斷報文喚醒網絡,但是應用報文不能喚醒網絡的。
2.解決的辦法
如果能想辦法在EcuM調用CanIf_CheckValication的時候能讓診斷報文通過校驗(NM報文也通過校驗,應用報文不能通過校驗)就能解決這個問題。
審核編輯 :李倩
-
收發器
+關注
關注
10文章
3438瀏覽量
106070 -
AUTOSAR
+關注
關注
10文章
363瀏覽量
21625 -
ecu
+關注
關注
14文章
890瀏覽量
54578
原文標題:ECU系統休眠后通過診斷報文喚醒ECU且喚醒網絡
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論