知薦 | AUTOSAR基礎篇之EcuM
前言
ECU是怎么啟動或關閉的呢?
ECU啟動方式有沒有一般規律呢?
按照AUTOSAR標準,ECU啟動過程又可分為哪幾個階段呢?
。。。。。。
正文
EcuM模塊總體介紹
主要功能
Startup 初始化流程狀態管理;
ECU運行狀態管理;
ShutDown流程狀態管理;
Sleep流程狀態管理
Wakeup Source管理;
總狀態機(Flexible 與 Fixed)
Flexible 總狀態機,如下圖2-1所示:
Fixed 總狀態機,如下圖2-2所示:
Startup Sequence : 完成啟動過程的初始化;
Run Sequence :正常運行及退出運行狀態階段
ShutDown Sequence:shutdown 或Reset ECU的階段;
Sleep Sequence:ECU休眠階段;
Wakeup Sequence: ECU 驗證喚醒源階段;
Startup Sequence
STARTUP I
EcuM_AL_DriverInitZero:完成無需OS支持的底層硬件驅動的初始化或者其他低水平的初始化(無需postconfig),將這部分驅動的初始化稱為Init Block 0;
EcuM_AL_DriverInitOne:完成無需OS支持的底層硬件驅動的初始化或者其他低水平的初始化,將這部分驅動的初始化稱為Init Block 1;
STARTUP II
EcuM_AL_DriverInitTwo :需要OS支持但是無需使用NVM的BSW模塊初始化,并將此部分驅動的初始化稱為Init Block II;
EcuM_AL_DriverInitThree:需要OS支持同時也需要使用NVM的BSW模塊初始化,并將此部分驅動的初始化稱為Init Block III;
RUN Sequence
RUN II
通過調用函數ComM_CommunicationAllowed來使得相應的通信通道允許通信;
在該階段,EcuM將允許保持一個最小的運行事件EcuMRunMinimumDuration,以便讓SW-C有機會向EcuM模塊請求RUN Request;
在該階段也需要進行休眠總線的喚醒源驗證工作;
除非沒有通信請求,否則ComM不會釋放RUN Request,也就不會退出RUN II階段;
RUN III
在RUN III階段,如果Sw-C請求PostRun,那么就會停留在該狀態,SW-C可以運行其相應的代碼如存儲重要的數據等,直至釋放PostRun Request;
若在該階段存在RUN Request,那么就會立刻跳回到RUN II階段;
若既不存在RUN Request,也不存在PostRun Reqest,那么就會直接進入到ShutDown階段中的PreShutdown階段;
ShutDown Sequence
De_Init所有的SW-C,同時保證通信協議棧處于關閉狀態。
清除所有的Wakeup Event;
關閉Dem模塊;
根據不同的ShutDown目標進入不同的狀態(Sleep或者OFF或者Reset);
ShutDown Target
OFF:CPU掉電;
RESET:這屬于一個暫態,CPU Reset;
Sleep:CPU處于低功耗狀態,未掉電;
Go Sleep
調用NvM_WriteAll函數完成寫操作,同時開啟NVM寫超時計數器;
調用函數EcuM_EnableWakeupSources使能Wake up事件接收;
在該階段,OS并沒有關閉,處于正常Running狀態;
若此階段存在Pending Wakeup Event,則直接調用函數NvM_CancelWriteAll取消寫操作,然后直接跳轉Wakeup階段的Wakup Validation子狀態;
當Nvm_WriteAll成功執行完或者寫超時,則直接進入到Sleep階段;
Go OFF I
僅設置LIN的通信狀態為FALSE;
完成ComM,BswM的Deinit操作;
調用NvM_WriteAll函數完成寫操作,并開啟寫超時計數器;
等待NvM寫成功或者NvM寫超時,調用函數ShutdownOS關閉OS;
在ShutDown OS的過程中通過shutdown hook函數調用EcuM_ShutDown來進入OFF II階段;
Go OFF II
如果ShutDown Target是OFF,則調用Callout函數EcuM_AL_SwitchOff來直接斷掉CPU供電;
如果ShutDown Target是RESET,則調用Callout函數EcuM_AL_Reset進而調用MCAL標準函數Mcu_PerformReset來重啟CPU;
Sleep Sequence
Sleep I
Sleep II
Wakeup Sequence
Wakeup One:
Wakeup Validation
Wakeup Reaction:
Wakeup Two:
Wakeup I
設置MCU模式為Normal Mode;
抑制當前pending的Wakeup Event;
調用函數EcuM_AL_DriverRestart重新啟動驅動,主要初始化Block I與Block II;
使能Run Reqest以及PostRun Request;
解鎖Scheduler并可能重新運行OS;
Wakeup Validation
獲取當前Pending Wakeup Event并調用函數EcuM_ValidateWakeupEvent開啟驗證;
如果validate超時,則可以通過調用函數EcuM_StopWakeupSources停止驗證工作;
在該階段,存在以下5種喚醒源在任何時刻都無需驗證:
WKSOURCE_POWER;
WKSOURCE_RESET
WKSOURCE_INTERNAL_RESET;
WKSOURCE_INTERNAL_WDG ;
WKSOURCE_EXTERNAL_WDG;
Wakeup Reaction
根據event Validation之后的結果選擇進入不同的階段,一種是驗證有效,進入RUN II階段,另外一種是驗證無效,進入Go Sleep階段;
Wakeup II
如果是從Sleep階段跳轉至該階段,則首先要調用Dem_Init函數來完成Dem模塊初始化,因為是新一輪operation cycle;
如果是從Startup階段跳轉至該階段,則可能需要等待NvM readall操作完成;
最后可直接跳轉至RUN II階段直接運行;
常用函數接口
表3 EcuM模塊常用函數列
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















