【Autosar EcuM】

前言

本文以一个简化的示例看下ECU唤醒休眠的执行流程,通常不同项目因需求不同流程处理都会有所不同,本示例只是其中一种,并不是标准普适的流程。假设ECU休眠采用的是MCU掉电方式,且只有两个唤醒源:CAN和KL15,当有唤醒时两者通过线“或”的关系通知LDO/SBC给MCU上电。示意图如下:
在这里插入图片描述
我们把KL15硬线作为主动唤醒源,CAN作为被动唤醒源,在EcuM中需要配置这两个唤醒源(EcuMWakeupSource),比如分别命名为EcuM_WakeupSource_KL15、EcuM_WakeupSource_CAN,对于CAN唤醒源需要指定对应的ComM通道,对于

主动唤醒(KL15)

KL15硬线拉高后触发LDO/SBC给MCU上电,开始执行初始化,当执行到StartPostOs阶段BswM已经初始化完成并且可以工作时,通过唤醒源判断调用EcuM_SetWakeupEvent(EcuM_WakeupSource_KL15)设置唤醒源为KL15。
在这里插入图片描述
在本示例中可以把这一步作为进入UP阶段的前提条件之一,但如果这里存在设置无效的路径,就不适合这么做,需要在更靠后(EcuM_MainFunction运行起来)的位置进行设置。
当进入UP阶段,各模块任务开始正常执行后,APP或BSW通过ComM_RequestComMode请求ComM进入正常通信状态(FULL_COMMUNICATION),ComM继而通过。
CanSM_RequestComMode请求CanSM进入正常通信状态,CanSM继续通过CanIf控制CanDrv将CAN模块设置为正常工作模式,之后,ComM通过NmIf模块(Nm_NetworkRequest)请求CanNM进入NetworkMode,至此,网络通信打开完毕。
在这里插入图片描述

休眠过程

当APP或BSW不再有通信需求,ComM会切换到READ_SLEEP状态,在此过程中会通过NmIf模块(Nm_NetworkRelease)请求CanNM释放网络,如果外部其它节点网络均满足休眠,CanNM切换到PrepareBusSleep状态时会通知ComM,ComM继而切换到SLIENT_COMMUNICATION,并且控制CanSM也进入静默通信,CanSM通过CanIf设置CAN模块为只收不发模式,当CanNM最终进入BusSleep状态,会再次通知ComM,此时ComM会进入NO_COMMUNICATION,并且通过CanSM及CanIf将CAN通信关闭。最后,等待其它条件(如果有的话)满足后整个ECU即可进入SHUTDOWN下电流程。
在这里插入图片描述

被动唤醒(CAN)

CanTrcv于Standby/Sleep模式下接收到CAN报文后,通过拉高INH通知LDO/SBC给MCU上电,当初始化执行到StartPostOs阶段BswM已经初始化且可工作时,通过唤醒源判断调用EcuM_SetWakeupEvent(EcuM_WakeupSource_CAN)设置唤醒源为CAN。
在这里插入图片描述
同样的,可以把CAN唤醒也作为进入UP阶段的前提条件之一,这里由于只有两个唤醒源,硬线KL15又比较好判断(通常只要初始化完IO口即可读取状态),所以采用非此即彼的逻辑来判断是否是CAN唤醒,如果想通过检测报文来设置CAN唤醒的话,那么判断时机可能要靠后,因为检测报文的话至少要等到CanSM将Can/CanTrcv打开能够正常收取报文才行。
还记得CAN唤醒在配置的时候指定了ComM通道,这时EcuM就会通知ComM有唤醒事件发生,和主动唤醒类似,ComM通过CanSM、CanIf、CanDrv设置CAN模块工作状态,然后再通过NmIf模块(Nm_PassiveStartUp)启动CanNM。
在这里插入图片描述

### AUTOSAR EcuM 模块介绍 #### 功能概述 EcuM(ECU Management)模块作为AUTOSAR系统中的核心组件之一,主要负责管理电子控制单元(ECU)的不同工作状态。该模块确保了ECU能够在各种操作条件下稳定可靠地运行,并支持多种变体类型以适应不同应用场景的需求[^1]。 具体来说,EcuM能够处理如下几个重要方面: - **启动过程**:引导整个系统的初始化流程; - **电源模式切换**:协调各软件组件之间的交互,在低功耗状态下维持必要的功能; - **错误检测与恢复机制**:监控硬件资源并采取适当措施应对潜在问题; - **应用程序生命周期管理**:配合其他基础软件层实现应用级别的激活/去活操作; 这些特性使得EcuM成为连接上层应用程序和底层硬件的关键桥梁,对于构建高效稳定的汽车嵌入式系统至关重要[^3]。 #### 主要函数解析 在实际开发过程中,开发者经常需要调用`EcuM_SetState()`接口来改变当前所处的工作阶段。此方法由BSWM(Basic Software Module Manager)触发执行,并向RTE报告新的状况值,例如: - `ECUM_STATE_STARTUP`: 表明正在经历最初的设置环节; - `ECUM_STATE_APP_RUN`: 标志着已准备好执行用户定义的任务逻辑; - `ECUM_STATE_APP_POST_RUN`: 当前处于结束前准备工作中; - `ECUM_STATE_SHUTDOWN`: 准备关闭所有活动的服务; - `ECUM_STATE_SLEEP`: 进入休眠等待唤醒事件发生; 上述每种情况都对应特定的行为准则和服务请求,从而保障整体架构有序运转[^2]。 ```c // C语言示例展示如何使用EcuM_SetState() void exampleFunction(void){ // 假设条件满足进入睡眠态 if (someConditionMet()){ EcuM_SetState(ECUM_STATE_SLEEP); } } ``` #### 使用教程概览 为了更好地理解和运用EcuM模块,建议按照以下指导原则来进行实践学习: 1. 掌握基本概念及其在整个AUTOSAR框架内的位置关系; 2. 学习通过ARXML文件完成定制化配置选项的选择; 3. 参考官方文档理解各个API的具体用途以及参数含义; 4. 结合实例项目加深印象,熟悉常见编程技巧; 5. 利用仿真平台测试编写好的程序片段,验证预期效果; 遵循以上路径可以帮助初学者逐步建立起关于EcuM的知识体系,为进一步深入研究打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值