《AUTOSAR谱系分解(ETAS工具链)》之ComM
1. ComM简介
通信管理模块(COM Manager, 下称ComM),是AUTOSAR BSW中的一个模块。
作为资源管理者,ComM封装了下层的通信服务。ComM收集来自通信请求方(AUTOSAR中称之为User)的总线通信访问请求,然后来协调这些请求。
ComM模块的目的主要有:
-
简化用户对于总线通信协议栈的使用方式,包括简化后的网络管理处理。用户(即User,后文默认这两种说法代表同一个含义)不需要知道任何硬件细节,例如应当使用哪个channel。对于用户来说,只需要请求“通信模式”,ComM模块会切换对应的通信channel的开启或关闭。
-
提供API以禁用信号的发送功能,防止(主动)唤醒总线上其他ECU。
-
每一路channel都有各自的状态机,ComM可以控制多个channel,将请求的通信模式给到CanSM, EthSM等,由她们来控制对应总线的状态。
-
提供API以强制让ECU进入No Communication的状态
-
为请求的通信模式分配足够的资源,来简化资源管理。在用户请求Full Communication模式时,判断是否允许通信,或者在通信状态下防止ECU进入shutdown的状态。
-
另外,PNC扩展,也即“部分网络管理”,允许用户请求并将某一网络上被分到同一个逻辑分组的ECU保持唤醒状态,PNC gateway允许将不同物理总线和网络进行逻辑上的区分。
2. 和其他模块的依赖关系
每个模块和ComM的主要交互功能如下:
RTE:每个用户都可以请求通信模式。RTE传播用户向通信模块发出请求,并将来自ComM的通知告诉APP。
EcuM:负责验证唤醒事件,然后发送指示到ComM,ComM切换到COM模式。ECU通讯的允许和关闭是由EcuM和BswM一起完成。
BswM:配置Com相关的Action和Rules,从而控制相关的通信,同时通信状态的改变也会报告给BswM,在EcuM Flex下,BswM也会将Com允许通信的功能告
诉ComM。
NvM:负责处理与ComM相关的Nv Data操作。
xxxSM:包括了具体的通信媒介的状态管理,如CanSM、LINSM、EthSM、FrSM等,控制实际的总线状态,ComM请求xxxSM进行相关的状态转换,并传递
到总线上。
NM:同步整个Ecu总线的开关。DCM:执行和诊断相关的ComM请求。
Com:通过Com信号区分PNC的状态信息。
DET:用于在开发中追溯ComM开发相关的错误。
3. ComM通道状态机
ComM通道状态机包含三种:
- COMM_NO_COMMUNICATION
- COMM_SILENT_COMMUNICATION
- COMM_FULL_COMMUNICATION
4. ComM状态请求
ComM_RequestComMode进行CAN状态的切换:
/*under voltage(<=6.5v) is checked*/
if(IoHwAb_ADC_GetBufferedValue(M_VBAT_P_F_AI) <= 6.5)
{
can_underst_counter++;
/*<=6.5v keeps 500ms*/
if(can_underst_counter>=50)
{
PwrM.PwrM_data->CAN_VoltSt = CeVBATT_UNDER_VOLTAGE;
can_underst_counter = 0;
/*disable CAN communication*/
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_0_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_FMR_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_SLR_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_SRF_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Eth_Network_0_Channel, COMM_NO_COMMUNICATION);
}
}
/*over voltage(>=18.5) is checked*/
else if(IoHwAb_ADC_GetBufferedValue(M_VBAT_P_F_AI) >= 18.5)
{
can_overst_counter++;
/*>=18.5v keeps 500ms*/
if(can_overst_counter>=50)
{
PwrM.PwrM_data->CAN_VoltSt = CeVBATT_OVER_VOLTAGE;
can_overst_counter = 0;
/*disable CAN communication*/
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_0_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_FMR_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_SLR_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Can_Network_SRF_Channel, COMM_NO_COMMUNICATION);
ComM_RequestComMode(ComMConf_ComMChannel_ComMChannel_Eth_Network_0_Channel, COMM_NO_COMMUNICATION);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
CanSM状态进入到CanSM_CommFullCommunication状态时,会调用ComM_BusSM_ModeIndication()进行通知。
5. ComM中的PNC
ComM主要是对通信协议栈进行服务控制的模块,在通信网络中和通信控制密切相关的功能主要会结合网络管理进行控制和使用,ComM模块对网络管理中每
一个PNC(partial network cluster)实现了一个状态控制,能够请求和释放一个PNC的网络通信进行通信的控制。
在CAN和FR通信模式下,ComM的User会根据需要在主动唤醒模式下将NM报文中的UserData中对应的Bit设置为1,如果不请求特定的PNC,那么将该Bit设置
为0,同时xxxNM模块会将对应的Bit通过COM中信号传递到ComM模块。每个PNC的状态切换如下所示:
评论记录:
回复评论: