点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
正文
项目中的ECU硬件设计为休眠系统(无SBC,满足休眠条件后系统进入深度休眠状态),整个项目的模式管理及ECU休眠唤醒功能涉及到EcuM,BswM,SWC三方交互,设计及实现中遇到了不少问题,最终都被一一解决。本文将详细介绍模式管理实现过程中的关键步骤。
MCU:Renesas RH850 F1KM
MCAL:DavinceCFG
BSW:ISOLAR-9.1
在开始系统配置之前先回答以下问题:
1).为什么在硬件上要设计为深度休眠系统?
—减少SBC(System base chip)降低成本,热启动提高启动速度。
2).基于RH850芯片的ECU设计为深度休眠系统后,怎么让系统进入深度休眠状态?
–BswM中维持一个EcuM状态的状态机,当状态机跳转到SLEEP状态后执EcuM_GoHalt和EcuM_SelectShutdownTarget(EcuMSelectShutdownTarget_SLEEP_MCU,SLEEP_MCU)动作后EcuM接管程序,EcuM调用Mcu模块的Mcu_SetMode(Deep_Sleep)进入深度休眠状态。
3).基于RH850芯片的ECU设计为深度休眠系统后,AUTOSAR架构下在哪里设置系统进入深度休眠?
–EcuM没有提供Callout函数让系统设计去设置Mcu进入深度休眠,EcuM在检测到系统满足休眠条件后在Sleep Sequence中直接调用Mcu_SetMode(Deep_Sleep)进入深度休眠。
4).基于RH850芯片的ECU设计为深度休眠系统后,AUTOSAR架构下在哪里及怎么开启唤醒中断?
–EcuM提供EcuM_EnableWakeupSources Callout中调用RH850提供的Mcu_WakeUpFactor_Preparation函数设置唤醒中断。
5).基于RH850芯片的ECU进入深度休眠状态后被唤醒是直接复位还是接着往下跑?
— 芯片特性,直接复位。
6).基于RH850芯片的ECU进入深度休眠状态后被唤醒如果是复位,AUTOSAR架构下在哪里调用Mcu_PerforReset?
— 不用调用Mcu_PerforReset,RH850-F1KM芯片自动从0地址开始运行(相当于复位)。
7).基于RH850芯片的ECU进入深度休眠状态后被唤醒如果是接着跑,AUTOSAR架构下在哪里关闭唤醒中断?
— RH850芯片进入深度休眠后被唤醒会自动复位,所以不用进行关闭唤醒中断的操作。但是,如果是NXP S32K系列的芯片在进入深度休眠后,被唤醒后是接着往下跑的,这个时候在AUTOSAR架构下改怎么去关闭唤醒中断了(目前作者也还没有答案),这个问题留个大家思考。
1.状态机设计
本系统配置为Flexible EcuM系统,EcuM存在STARTUPONE,STARTUPTWO,RUN,RESHUTDOWN,SLEEP五种状态。
图1-EcuM在BswM中的状态机-BswMMode
ASW请求接口SleepReq == TRUE(同时满足其他,NvMWriteAll成功 && IGNOff等)后BswMMode状态机切换到SLEEP状态后调用EcuMSelectShutdownTarget_SLEEP_MCU和EcuMGoHalt使得EcuM接管程序走SLEEP Sequence。
图2-Sleep阶段
2.Davince配置MCAL
DavinceCFG根据硬件设计配置唤醒脚和唤醒中断,需要配置MCAL架构中的Port和MCU模块。Port模块中配置唤醒脚的Pin属性,MCU模块中配置深度休眠模式及其对应的唤醒中断源。
2.1 配置port模块
查看软硬件接口表找到硬件唤醒脚。
Davince中配置Port模块的唤醒Pin的属性。
配置中断唤醒Pin的电平触发模式。
2.2 配置MCU模块
添加一个Mcu深度休眠模式。
添加MCU唤醒Pin。
3.ISOLAR配置BSW
ECU模式管理中主要配置的BswM模块和EcuM模块。EcuM主要配置系统休眠模式及唤醒源信息,BswM模块配置模式管理接口(MRP)、模式仲裁及模式控制。
3.1 添加MCU模块
EcuM模块配置Sleep Mode的时候需要引用到Mcu模块的的信息,所以需要在ISOLAR工程种配置一个Mcu的模块。
ISOLAR工程目录xxxISOLAR_CfgPrjConfigecu_configparamdefs(这个是作者的工程目录)
添加模块UI信息。
新建一个Mcu模块。
3.2 配置OS模块
虽然F1KM是单核系统,但是在配置EcuM模块的时候还是需要在OS配置一个RES_AUTOSAR_ECUM的资源锁,不然在生成BSW的过程中ISOSALR会报错。
3.3 配置EcuM模块
3.3.1 EcuM引用RES_AUTOSAR_ECUM
3.3.2 配置EcuMSleepModes
设计为休眠系统的EcuM模块必须配置EcuMSleepModes。EcuM_Cfg.h文件里面的ECUM_SLEEP_SUPPORT_ENABLE宏需要配置了EcuMSleepModes后才会配置为TURE。
3.3.3 配置唤醒源
以下五个唤醒源是系统默认配置的:
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唤醒源。
3.3.4 引用NormalMcuMode
3.4 配置BswM模块
BswM模块的配置最主要的就是配置:一个和SWC交互的MRP(SleepReq,应用层满足休眠条件后请求休眠的模式管理请求接口);EcuMGoHalt的Action(BswMode进入SLEEP状态后调用);EcuMSelectShutdownTarget_SLEEP_MCU的Action(BswMode进入SLEEP状态后调用)。
3.4.1 添加Sleep相关的Action
3.4.2 添加ActionList
3.4.3 PreShutdownToShutdown添加Sleep的ActionList
4.Callout函数实现
EcuM模块提供的Callout函数EcuM_EnableWakeupSource中调用MCAL提供的标准接口(不是AUTOSAR标准接口)Mcu_WakeUpFactor_Preparation函数设置唤醒中断。
5.ASW配置
设计一个SWC模块来专门管理应用层的休眠唤醒功能。SWC模块设计一个Pport设置当前应用层是否满足休眠条件(SleepReq == TRUE)。
5.1 添加应用请求休眠接口
5.2 SWC中清除预留唤醒源
系统每次被唤醒后如果没有检测到唤醒源,会默认设置一个Reset的唤醒源。因为系统休眠后立即被复位了,复位起来后最好将默认的唤醒源都清除掉。
5.3 设置唤醒事件
在休眠管理模块中检测和设置唤醒实践。
6.实际效果
满足IGN == IgOff & SleepReq == TRUE后系统进入了深度休眠状态。
7.总结
AUTOSAR架构下的模式管理是SWC – BSW – ECUM三方交互的一个过程,SWC请求,BSW仲裁后调用ECUM的请求接口,ECUM完成最后的执行。
更多文章
华为蔡建永:智能网联汽车的数字安全和功能安全挑战与思考
汽车数据合规要点
车载以太网技术发展与测试方法
车载以太网防火墙设计
SOA:整车架构下一代的升级方向
会员权益: (点击可进入)谈思实验室VIP会员
END
微信入群
谈思实验室专注智能汽车信息安全、预期功能安全、自动驾驶、以太网等汽车创新技术,为汽车行业提供最优质的学习交流服务,并依托强大的产业及专家资源,致力于打造汽车产业一流高效的商务平台。
每年谈思实验室举办数十场线上线下品牌活动,拥有数十个智能汽车创新技术的精品专题社群,覆盖BMW、Daimler、PSA、Audi、Volvo、Nissan、广汽、一汽、上汽、蔚来等近百家国内国际领先的汽车厂商专家,已经服务上万名智能汽车行业上下游产业链从业者。专属社群有:信息安全、功能安全、自动驾驶、TARA、渗透测试、SOTIF、WP.29、以太网、物联网安全等,现专题社群仍然开放,入满即止。
扫描二维码添加微信,根据提示,可以进入有意向的专题交流群,享受最新资讯及与业内专家互动机会。
谈思实验室,为汽车科技赋能,推动产业创新发展!
原文始发于微信公众号(谈思实验室):AUTOSAR架构下RH850芯片深度休眠配置实践-Conifig EcuM and BswM