目录
愚以为CanSM主要有两个大的作用
1.与CanIf的交互
CanSM 根据来自ComM 模块的模式请求改变CAN 网络的通信模式。
CAN 网络PDU 模式控制(PDU 发送与接收的控制)。
CanSM 使用CanIf 模块的API,设置CAN 控制器和CAN 收发器工作模式。CAN 控制器和CAN
收发器工作模式的变更由CanIf 通知CanSM,用于CanSM 状态切换。
CanSM 为每一个配置的CAN 网络实现一个状态机,并将网络状态的变更通知给ComM 和BswM。
2.CAN 总线BusOff 恢复处理。
网上对第二条作用:CAN 总线BusOff 恢复处理,,已经有非常丰富的讲解了。本文主要探讨第一条,CanSM对CanController的控制,以及遇到CanSM无法打开Controller时的排查、解决思路。
稳态:
模式为稳定的模式,可以接受正常的网络请求.
-
COMM_NO_COMMUNICATION
-
COMM_SILENT_COMMUNICATION
-
COMM_FULL_COMMUNICATION
(CANSM从初始化到FULL COMM的一般跳转路径)
暂态
-
CANSM_BSM_S_PRE_NOCOM ,
-
CANSM_BSM_WUVALIDATION ,
-
CANSM_BSM_S_PRE_FULLCOM ,
-
CANSM_BSM_S_CHANGE_BAUDRATE ,
-
CANSM_BSM_S_SILENTCOM_BOR ,
-
CANSM_BSM_S_NOT_INITIALIZED
我现在遇到的问题是,CAN controller无法打开,而且当前没有用trcv校验和Pn,也没有波特率改变,且不是busoff所以直接不考虑这几个状态:
-
CANSM_BSM_WUVALIDATION ,
-
CANSM_BSM_S_CHANGE_BAUDRATE ,
-
CANSM_BSM_S_SILENTCOM_BOR ,
查看CANSM的全局变量,发现一直待在CANSM_BSM_S_PRE_NOCOM,都没进Full Com ,排除之后重点考虑的是(按状态机先手顺序)这几个进入FULL COM之前的状态。
-
COMM_NO_COMMUNICATION
-
CANSM_BSM_S_PRE_NOCOM
-
CANSM_BSM_S_PRE_FULLCOM
虽然CANSM状态机非常复杂,但我们如果只看跟我们目标相关的状态,撇开无关的状态机,应该还是可以在短时间内Hold住的!我们重点捋一下这几个。
CANSM_BSM_S_PRE_NOCOM
ECU上电后,每一路CanSM状态机默认进入CANSM_BSM_S_NOT_INITIALIZED状态。EcuM 模 块 调 用 CanSM_Init 函 数 , CanSM 状 态 从 CANSM_BSM_S_NOT_INITIALIZED 切 换 到 CANSM_BSM_S_PRE_NOCOM状态。
CanSM 状 态 机 处 于 CANSM_BSM_S_FULLCOM 或 者