前言
關于CAN收發器參與下的ECU休眠喚醒問題我們已經寫過很多文章,<

環境
AUTOSAR工具鏈:Vector
Hardware Platform: Infineon Tricore
注:本文章引用了一些第三方工具和文檔,若有侵權,請聯系作者刪除!
正文
ECU在休眠(斷電)狀態下收到第一幀NM報文需要喚醒ECU(對外表現就是電流從低功耗開始上升,但無CAN報文發出),在T?wakeup timeout內收到第二幀NM報文需要喚醒網絡(對外表現就是ECU有CAN報文發出)。要求 1s?<= T wakeup timeout <= 3s.
?

因為要求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無此配置選項)。

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

Validation Timeout:配置喚醒源的校驗時間。
Wakeup Source Polling:定義是否需要輪詢檢測該喚醒源。
如果采用非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喚醒源事件。

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狀態。
?

EcuM調用EcuM_StartWakeupSources后Can Cantroller和CanTrcv被打開,如果CanTrcv接收到第二幀NM報文,Can controller就會產生接收中斷,Can controller就會調用CanIf_RxIndication將有效報文傳遞到CanIf模塊。這個時候EcuM_CheckValidation ->?CanIf_CheckValidation就能完成喚醒源校驗。
如4.1, 4.2, 4.3章節所述,ECU 在T wakeup timeout時間內收到2幀有效的NM報文,EcuM就能完成喚醒源檢驗,對外就是有CAN報文發出。
ECU的休眠喚醒(CAN報文喚醒)需要CanTrcv, Can Controller, CanIf, CanSM, EcuM, Com, ComM這么多模塊的共同參與,非常的復雜,通過一篇文章很難全部都講清楚,本文從T?wakeup timeout實際需求出發,簡要的介紹了完成這個需求各個模塊的功能和動作,希望能給大家帶來一些啟發。
End
「汽車電子嵌入式在CSDN上同步推出AUTOSAR精進之路專欄,本專欄每個模塊完全按實際項目中開發及維護過程來詳細介紹。模塊核心概念介紹、實際需求描述、實際工程配置、特殊需求介紹及背后原理、實際工程使用經驗總結。目的是讓讀者看完每一個章節后能理解原理后根據需求完成一個模塊的配置或者解決一個問題。」
點擊文章最后左下角的閱讀原文可以獲取更多信息
或者復制如下鏈接到瀏覽器獲取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
文末福利
2.為便于技術交流,創建了汽車電子嵌入式技術交流群,可盡情探討AP,CP,DDS,SOME/IP等前沿熱點話題,后臺回復“加群”即可加入;
注:本文引用了一些第三方工具和文檔,若有侵權,請聯系作者刪除!
推薦閱讀
汽車電子嵌入式精彩文章匯總第一期:20210530-20230703
汽車電子嵌入式精彩文章匯總第2期
TC3xx芯片GTM模塊-CMU,CCM,TBU詳解
TC3xx芯片GTM模塊-TOM詳解
AUTOSAR架構下PWM模塊配置實踐
TC3xx芯片GTM模塊-TIM詳解
AUTOSAR架構下ICU模塊配置實踐
TC3xx芯片電源管理系統PMS詳解
TC3xx DMA模塊詳解
TC3xx芯片SMU模塊詳解
如何監控TC3xx芯片PFlash的ECC錯誤
TC3xx芯片RAM的錯誤檢測
TC3xx芯片的總線內存保護
AUTOSAR架構下MCAL Modules軟件分區問題分析
AUTOSAR架構下內部看門狗復位檢測
TC3xx芯片時鐘監控
TC3xx芯片電壓監控和溫度監控
嵌入式基礎:環形緩沖區ring buffer
【OS】AUTOSAR架構下的中斷和異常向量表
【OS】AUTOSAR Os是如何啟動第一個Task的
【OS】AUTOSAR OS如何實現Task搶占
【OS】AUTOSAR OS系統調用產生Trap的過程詳解
編譯鏈接專題第1篇-make和makefile介紹
編譯鏈接專題第2篇-初識makefile結構
編譯鏈接專題第3篇-初識makefile中的偽目標
編譯鏈接專題第4篇-變量和變量的不同賦值方式
編譯鏈接專題第5篇-預定義變量的使用
編譯鏈接專題第6篇-變量的高級主題(上)
編譯鏈接專題第7篇-變量的高級主題(下)
編譯鏈接專題第8篇-條件判斷語句
End
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,都是我最大的動力!
汽車電子嵌入式
微信掃描二維碼,關注我的公眾號