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状态

具体详情可参考下面博文:

AUTOSAR通信之CAN状态管理:CanSM

二、相关函数

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的网络状态。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jory&W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值