• 99查看
  • 0回复

[Autosar] ComM模块的原理、配置及代码实现

[复制链接]

该用户从未签到

发表于 8-5-2024 19:09:50 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


内容提要1 作用    1.1 模块间交互    1.2 状态机        1.2.1 PNC介绍        1.2.2 PNC状态机
        1.2.3 ComM通道状态机    1.3 调用时序        1.3.1 用户请求通信        1.3.2 被动唤醒        1.3.3 关闭网络2 配置    2.1 ComMConfigSet        2.1.1 ComMChannels        2.1.2 ComMPnc    2.2 ComMGeneral3 代码实现引言在<<有限状态机及在Autosar ComM的应用>>一文中已介绍了ComM模块的状态切换的实现方法,这篇文章我们将详细介绍ComM模块的作用、配置和代码实现。
1 作用

1.1 模块间交互

ComM模块的原理、配置及代码实现w1.jpg

从图上可以看出ComM与很多模块都有交互:
Rte:用户可以通过ComM提供的Rte的接口来请求通讯模式,如调用ComM_RequestComMode函数;

EcuM:EcuM负责验证唤醒事件并将有效的唤醒事件告诉ComM,然后ComM就会发生状态切换;

BswM:BswM可以直接通过内置接口请求通讯模式并设置是否允许通讯,已在<<一文搞懂Autosar BswM模块的原理和配置>>分析;

NvM:ComM通过NvM的接口来存储一些数据;

Dcm:Dcm通过ComM的接口来控制通讯模式等(如UDS的0x28服务);

CanSM:ComM最终是通过CanSM的接口来控制Can控制器和收发器的状态,已在<<深入解析BusOff及CanSM模块>>分析;

NM(Network Manager):在配置了往管理的情况下,ComM与NM一起协同同步控制网络状态;

Com:当配置了部分网络集群(PartialNetwork Cluster,PNC)时,ComM会去读取Com传来的PNC的信号,来判断此时PNC bit是否置位。

1.2 状态机
ComM的状态机分为两部分:PNC状态机和ComM通道状态机。
1.2.1 PNC介绍
这里先介绍一下PNC的概念。局部网络(PartialNetworking,PN)的核心思想是通过AUTOSAR的网络管理中实现节能。它允许一些不需要工作ECU先下电,而其他ECU可以继续在同一总线通道(比如动力CAN)上通信。在网络中可以将ECU分成若干个小组(包含的ECU处于相同或不同的通道上),每组ECU即为一个PNC。PNC小组成员的特点是,同时休眠同时工作。
ComM模块的原理、配置及代码实现w2.jpg

PNC应用示例由上图可见,ECU6作为主动唤醒的节点来控制其他节点是否在线,ECU4和ECU5为一个PNC,ECU1、ECU2和ECU3为其他3个PNC
ComM模块的原理、配置及代码实现w3.jpg

Autosar网络管理报文Pdu内容格式由上图可见,报文第一个字节通常为自身的节点编号,第二个为控制位向量,PNC一般定义在随后的user data中。
ComM模块的原理、配置及代码实现w4.jpg

CBV(Control Bit Vector)的组成
PNI(Partial Network Information)表示网络报文是否包含局部网络请求(PN request).
ComM模块的原理、配置及代码实现w5.jpg

PNC数据流向
1 CanIf接收到Can消息,调用CanNM_RxIndication通知到CanNM模块;

2 CanNM对接收到消息进行判断,假如PNI和对应的PNC置位,则设置CanNM状态为收到EIRA(或者ERA)的有效信号,同时存储当前收到的数据,调用PduR_RxIndication通知PduR;

3 PduR调用Com_RxIndication通知Com模块

4 Com模块调用ComM_Cbk,在ComM_Cbk中对PNC进行判断,假如置位,则进行状态切换

1.2.2 PNC状态机
本文只分析PASSIVE且ComMPncGatewayEnabled为FALSE模式,FULL模式类似。
ComM模块的原理、配置及代码实现w6.jpg

一般来说处于PASSIVE模式且ComMPncGatewayEnabled为FALSE下是不具备发送网络报文的能力的(不是绝对的)。上电默认为COMM_PNC_NO_COMMUNICATION状态,当上电后验证唤醒源有效时,EcuM模块通过ComM_EcuM_PNCWakeUpIndication通知到ComM,ComM进入COMM_PNC_PREPARE_SLEEP状态并开始计时,在计时器超时前收到网络管理报文PNC置位时,进入COMM_PNC_READY_SLEEP;当计时器超时时,回到COMM_PNC_NO_COMMUNICATION状态。在COMM_PNC_REQUESTED状态时,才会具备发送报文的功能。
1.2.3 ComM通道状态机
已在<<有限状态机及在Autosar ComM的应用>>分析过
1.3 调用时序

1.3.1 用户请求通信

ComM模块的原理、配置及代码实现w7.jpg

1 Rte调用ComM_RequestComMode请求通信;

2 ComM判断CommunicationAllowed后,调用CanSM_RequestComMode来控制Can控制器和收发器进入通信状态,CanSM的控制下层模块的调用见<<深入解析BusOff及CanSM模块>>分析;

3 调用NM的NM_NetworkRequest让NM进入Normal Operation State状态。

1.3.2 被动唤醒

ComM模块的原理、配置及代码实现w8.jpg

1 唤醒后,EcuM通过ComM_EcuM_WakeUpIndication通知ComM此时被有效的唤醒源唤醒;

2 ComM调用CanSM_RequestComMode使能Can控制器和收发器的收发功能;

3 调用NM(Nm_PassiveStartUp)->CanNM(CanNm_PassiveStartUp)进入Repeat Message State,如果是PASSIVE模式,则进入READY_SLEEP状态

1.3.3 关闭网络

ComM模块的原理、配置及代码实现w9.jpg

已在<<深入解析BusOff及CanSM模块>>分析。
2 配置

2.1 ComMConfigSet

2.1.1 ComMChannels

ComM模块的原理、配置及代码实现w10.jpg

ComMNmLightTimeout:当ComMNmVariant配置为ComMLight时,ComM处于COMM_FULL_COM_READY_SLEEP超时时间;

ComMNmVariant:网络管理的模式,需要与NM相关的模块保持统一。
1FULL:AUTOSAR网络管理;2LIGHT:不是AUTOSAR的网络管理但是支持关闭网络;3NONE:没有网络管理;4PASSIVE:AUTOSAR的网络管理,但是运行在PASSIVE模式。
ComMPncNmRequest:当配置为TRUE时,当PNC状态机切换到COMM_PNC_REQUESTED进入到FULL_COM状态时,NM需要调用Nm_NetworkRequest。注意,只有当ComMNmVariant为FULL时,这个选项才能配置为TRUE。

ComMBusType:通道的类型(COMM_BUS_TYPE_CAN/COMM_BUS_TYPE_ETH等)。

ComMMainFunctionPeriod:ComM_MainFunction的运行周期,单位秒。
在介绍接下来的几个配置选项前,先介绍一下总线唤醒抑制(Bus wake upinhibition).在ComM模块中的概念为预防启用通信而唤醒其他ECU。例如传感器ECU发生故障时,可能会向总线发出非预期的消息而导致唤醒整个网络,在出现这种故障情况时,相应故障处理的SWC应当可以调用ComM的接口去设置对应通信channel的唤醒抑制位,防止意外唤醒网络。
ComMNoCom:配置为TRUE时,不允许进入COMM_SILENT_COMMUNICATION或者COMM_FULL_COMMUNICATION状态。用户的FullCommunication请求不会得到任何处理,此时这个通道就不具备通信的能力。也可以通过ComM_LimitChannelToNoComMode函数或者ComM_LimitECUToNoComMode来使能这个功能。这个功能生效的前提是ComMEcuGroupClassification配置为1

ComMNoWakeup:配置为TRUE时,ECU不允许唤醒这个通道. 可以通过ComM_PreventWakeUp来使能这个功能。这个功能生效的前提是ComMEcuGroupClassification配置为1

ComMNoWakeUpInhibitionNvmStorage:配置为TRUE时,NoWakeUp的状态需要保存在NvM中。

2.1.2 ComMPnc

ComM模块的原理、配置及代码实现w11.jpg

ComMPncComSignalDirection:Pnc信号的方向(接收/发送)。

ComMPncComSignalKind:Pnc信号的类型。
1EIRA(External and Internal Request Array):外部(如包含PNC的网络管理报文)或者内部(调用ComM_Reqeust接口的swc等)请求集合;2ERA:ERA相比EIRA而言,少了内部请求,因为该机制主要用于外部PNC请求,即用于外部PNC请求的收集与其他通道的PNC的转发,主要面向网关节点
ComMPncComSignalChannelRef:Pnc信号属于哪个通道。

ComMPncComSignalRef:Pnc信号,引用与Com模块配置的Signal。

2.2 ComMGeneral

ComM模块的原理、配置及代码实现w12.jpg

ComMModeLimitationEnabled:是否允许使用ComM_LimitChannelToNoComMode等限制ComM通信功能的函数。

ComMPncSupport:是否支持Pnc功能。

ComMWakeupInhibitionEnabled:是否使能总线唤醒抑制功能。

ComMNmPassiveModeEnabled:是否使能PASSIVE模式。

3 代码实现
在<<有限状态机及在Autosar ComM的应用>>中我们已经得到ComM通道状态机的函数数组:
ComM模块的原理、配置及代码实现w13.jpg

NM的状态切换如下图所示(分析网络管理时再仔细研究):
ComM模块的原理、配置及代码实现w14.jpg

CanNM状态切换示意图
接下来我们来实现每个函数。
3.1 ComM_TF_No_Transition
当前状态和请求状态一致或者不可能跳转到请求状态时调用,因此这个函数是个空函数。
3.2 ComM_TF_No_Transition
当前状态跳转到请求状态时无任何动作时调用,因此这个函数是个空函数。
3.3 ComM_TF_NetReq_ReadyS
当前状态为COMM_FULL_COM_NETWORK_REQUESTED,请求状态为COMM_NO_COM_NO_PENDING_REQUEST(需要先到READY_SLEEP才能到NO_COM)或者COMM_FULL_COM_READY_SLEEP或者COMM_SILENT_COM。因此需要在函数中调用Nm_NetworkRelease函数来让NM进入PrepareBusSleep模式。
3.4 ComM_TF_Full_SiCom
当前状态为COMM_FULL_COM_READY_SLEEP,请求状态为COMM_NO_COM_NO_PENDING_REQUEST或者COMM_SILENT_COM时调用。此时NM已经进入了PrepareBusSeleep模式,因此需要在函数中调用ComM_RequestBusSMMode函数让网络进入Silent模式,保证只收不发。
3.5 ComM_TF_SiCom_NoCom
当前状态为COMM_SILENT_COM,请求状态为COMM_NO_COM_NO_PENDING_REQUEST。此时需要关闭网络的收发功能,因此在函数中调用ComM_RequestBusSMMode让网络进入COMM_NO_COMMUNICATION模式。
3.6 ComM_TF_NoCom_NetReq
当前状态为COMM_NO_COM_REQUEST_PENDING或者COMM_SILENT_COM时,请求状态为COMM_FULL_COM_NETWORK_REQUESTED时调用。因为这个时候需要进入FULL_COM状态,所以需要使能收发功能,因此需要在函数中调用ComM_RequestBusSMMode让网络进入COMM_FULL_COMMUNICATION状态,并且通过Nm_NetworkRequest让NM进入Network Mode状态。
3.7 ComM_TF_ReadyS_NetReq
当前状态为COMM_FULL_COM_READY_SLEEP,请求状态为COMM_FULL_COM_NETWORK_REQUESTED。此时网络还具备收发收发功能,只是NM进入了PrepareBusSleep,所以需要调用Nm_NetworkRequest让NM进入Normal Operation State状态。
3.8 ComM_TF_NoCom_FullReadySleep
当前状态为COMM_NO_COM_REQUEST_PENDING或者COMM_SILENT_COM,请求状态为COMM_FULL_COM_READY_SLEEP时。此时需要总线具有收发功能,因此需要调用ComM_RequestBusSMMode让总线进入COMM_FULL_COMMUNICATION,同时由于NM已经处于BusSleep模式,因此这个时候需要调用Nm_PassiveStartUp让NM强制进入Network Mode状态。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 20-5-2024 06:46 , Processed in 0.238251 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.