首页 > 汽车技术 > 正文

ECU的上下电都在做什么

2021-03-03 10:48:40·  来源:汽车ECU开发  作者:eng2mot  
 
ECU的启动首先肯定是从芯片的BootROM开始,之前也写过英飞凌Tricore系列的启动流程(感兴趣回戳—> )。当主芯片内核初始化完之后,软件初始化需要做什么呢? 在现在的汽车ECU开发中,大部分都慢慢引入AUTOSAR架构,所以在AUTOSAR架构中,软件的上下电流程是怎
ECU的启动首先肯定是从芯片的BootROM开始,之前也写过英飞凌Tricore系列的启动流程(感兴趣回戳—> )。当主芯片内核初始化完之后,软件初始化需要做什么呢?
在现在的汽车ECU开发中,大部分都慢慢引入AUTOSAR架构,所以在AUTOSAR架构中,软件的上下电流程是怎么做的呢?
在AUTOSAR架构中,软件的上下电流程主要由EcuM来管理,EcuM又分为两种,分别为:
1、Fixed EcuM:用于管理ECU固定状态,例如OFF、RUN和SLEPP以及这些状态之间的切换,对于没有特殊需求(例如部分启动或快速启动)的ECU,这已足够了,另外,Fixed EcuM不支持多核ECU。
2、Flexible EcuM:Flexible EcuM功能更强大,灵活度更高,允许一下情况:
    1、部分或快速启动,即ECU以一组有限的功能启动,然后在逐步启动。
    2、交错启动,即ECU最低限度启动,然后启动BSW和SWCs,从而交错BSW和应用程序启动。
    3、支持多核ECU,其中ECU的所有不同核上的不同状态(启动、关闭、休眠、唤醒)均能很好的协调。
EcuM模块所负责的任务包括:
1、EcuM负责BswM,SchM和Autosar OS模块以及一些基本软件驱动程序模块的初始化和反初始化。
2、负责处理不同的ECU状态,包括SLEEP和SHUTDOWN状态。
3、 EcuM还处理ECU的所有唤醒事件,从而区分真实的唤醒事件和不稳定的唤醒事件。
在实际应用中,大部分用的是Flexible EcuM,所以接下来主要针对Flexible EcuM进行介绍。如图1所示,展示了Flexible EcuM的状态机,
图1 Flexible EcuM状态机

STARTUP Phase




STARTUP阶段分为两部分,如图2所示。一部分在OS启动之前,称之为StartPreOS,这部分为初始化OS做基础,如图3所示,这个阶段要尽可能的短,主要设计的接口包括:
1、EcuM_AL_DriverInitZero:主要用于初始化DET模块,让其他模块可以报告任何开发错误,也可以保持为空函数。
2、EcuM_AL_DriverInitOne:主要用于对主芯片的外设进行初始化,例如GPIO、ADC、PWM、ICU等等。

图2 STARTUP阶段
图3 StartPreOS
STARTUP的第二部分,即为即StartPostOS序列,在调用EcuM_StartupTwo之后被激活。下图4显示了ECU初始化中PostOS启动后的顺序,主要包括:
图4 StartPostOS阶段
1、启动BSW Scheduler(SchM)-SchM代表BSW Scheduler。用于加载BSW中TASK的配置信息。
2、初始化BSW调度程序-SchM_Init()是为初始化SchM模块而定义的函数。它用于分配和初始化BSW Scheduler模块要使用的资源。它可以调用OS服务来触发AUTOSAR OS的任务。
3、BswM_Init(),用于初始化BswM模块,为了后续可以正常触发BswM中配置的规则和操作序列。

UP Phase

EcuM启动操作系统并完成SchM和BswM的初始化后,ECU进入UP Phase。当BSW Scheduler启动并调用BswM_Init时,UP Phase开始。此时,内存管理、通信堆栈、软件组件(SW-C)都尚未启动。此阶段由集成商定义,ECU按照集成商的指示从一种状态进入另一种状态,从一种模式进入另一种模式。
集成商首先必须负责NVM的初始化,然后调用NvM_Readall。然后触发BswM中配置的规则,分别完成通信协议栈、诊断协议栈、网络管理等的初始化,这些初始化完后,启动RTE,然后在启动SWC。这样程序就可以正常运行了。

SHUNTDOEN Phase

当程序中下电标志位置位后,开始进入SHUNTDOWN阶段,首先是对将通信相关的进行关闭,以及关闭RTE终止任务的周期调度,然后对SHUNTDOWN一些模块,例如DEM、BswM等。 最后调用 EcuM_GoDown(),在此之中主要是将完成NvM的写入,已经操作SBC的下电。 

SLEEP Phase

在此阶段,不应执行任何代码,但是仍会向ECU提供电源。应该认为这是一种节能状态,以节省能源。ECU能响应有意或无意的唤醒事件。对于意外唤醒事件,EcuM模块提供的协议会忽略意外的唤醒事件。在常规的ECU中,通常不会这个状态。

OFF Phase

当ECU断电时,ECU将进入OFF状态。在此状态下可以通过SBC唤醒。
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026917号-25