【小猫爪】AUTOSAR学习笔记05-Communication Stack之CanSM模块

前言

  这一章来看看Communication Stack的CanSM模块(CAN State Management)。SM模块跟NM模块类似,每一种总线都有自己的SM模块。这里还是以CAN总线为例。

1 CanSM简介

  首先来看看CanSM模块在AUTOSAR架构中的位置:
在这里插入图片描述
  可以看到CanSM和上一章介绍的CanNm是两兄弟,都是基于interface层,对上则服务于ComM服务。只不过两兄弟所实现的功能不一样,在具体介绍CanSM模块之前,得先搞清楚状态管理是个什么玩意。首先这里管理的状态其实是对应其总线的通信状态,所以CanSM模块管理的就是CAN总线的通信状态,而这里的通信状态则包含能不能发送报文,能不能接收报文,总线上有没有错误等。

  CanSM模块针对CAN总线状态而言,由上而下,CanSM接收其他模块的总线状态切换请求并通知CanIf模块去执行,由下而上,CanSM接收CanIf模块的总线状态切换反馈并汇报给其他模块。

  下图显示了在AUTOSAR的BSW层中其他模块与CanSM的交互情况:
在这里插入图片描述
  ECuM模块会初始化CanSM模块,并与CanSM模块交互进行CAN总线唤醒的验证。ComM模块使用CanSM模块请求CAN网络的通信模式,CanSM模块会将其CAN网络的当前通信模式通知给ComM模块。CanSM模块使用Canlf模块来控制CAN控制器和CAN收发器工作模式,Canlf模块通知CanSM模块CAN总线相关事件。CanSM模块向Dem模块报告总线特定的故障信息。CanSM将总线特定的模式更新通知到BswM模块。CanSM模块将部分网络可用性通知给CanNm模块,并在部分联网的情况下处理已通知的CanNm超时异常。CanSM模块向Det模块报告开发和运行时错误。

2 CanSM功能介绍

  CanSM提供的主要功能主要有:
  1. 总线模式切换
  2. Busoff 恢复管理
  3. 切换波特率
  4. 唤醒确认管理

2.1 模式切换

  CanSM模块针对总线模式控制有一个内部状态机,它会接收其他模块的总线模式切换请求以及总线状态变化反馈才进行状态机切换,其内部状态机切换如下图所示:
在这里插入图片描述
*注:高清图请参考AUTOSAR官方文档:《AUTOSAR_SWS_CANStateManager.pdf》。

  NOT_INITIALIZED 状态下,只能调用 CanSM_Init。

  PRENOCOM/WUVALIDATION/PRE_FULLCOM/CHANGE_BAUDRATE/SILENTCOM_BOR 为中间状态,正常情况下,CanSM不会停留在这些状态中,在这些状态下,调用 CanSM_RequestComMode 会被拒绝。

  NOCOM\FULLCOM\SILENTCOM 为稳定状态,处于这些状态下,可接受新的CanSM_RequestComMode 请求。

  上面提到了CanSM有三种稳定状态,分别为NOCOM \FULLCOM \SILENTCOM,其中NOCOM的就是无通信,不能收发,FULLCOM为全通信,可收可发,从字面意思上就非常好理解,至于SILENTCOM则是只能收不能发,通常用在系统想要sleep的时候。

  关于CanSM的状态机切换非常复杂,上述提到了几种大状态下又会有自己的子状态机,但是不管它多复杂对我们使用它却并没有什么关系,这就是AUTOSAR的可怕之处,它会安排好一切,我们只需要按照需求调用接口和使用回调就行了。在这里,对状态机的详细切换机制我就不多作说明了,大家可以参考这两篇文章:《AUTOSAR通信之CAN状态管理:CanSM》《CAN网络状态机》

2.2 Busoff 恢复机制

  除了上面所说的总线状态机,CanSM模块还有另外一个小型状态机,那就是用来实现的Busoff 恢复机制。

  当CanSM模块从CanIf模块收到 Busoff 通知时,将会进入 Busoff 恢复的状态,恢复机制如下:

  1. 快恢复,产生 Busoff 后,延时 CanSMBorTimeL1 时间尝试恢复;
  2. 快恢复次数达到 CanSMBorCounterL1ToL2 后,进行慢恢复;
  3. 慢恢复,产生 Busoff 后,延时 CanSMBorTimeL2 时间尝试恢复;
  4. 慢恢复次数为无限次。

  尝试恢复指的是,重新打开Can的发送能力,并从Busoff Recovery状态切换至CHECK_BUS_OFF状态。在首次进行快恢复和慢恢复时,CanSM模块会分别给出回调函数通知用户。

  当 CanSM 尝试恢复 Busoff 后,有两种方法对总线是否恢复进行确认。

  1. 若 CanSMBorTxConfirmationPolling 为 false,停留在BUS_OFF_CHECK状态没有超过时间参数CanSMBorTimeTxEnsured,在此时间段内,没有新的 Busoff 事件产生,则认为 Busoff恢复成功。
  2. 若 CanSMBorTxConfirmationPolling 为 true,停留在 BUS_OFF_CHECK状态,直到检测到确实有一帧 Can 报文发送成功并给出了发送确认则认为 Busoff 恢复成功。这种情况下,需要调用 CanIf 的CanIf_GetTxConfirmationState 接口。

  Busoff 恢复成功后,BUS_OFF_CHECK状态将切换为 NO_BUS_OFF状态,总线通信恢复正常(:BUS_OFF_CHECK和NO_BUS_OFF是FULLCOM状态中的两个小状态)。

  如果Busoff 恢复不成功,节点一直在慢恢复期,意味着该节点不会外报文(应用报文和网络管理报文均不会外发),其他节点会上报对应的节点丢失故障。

  关于BusOff恢复机制的详细过程,我这里也不多说了,感兴趣的朋友可以参考文章:《CanSM模块如何处理Busoff等问题呢》

2.3 切换波特率

   CanSM模块提供接口CanSM_ChangeBaudrate可以切换CAN总线通信波特率,但是只有在FULLCOM状态且没有Busoff 时才能调用CanSM_ChangeBaudrate,其他状态调用 CanSM_ChangeBaudrate 会被拒绝。

2.4 唤醒确认功能

   当系统进入休眠后,CAN 控制器也进入休眠状态。当发生 CAN 通道唤醒事件时,EcuM 会 调 用 CanSM模块的CanSM_StartWakeupSource() 函 数 ,CanSM状态机会由NOCOM状态进入CANSM_BSM_WUVALIDATION状态,将硬件状态设置为正常工作态。此时硬件可以接收到网络上的报文,CanIf 模块会判断该唤醒帧是否合法。若判断结果为合法, ComM 会 调 用 CanSM 模 块 的CanSM_RequestComMode()接口请求 CanSM 进入 FULLCOM 模式, 若结果为非法,则 EcuM 会调用 CanSM 模块的CanSM_StopWakeupSource()函数,由CanSM将硬件重新设置为休眠状态。

END

  补充:除了以上简单介绍的几大点,CanNm模块还有一大堆的细节,大家如果想更深入了解CanNm模块,请参考AUTOSAR官方文档《AUTOSAR_SWS_CANStateManager.pdf》。

<think>好的,用户问的是在IT上下文中的canSM是什么。首先,我需要确定用户所说的canSM具体指什么。因为缩写可能有多种含义,我需要先分解可能的解释。 首先,考虑常见的IT领域中的缩写。比如,CAN通常指控制器局域网(Controller Area Network),常用于汽车和工业自动化中的通信协议。而SM可能代表多个概念,如状态机(State Machine)、安全管理(Security Management)或服务管理(Service Management)。因此,canSM可能是CAN与SM的组合。 接下来,我需要验证这个可能性。在车载网络或嵌入式系统中,CAN State Manager(CAN状态管理器)是一个合理的术语,用于管理CAN总线的状态,比如睡眠模式、唤醒、错误处理等。这符合常见的系统设计模式,尤其是在汽车电子中,电源管理和通信状态的管理非常重要。 另外,canSM可能涉及安全模块。比如,CAN Security Module,负责CAN通信中的数据加密、认证等安全措施,防止网络攻击。这在现代汽车网络安全中尤为重要,因为CAN总线传统上缺乏安全机制,容易受到攻击。 此外,还要考虑是否有其他可能的解释。例如,SM有时也指服务管理器(Service Manager),但结合CAN,可能性较低。或者,是否可能有拼写错误,比如用户可能想询问其他术语,如SAM、CAM等,但根据用户提供的准确缩写,应优先考虑最可能的组合。 为了确保准确性,我需要查找相关资料确认。比如,AUTOSAR(汽车开放系统架构)标准中确实有CanSM模块,属于通信服务的一部分,负责管理CAN网络的状态转换和通信控制。这验证了之前的猜测,canSM在车载系统中是一个具体的模块。 因此,回答用户时需要明确canSM在IT(特别是汽车电子或嵌入式系统)中的定义,分点解释可能的含义,并引用相关标准如AUTOSAR。同时,生成相关问题以帮助用户深入理解,比如应用场景、工作原理、安全机制等。</think>### 关于canSM的说明 在IT(尤其是汽车电子或嵌入式系统领域),**canSM** 是 **CAN State Manager**(CAN状态管理器)的缩写,属于控制器局域网(CAN)协议栈中的关键模块,主要用于管理CAN通信网络的状态转换与错误处理[^1]。 #### 核心功能 1. **状态管理** 控制CAN节点的通信状态(如激活、睡眠、唤醒),优化电源管理。例如,当总线空闲时,canSM可触发节点进入低功耗模式[^1]。 2. **错误恢复** 检测CAN总线错误(如报文丢失、校验失败)并执行预定义的恢复流程,例如重置控制器或切换通信模式。 3. **接口服务** 为上层应用提供状态查询接口,支持动态调整通信策略(如调整报文发送频率)。 #### 典型应用场景 - **汽车电子系统**:管理车载ECU(电子控制单元)的CAN通信状态[^1]。 - **工业控制**:协调多设备间的实时通信可靠性。 ```c // 示例:AUTOSAR标准中canSM的状态切换伪代码 void CanSM_RequestComMode(NetworkHandleType network, ComM_ModeType mode) { if (mode == COMM_FULL_COMMUNICATION) { enableCANBus(network); } else { enterCANSleep(network); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小猫爪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值