ComM模块架构示意(标准AUTOSAR)
1,概述
Classic AUTOSAR中,通过ComM系统服务实现对通信状态的管理。用户上电唤醒时通过主动请求通信COMM_FULL_COMMUNICATION或被动唤醒通知 ComM_EcuM_WakeUpIndication(),休眠时释放通信请求COMM_NO_COMMUNICATION,ComM接收到请求后通过相应总线的SM模块和NM模块实现对总线通信状态的切换。用户无需再与各个通信总线的状态管理模块和网络管理模块进行交互。
2,模块介绍
-
ComM:通信管理系统服务模块,通过与各通信总线的状态管理模块(如CanSM、LinSM等)和网络管理模块(NM)交互,为用户提供统一、抽象、简洁的通信模式管理方式。
-
NM:AUTOSAR网络管理独立于具体通信总线形式的统一接口模块,内部对接各个具体总线的网络管理模块(如CanNM、LinNM等),同时提供协调各总线同步休眠功能(NM Coordinator functionality)。
-
Com:通信服务,为用户提供基于信号的通信服务。
-
BSWM:BSW管理模块,设立初衷为管理BSW模块状态,提供一个基于rules触发actions的状态管理机制,主要用于管理BSW模块状态,当然也可以用于管理ASW状态。比如可以设置一条rule:当ComM状态为COMM_FULL_COMMUNICATION时执行action:打开相应通道的Com IPdu Groups,这样使能通信时,就不需要再额外的代码去使能相应通道的IPdu groups。
-
xxxNM:xxx通信总线的AUTOSAR网络管理模块,比如CanNM,AUTOSAR提供一种直接分布式的网络管理方式,每个节点都有特定的网络管理报文用于网络管理且每个节点在总线上都是平等的。
-
xxxSM:xxx通信总线的状态管理(包括控制器和收发器的状态管理),比如CanSM,提供总线在FULLCOM、NOCOM、SILIENTCOM等状态之间的切换和监控。
-
xxxIF:提供xxx通信总线的控制器和收发器驱动模块的抽象接口,比如CanIF。
3,ComM与NM关系(NM Variant)
ComM中通道的NMVariant类型决定了ComM是否使用AUTOSAR NM模块去同步网络休眠。只有NMVariant为FULL和PASSIVE的,ComM在改变通道通信状态时才会去同步请求对应通道的NM状态。对于NMVariant为NONE的,只能通过下电通信总线才会休眠,对于NMVariant为LIGHT的,ComM在接收到COMM_NO_COMMUNICATION请求后,经过一个timeout后进入休眠。
4,主要功能调用关系(基于Can)
-
Active startup(本地唤醒)
ECU上电或唤醒后,如果检测到为本地唤醒或其他条件需要ECU进行主动唤醒时,用户调用ComM接口ComM_RequestComMode()请求ComM COMM_FULL_COMMUNICATION以使能通信,ComM在接收到请求后,调用 CanSM_RequestComMode()请求CanSM将相应的Can通道状态切换为FULLCOM,CanSM再通过CanIf切换控制器和收发器状态,调用如果该通道的NMVariant为FULL,调用NM接口 Nm_NetworkRequest(),NM再调用CanNM接口 CanNm_NetworkRequest()请求进入主动唤醒。ComM进入COMM_FULL_COMMUNICATION后,可通过BSWM或手动方式,启动相应通道的Com IPdu Groups,通信开始。
-
Passive startup(远程唤醒)
ECU上电或唤醒后,如果检测到为远程唤醒或其他添加需要ECU进行passive唤醒时,调用 ComM_EcuM_WakeUpIndication()(如果ECUM中的wakeup source绑定了ComM通道,则在调用EcuM_CheckWakeup()时自动调用),如果通道的NMVariant为FULL或PASSIVE,ComM调用 Nm_PassiveStartUp()请求NM进行passive唤醒,并调用 CanSM_RequestComMode()请求CanSM将相应的Can通道状态切换为FULLCOM。
-
Sleep
主动唤醒后,如果ECU需要进入休眠,调用ComM接口ComM_RequestComMode()请求COMM_NO_COMMUNICATION以释放通信请求,COMM在接收到请求后,调用 CanSM_RequestComMode()请求CanSM将相应的Can通道状态切换为NOCOM,如果该通道的NMVariant为FULL,调用NM接口Nm_NetworkRelease()请求NM进入sleep,NM在等待总线同步休眠后(其他节点都停发了网络管理报文准备休眠),进入Bus-Sleep状态,反馈给ComM,ComM进入NOCOM状态,此时ECUM就可以启动休眠流程。
-
...
附1. 参考文献
-
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf R19-11
-
AUTOSAR_SWS_COMManager.pdf 4.2.2
-
AUTOSAR_SWS_ECUStateManager.pdf 4.2.2
-
AUTOSAR_SWS_NetworkManagementInterface.pdf 4.2.2
-
AUTOSAR_SWS_CANNetworkManagement.pdf 4.2.2
-
AUTOSAR_SWS_CANStateManager.pdf 4.2.2
-
AUTOSAR_SWS_CANInterface.pdf 4.2.2
-
AUTOSAR_SWS_CANTransceiverDriver.pdf 4.2.2
-
AUTOSAR_SRS_CAN.pdf 4.2.2
------end------
阅读推荐:
如果您觉得文章还不错~
社区拥有一套完整的轻量AUTOSAR解决方案,方案遵循AUTOSAR标准实现了大部分常用的基本功能,相比费用高昂的标准AUTOSAR包,特别适合中小型项目使用,微信关注“e栈社区”公众号或添加“estacks”微信了解更多!