CANSM状态管理
CAN协议栈系列 文章传送门
后续更新
前言
每个通信总线都有各自与总线相关的状态管理模块。
思考问题:CAN有哪些状态,如何管理。调用什么函数管理CAN网络状态?
一、CAN的状态管理?
ECU可以具有不同的通信网络。每个网络都必须用一个唯一的网络句柄来标识。
CanSM模块负责CAN网络的控制流抽象:它根据来自ComM模块的模式请求更改配置的CAN网络的通信模式。
CanSM模块使用CanIf模块的API。CanIf模块负责配置的CAN控制器和CAN收发器的控制流抽象(CanIf模块的数据流抽象与CanSM模块无关)。CAN控制器模式和CAN收发器模式的任何更改都将由CanIf模块通知给CanSM模块。根据此通知和CAN网络状态机的状态(CanSM模块应为每个配置的CAN网络执行),CanSM模块通知ComM和BswM
CanSM模块内部存储的网络模式可以具有值
COMM_NO_COMMUNICATION、不通信
COMM_SILENT_COMMUNICATION 沉默通信
COMM_FULL_COMMUNICATION 全通信
每个CAN网络的状态机
这个状态机看着复杂,核心就是
CANSM_BSM_S_FULLCOM
CANSM_BSM_S_SILENTCOM
CANSM_BSM_S_NOCOM
其他都是过渡态。这三个正好对应上面的三种网络模式,实际代码中也的确是这样。然后再调用不同的函数实现状态的跳转。
接通电源后,CanSM状态机(见图7-1)应处于CanSM_BSM_NOT_INITIALIZED状态,未初始化
如果CanSM模块的CanSM_Init被调用,则这将触发所有配置CAN网络的CanSM状态机(参考图7-1),并触发CanSM_Iit
CanSM_BSM状态机的效应E_PRE_NOCOM(参考图7-1)应调用相应的CAN网络API BswM_CanSM_CurrentState,参数为network:=CanSMComMNetworkHandleRef和
CurrentState:=CanSM_BswM_NO_COMMUNICATION
触发条件:T_START_WAKEUP_SOURCE
如果API请求CanSM_StartWakeUpSource返回E_OK,则应使用T_START_WAKEUP_SOURCE触发状态机(参考图7-1)。
触发条件:T_STOP_WAKEUP_SOURCE
如果API请求CanSM_StopWakeUpSource返回E_OK,则应使用T_STOP_VAKEUP_SSOURCE触发状态机(参考图7-1)。⌋
触发条件:T_FULL_COM_MODE_REQUEST[SW_CanSM_00425]Ş如果功能参数网络与配置参数CanSM_network_HANDLE(参考ECUC_CanSM-00161)匹配,则API请求CanSM_RequestComMode(参考SWS_CanSM_00635)且参数ComM_MODE等于ComM_FULL_COMMUNICATION时,应使用T_FULL_COM_MODE_REQUEST触发状态机。⌋(SRS_Can_01142、SRS_Can_1145)
CanSM_DeInit函数的调用方必须确保所有CAN网络都处于CanSM_NO_COMMUNICATION状态
具体详情可参考下面博文:
二、相关函数
CanSM_Init:此服务初始化CanSM模块
CanSM_DeInit:此服务取消初始化CanSM模块
CanSM_RequestComMode:此服务应将CAN网络的通信模式更改为请求的通信模式。
输入1,网络,输入2,请求的网络通信模式。
返回ok,通信模式切换成功。NOT_OK,服务被拒绝。
CanSM_GetCurrentComMode:该服务应提供CAN网络的当前通信模式
输入网络
输出,指针,显示当前通信模式的位置
CanSM_StartWakeupSource:当启动唤醒源时,EcuM应调用该功能。
输入被影响的网络
输出请求被接受还是拒绝
CanSM_StopWakeupSource:当唤醒源应停止时,EcuM应调用此功能
输入被影响的网络
输出请求被接受还是拒绝
这些服务是可以选择是否激活
CanSM_GetVersionInfo:此服务提供此模块的版本信息(模块ID、供应商ID、与BSW000407相关的供应商特定版本号)
CanSM_SetBaudrate:该服务应启动异步过程,以更改特定CAN网络的配置CAN控制器的波特率。根据必要的波特率修改,控制器可能必须重置
CanSM_SetEcuPassive:此功能可用于将ECU的所有CanSM通道设置为仅接收模式
下面的函数。这是为其他模块提供的功能列表。
CanSM_ControllerBusOff:此回调函数向CanSM通知某个CAN控制器上的总线断开事件,该事件需要与受影响CAN网络的指定总线断开恢复处理一起考虑。
CanSM_ControllerModeIndication:此回调应通知CanSM模块CAN控制器模式发生变化。
CanSM_TransceiverModeIndication:此回调应通知CanSM模块CAN收发器模式发生变化。
CanSM_TxTimeoutException:该功能应通知CanSM模块,CanNm已检测到受影响的部分CAN网络出现tx超时异常,该异常应在CanSM模块的相应网络状态机中恢复
CanSM_ClearTrcvWufFlagIndication:此回调函数应指示通知CAN收发器的CanIf_ClearCtrcvWufFlag API过程结束。
CanSM_CheckTransceiverWakeFlagIndication:此回调函数指示通知CAN收发器的CanIf_CheckTrcvWakeFlag API进程结束。
CanSM_ConfirmPnAvailability:此回调功能表示收发器正在PN通信模式下运行。
CanSM_MainFunction:CanSM模块的主要功能应操作CanSM状态机的效果,CanSM模块应为每个配置的CAN网络实现该状态机
总结
核心就三种状态,由ComM模块调用CanSM_RequestComMode函数修改CAN的网络状态。