当前位置:首页 > > 汽车ECU开发

前言

项目开始时考虑硬件成本,ECU设计为休眠系统(无SBC,满足休眠条件后系统进入深度休眠状态),则AUTOSAR架构下的模式管理走的Shutdown的Sleep流程。经过一段时间的验证后,发现休眠系统存在系统起不来的风险,则第二版硬件加上一个简单的SBC,ECU改为断电系统(有SBC),则AUTOSAR架构下的模式管理又要重新配置为Shutdown后走OFF流程。在测试过程中也遇到一些问题,最终都被一一解决。本文将接收断电系统的模式管理配置及遇到的问题及解决过程。

MCU:Renesas RH850 F1KM

MCAL:DavinceCFG

BSW:ISOLAR-9.1

正文

1.状态机设计

本系统配置为Flexible EcuM系统,EcuM存在STARTUPONE,STARTUPTWO,RUN,RESHUTDOWN,SHUTDOWN五种状态。

图1-EcuM在BswM中的状态机--BswMMode

ASW请求接口SleepReq == TRUE(同时满足其他,NvMWriteAll成功 && IGNOff等)后BswMMode状态机切换到SHUTDOWN状态后调用EcuMSelectShutdownTarget_OFF_MCU和EcuMGoDown使得EcuM接管程序走OffPreOs Sequence和OffPostOs。

图2:SHUTDOWN阶段

图3:OffPreOS Sequence

图4:OffPostOS Sequence

2.ISOLAR配置BSW

ECU模式管理中主要配置的BswM模块和EcuM模块。EcuM主要去掉休眠系统的配置,BswM模块配置模式管理接口(MRP)、模式仲裁及模式控制。

2.1配置EcuM模块

2.1.1 删除EcuMSleepModes

设计为休眠系统的EcuM模块必须配置EcuMSleepModes。EcuM_Cfg.h文件里面的ECUM_SLEEP_SUPPORT_ENABLE宏需要配置了EcuMSleepModes后才会配置为TURE。我们现在改为断电系统,则必须删除EcuMSleepModes。

2.1.2 配置唤醒源

以下五个唤醒源是系统默认配置的:

EcuMConf_EcuMWakeupSource_ECUM_WKSOURCE_INTERNAL_RESET EcuMConf_EcuMWakeupSource_ECUM_WKSOURCE_EXTERNAL_WDG     EcuMConf_EcuMWakeupSource_ECUM_WKSOURCE_INTERNAL_WDG     EcuMConf_EcuMWakeupSource_ECUM_WKSOURCE_POWER EcuMConf_EcuMWakeupSource_ECUM_WKSOURCE_RESE

其他唤醒源需要根据实际系统设计配置。本项目有一个本地Local唤醒源(IGN)及一个CAN唤醒源。

和休眠系统不一样的地方是,休眠系统的唤醒源直接接到MCU芯片,但是断电系统的唤醒源接到了SBC上用来唤醒SBC,然后SBC给MCU供电。

2.2配置BswM模块

BswM模块的配置最主要的就是配置:一个和SWC交互的MRP(SleepReq,应用层满足休眠条件后请求休眠的模式管理请求接口);EcuMGoDown的Action(BswMode进入SHUTDOWN状态后调用);EcuMSelectShutdownTarget_OFF_MCU的Action(BswMode进入SHUTDOWN状态后调用)。

2.2.1添加Sleep相关的Action

2.2.2 添加ActionList

2.2.3 PreShutdownToShutdown添加Shutdown的ActionList

3.Callout函数实现

EcuM模块提供的Callout函数EcuM_AL_SwitchOff中调用SBC的复杂驱动接口接口(不是AUTOSAR标准接口)CDD_SBC_GoToSleep函数控制SBC给MCU下电。

4.ASW配置

设计一个CDD_WKSM SWC模块来专门管理应用层的休眠唤醒功能。CDD_WKSM模块设计一个Pport设置当前应用层是否满足休眠条件(SleepReq == TRUE)。

4.1 添加应用请求休眠接口

4.2 CDD_WKSM_Init中清除预留唤醒源

系统每次被唤醒后如果没有检测到唤醒源,会默认设置一个Reset的唤醒源。因为系统休眠后立即被复位了,复位起来后最好将默认的唤醒源都清除掉。

4.3 设置唤醒事件

在休眠管理模块中检测和设置唤醒事件。

5.预计效果

满足IGN == IgOff & SleepReq == TRUE后系统进入了断电状态。

6.总结

AUTOSAR架构下的模式管理是SWC - BSW - ECUM三方交互的一个过程,SWC请求,BSW仲裁后调用ECUM的请求接口,ECUM完成最后的执行。

7.问题分析

测试过程中遇到了一个奇怪现象:IGOff后,ASW发送SleepReq请求后,ECU确实下电了,一位一把成功到位,But,在EcuM_AL_SwitchOff函数中打了一个断点后重新测试,居然没有跑到EcuM_AL_SwitchOff函数中ECU就自己下电了。

最后分析是因为EcuM_SelectShutdownTarget配置成了Reset,最后OffPostSequence走了EcuM_AL_Reset流程,执行了Mcu_PerformReset,这个时候因为IG电下了,SBC也没有唤醒源,看上去和EcuM_AL_SwitchOff的现象一样。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭