1、概述
CANSM(Controller Area Network State Manager)是AUTOSAR(Automotive Open System Architecture)标准中的一个模块,用于管理车辆控制系统中的CAN总线通信。它提供了一种标准化的方式来配置、启动、停止和监视CAN总线通信,并确保不同ECU(Electronic Control Unit)之间的通信协调和一致性。CANSM还提供了故障检测和恢复机制,以确保CAN总线通信的可靠性和稳定性。
CanSM:Can通信总线(包含CAN控制器和CAN收发器)的状态管理,支持CAN在FULLCAN NOCOM SILIENTCOM等状态之间切换,并负责CAN busoff恢复管理。
CanSM处理CAN网络的启动和停止,CanSM将CanSM状态映射到ComM的状态并将CanSM状态更改为ComM所请求的状态。
它与通信硬件抽象层和系统服务层交互。
CanSM主要负责维护两个状态机
1、网络通讯模式状态机:负责维护网络通信模式(setmode)
2、总线离线恢复状态机:负责把总线从离线事件中恢复(busoff)
局限性:只能用于CAN,假设LIN是有LINSM的
COMM:通信管理系统服务模块,通过与各通信总线的状态管理模块,如 CANSM LINSM和网络管理模块(NM)交互,为用户提供统一、抽象、简洁的通信模式管理服务。负责简化用户对网络管理和总线通信状态的控制
个人感觉:CANSM就是调用CANIf的接口来实现状态管理。
系统框图描述
从上述框图也能感受到CANSM主要做ComMode的处理
2、CanSM主要做什么
2.1、CAN控制器状态管理
当CanSM接收到ComM的CAN状态切换请求或者检测到busoff后,需要切换CAN控制器的状态,调用CanIf的CanIf_SetControllerMode()请求CAN控制器在 CANIF_CS_STOPPED,CANIF_CS_STARTED,CANIF_CS_SLEEP之间切换,CanIf模块再调用Can驱动接口Can_SetControllerMode()执行具体CAN控制器的状态切换(CAN_T_START, CAN_T_STOP, CAN_T_SLEEP, CAN_T_WAKEUP)。
由于延时等原因,网络的通信模式可能会和ComM请求的不一致,这就需要CanSM通过以下方式来提供接口向ComM反馈当前的通信模式:
CanSM提供API。ComM可以通过这个API调用来得到CAN网络当前的通信模式。
CanSM使用ComM提供的回调函数来通知通信模式的改变。
2.2、CAN收发器状态管理
当CanSM接收到ComM的CAN状态切换请求,如果对应的CAN通道包含transceiver,CanSM需要切换对应CAN收发器的状态,调用CanIf的CanIf_SetTrcvMode()请求CAN收发器在CANTRCV_TRCVMODE_NORMAL, CANTRCV_TRCVMODE_SLEEP, CANTRCV_TRCVMODE_STANDBY之间切换,CanIf模块再调用Can收发器驱动接口CanTrcv_SetOpMode()执行具体CAN收发器的状态切换。
2.3、Busoff检测
当CAN控制器检测到Busoff(Busoff中断或者调用Can_MainFunction_BusOff()进行polling),调用CanIf_ControllerBusOff()通知busoff事件到CanIf,CanIf再调用CanSM_ControllerBusOff()通知busoff事件到CanSM。CanSM在检测到有Can通道busoff事件发生后,将尝试进行busoff恢复。