節點喚醒方式
本地喚醒:?喚醒源來源于自身模塊,比如常說的KL15,控制器由KL15線供電,即只能在鑰匙置于“ACC”或者“ON”檔時運行軟件和維持CAN通信
- 對于正在運行的CPU軟件,無論它處在什么狀態,只要Hardware OFF,PMIC供電立即切斷,3.3V,5.0V立即消失,程序立即停止運行,ECU系統進入OFF模式,不存在Sleep模式。該狀態下PMIC也不消耗電能,ECU系統的電能消失是0,比較KL30節點的Sleep模式最節省電能。
- KL15節點沒有下電流程,隨時可能終止運行,沒有時間進入AfterRun模式和做Eeprom最終存儲。WakeUp信號的消失后ECU直接進入OFF模式,不存在Sleep模式,不耗費電能。
- KL30節點有完整的下電流程,軟件根據WakeUp信號的消失可以控制自己按步驟進入AfterRun模式,存儲數據到flash,設置PMIC進入Sleep模式。ECU進入Sleep模式只有PMIC在耗電。AutoSar網絡管理只針對KL30節點。(參考BSWM和ECUM的上下電流程)
遠程喚醒:?喚醒源來源于自身ECU節點所在的網絡報文
- 網絡喚醒是以網絡管理報文為基礎來協同整個網絡“同睡同醒”,CanNM采用分布式的直接網絡管理方式來發送自身節點所需的網絡管理請求及自身網絡管理狀態,并接受來自網絡上其他ECU節點的網絡管理請求與狀態。"同睡同醒"機制的目的是確保所有節點在睡眠和喚醒操作上保持同步。當一個節點準備進入睡眠模式時,它會通過網絡發送一個特殊的同步消息,通知其他節點它即將進入睡眠狀態。其他節點接收到該消息后,會做出相應的響應,以確保整個系統在同一時間進入睡眠狀態。同樣地,當一個節點準備喚醒時,它會發送一個喚醒消息來通知其他節點。其他節點接收到喚醒消息后,會做出相應的響應,以確保整個系統在同一時間喚醒。
- 該狀態機的狀態類型可分為“三大三小”。
“三大”指的是Bus Sleep Mode、Network Mode、Prepare Bus-Sleep Mode;
“三小”則值得是Network Mode下的三個子狀態:Repeat Message State、Normal Operation Mode、Ready Sleep Mode。
- 一旦進入Network Mode,計時器T_NM_Timeout就會啟動,只要成功接收到來自總線上的NM報文或者成功發送至總線NM報文,都會將該計時器T_NM_Timeout重置。一旦T_NM_TIMEROUT 超時,那么就會離開該狀態轉而進入Prepare Bus-Sleep狀態。
- 報文發送與接受狀態
“Bus-Sleep”階段,只接收NM報文喚醒,不發送任何報文;
“Pre-Bus-Sleep”階段,同樣僅允許接收NM報文,對于早已在發送Buffer中的APP報文應發送完畢后立刻停止APP報文;
“Network Mode”模式下,除了在Ready Sleep階段不允許發送NM報文之外,其余階段APP報文與NM報文正常收發;
CanNM報文周期性的向MCU發送,如果一旦一段時間沒有收到,MCU就通過SPI向TJA115的寄存器寫數據,要進入sleep模式,之后TJA1145在向PMIC拉低
如何讓TJA1145進入sleep和wakeup狀態
下圖以TJA1043簡單說明can報文如何使MCU進入到休眠喚醒狀態:
- S1:MCU滿足休眠條件時,通過發送SPI相應指令讓TJA1145進入Sleep狀態;
例如下面的用法:
簡單的指令代碼實現就是下圖:
- S2:TJA1145進入到Sleep狀態后,INH引腳就會拉低,控制5V或者3V關閉電源輸出,間接導致MCU整個系統處理掉電狀態,此時TJA1145始終處于供電狀態(由于BAT始終有電),整個ECU成功進入到休眠狀態;
- S3:TJA1145雖然處于Sleep狀態,屬于極低功耗狀態,同步也檢測著網絡是否存在有效喚醒源;
- S4:當TJA1145發現有效喚醒源之后,就會自動從Sleep狀態切換成Standby狀態,在Standby狀態下INH引腳拉高,此時5V與3V便會正常輸出,從而MCU被正常供電,程序開啟正常運行;