文章目录
- 前言
- 一、ESH是什么?
- 二、基于BswM管理的ECU状态切换流程
- 1.ECU启动
- 2.ECU关闭
- 总结
前言
BswM – 基础软件模式管理模块,
它的职责是基于简单规则的BSW模块仲裁来自应用层sw - c或其他模块的模式请求,并根据仲裁结果进行相应的操作。
BswM与其他模块的接口交互如下图
BswM模块的实现是基于第三方工具DavinCi配置生成,具体包含了模块初始化管理,通信控制管理,ECU状态控制管理,用户定义的模式管理服务。本章讲述ECU状态控制管理。
一、ESH是什么?
ESH(Ecu State Handling )ECU状态控制。BswM定义了各种Rule来控制ECU的状态,
Ecu State Handling拥有12个Rule,每个Rule中包含不同的Expression,当表达式Expression成立时,会执行该Rule下相应的Action。
每个Rule包含一个Expression,它对Rule中所要执行的操作列表Action List起决定性作用。
每个Rule中都包含一个操作列表Action List,每个列表包含了多个Action。当Rule中表达式Expression成立时,执行操作列表中的任务。
下图是DaVinCi编辑界面展现出来的Rules。
二、基于BswM管理的ECU状态切换流程
1.ECU启动
StartUp:
当ECU一上电进行初始化,ESH处于STARTUP模式,ECU处于Init状态。
WarkUp:
1) ESH处于WAKEUP模式(ESH_InitToWakeup ),ECU处于Wakeup状态。
2) 当没有正在处理的NvM指令,定时器NvM_CancelWriteAllTimer归零,允许通信,执行Dem_Init,启动自运行请求计时器,ESH进入RUN模式,ECU进入Run状态。
3) 当没有有效的唤醒源时,ESH直接进入SHUTDOWN模式(ESH_InitToWakeup -> ESH_WakeupToPrep),ECU处于Prepare Shutdown状态。
Run:
1) ESH处于RUN模式 (ESH_InitToWakeup -> ESH_WakeupToRun),ECU处于Run状态。
注: ESH_WakeupToRun中调用了ESH_DemInit 来执行初始化DEM。
2) 当没有运行请求以及所有频道无通信或者请求了KillAllRunRequest,则不允许通信,ECU清除有效的唤醒事件,
ESH进入POSTRUN模式(ESH_WakeupToRun -> ESH_RunToPostRun -> ESH_RunToPostRunNested),ECU进入Postrun状态。
PostRun:
1) ESH处于POSTRUN模式(ESH_WakeupToRun -> ESH_PostRun ),ECU处于Postrun状态
2) 当有运行请求或接收到有效唤醒事件或正在发生通信请求和释放“Kill All Run Request Port”,允许通信,ESH进入RUN模式(ESH_PostRun -> ESH_PostRunNested ),ECU进入Run状态。
3) 当满足postrun request == released或者请求KillAllRunRequest”,执行Dem_Shutdown,进入SHUTDOWN模式
(ESH_PostRun -> ESH_PostRunToPrepNested ),ECU进入Prepare Shutdown状态。
2.ECU关闭
Prepare Shutdown:
执行NvM全部写入,启动NvM_WriteAllTimer定时器,ECU进入Wait for NvM状态(ESH_PrepToWait)。
Wait for NvM:
1)当没有正在处理的NvM指令或者定时器NvM_WriteAllTimer归零,定时器WriteAllTimer停止,执行MCU下电操作EcuM_GoDown(ESH_WaitToShutdown)。
2)当没有正在处理的NvM指令或者定时器NvM_WriteAllTimer归零,进入EcuM的低功耗模式
3)当有效的唤醒事件发生和释放“KillAllRunRequest”, 定时器WriteAllTimer停止,开启定时器NvM_CancelWriteAllTimer,
取消所有写操作NvM_CancelWriteAll,进入WAKEUP模式(ESH_WaitToWakeup)。ECU进入Wakeup状态。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了ESH的理论知识,DaVinCi提供了实现的具体办法。