1 概述
通信管理器模块(COM管理器,ComM)是基本软件(BSW)的一个组成部分。它是一个资源管理器,它封装了对底层通信服务的控制。
通过调用API接口它可以实现对Can通道开启和关闭,控制Can报文收发。简化了对用户的总线通信堆栈的使用,简化的网络管理处理。
2 状态机
COMM状态机,它由三个主要状态组成,表示每个通道的通信能力的抽象状态。
2.1 COMM_UNINIT
在初始化COMM之前,它将保持在此状态。无法使用COMM功能。
2.2 COMM_NO_COMMUNICATION
状态COMM_NO_COMMUNICATION表示COMM的最低状态。在此状态内,没有可用的通信能力。该状态由下面描述的两个子态组成。
2.2.1 COMM_NO_COM_NO_PENDING_REQUEST
此状态是COMM初始化后的默认状态,以下条件可触发状态跳转:
1)用户请求调用COMM_FULL_COMMUNICATION(调用ComM_RequestComMode函数)
2)一个活动的诊断会话的DCM通知
3)来自ECUM或NM的被动唤醒指示(调用ComM_EcuM_WakeUpIndication函数)
2.2.2 COMM_NO_COM_REQUEST_PENDING
COMM一直处于这种状态,直到允许使用ComM_CommunicationAllowed(TRUE)指示的方式对通道进行通信为止。
2.3 COMM_SILENT_COMMUNICATION
COMM使用此状态来支持网络管理的睡眠过程。该状态表示网络的准备总线休眠阶段。如果网络管理触发休眠进程并变为准备总线休眠模式,则COMM将变为此状态。
此状态下的活动取决于已配置的COMM NM变体:
状态保持跳转COMM_FULL_COM_NETWORK_REQUESTED 条件:
1)NM Variant FULL and PASSIVE :FULL_COMM请求或者NM模块总线正常模式Network指示
状态保持跳转COMM_NO_COM_NO_PENDING_REQUEST条件:
1)NM Variant FULL and PASSIVE :NM模块总线BusSleep睡眠模式指示
2) NM Variant LIGHT:配置了Nm Light Silent Timeout不为0,时间超时。
2.4 COMM_FULL_COMMUNICATION
状态COMM_FULL_COMMUNICATION表示COMM的最高状态。在此状态下,通信能力是可用的。该状态由下面描述的两个子态组成。
2.4.1 COMM_FULL_COM_NETWORK_REQUESTED
此状态下的活动取决于已配置的COMM NM变体:
状态保持条件:
2.4.2 COMM_FULL_COM_READY_SLEEP
此状态下的活动取决于已配置的COMM NM变体:
状态保持条件:
1)NM Variant FULL and PASSIVE :网络管理被设置为就绪睡眠状态。
状态跳转COMM_FULL_COM_NETWORK_REQUESTED条件:
1)NM Variant FULL or LIGHT:用户都请求FULL_COM
状态跳转 COMM_SILENT_COMMUNICATION条件:
1)NM Variant FULL and PASSIVE :NM模块准备总线睡眠Prepare BusSleep模式指示
2) NM Variant LIGHT:配置了Nm Light Silent Timeout不为0,时间超时。
3 主动及被动唤醒过程中COMM状态跳转
3.1 主动唤醒COMM状态跳转
1)ECU上电,进入COMM_UNINIT状态。
2)BswM初始化过程调用ComM_Init() ,进入COMM_NO_COM_REQUEST_PENDING状态
3)用户根据需求调用ComM_RequestComMode请求FULL_COMM,进入COMM_NO_COM_REQUEST_PENDING状态
4)设置Can通道CommunicationAllowed == TRUE,此开关一般在BswM进行配置打开。进入COMM_FULL_COM_NETWORK_REQUESTED
5)正常工作过程一直停留在COMM_FULL_COM_NETWORK_REQUESTED状态
3.2 被动唤醒COMM状态跳转
1)ECU上电,进入COMM_UNINIT状态。
2)BswM初始化过程调用ComM_Init() ,进入COMM_NO_COM_REQUEST_PENDING状态
3)EcuM收到有效唤醒报文,调用ComM_EcuM_WakeUpIndication进入COMM_NO_COM_REQUEST_PENDING状态
4)设置Can通道CommunicationAllowed == TRUE,此开关一般在BswM进行配置打开。进入COMM_FULL_COM_NETWORK_REQUESTED
5)正常工作过程一直停留COMM_FULL_COM_READY_SLEEP状态
3.2 休眠过程COMM状态跳转
1)准备下电休眠时,用户通过ComM_RequestComMode请求NO_COMM,进入COMM_FULL_COM_READY_SLEEP状态
2)在COMM_FULL_COM_READY_SLEEP状态收到NM模块Prepare Bus Sleep Mode 通知,进入COMM_SILENT_COMMUNICATION 状态
3)在COMM_SILENT_COMMUNICATION 状态收到 Bus Sleep Mode 通知,进入COMM_NO_COM_NO_PENDING_REQUEST状态