前言:
CanSM模块中需要配置的内容其实不多,,主要涉及busoff相关配置项,这里重点讲下busoff触发的过程以及如何去测试。
我使用的协议栈CanSM模块的版本为4.0.3,CanSM的本质其实是一个复杂的状态机,分成了几个大的状态,大的状态中又嵌套了几个小的状态,建议大家学习的时候一边对着规范,一边看静态代码,便于更好地理解。
参考文档:
AUTOSAR_SWS_CANStateManager.pdf(4.0.3)
正文:
1.状态机
主要分成了几个大的状态,CANSM_BSM_S_FULLCOM,CANSM_BS_S_PRE_FULLCOM,
CANSM_BSM_S_NOCOM,CANSM_BS_S_PRE_NOCOM,CANSM_BS_S_SILENTCOM等。
这里我们主要讲下包含busoff检测及恢复的子状态机,这个主要是在CANSM_BSM_S_FULLCOM状态内,如下图所示:
1.当从其他状态进入FullCOM后,首先进入S_BUS_OFF_CHECK状态,如发生busoff事件(T_BUS_OFF),则直接进入S_RESTART_CC状态,没有发生且(G_BUS_OFF_PASSIVE)条件通过则进入S_NO_BUS_OFF状态,进入后也会一直检测busoff事件。
2.在S_RESTART_CC状态一直做DO_SET_CC_MODE_STARTED操作,DO_SET_CC_MODE_STARTED指的是一直在重新启动Can驱动(调用CanIf_SetControllerMode(形参为CANIF_CS_STARTED)),如果一直启动不成功超过了最大尝试次数(CanSMModeRequestRepetitionMax)就会尝试返回到NOCOM状态。
3.每次请求重新启动Can驱动都会有一个超时时间,在超时时间(CanSMModeRequestRepetitionTime)内,会一直保持在S_RESTART_CC_WAIT状态,这里会判断是否收到了当前Can驱动模式已经发生了变化,变化会调用E_TX_OFF,设置当前PduMode为TX_OFFLINE(调用CanIf