电子工程世界|技术文章—节点BusOff恢复过程分析与测试
总线关闭(busoff)是CAN节点比较重要的错误处理机制 。 那么 , 在总线关闭状态下 , CAN节点的恢复流程是怎样的?又该如何理解节点恢复流程的“快恢复”和“慢恢复”机制?本文将为大家详细分析总线关闭及恢复的机制和原理 。
故障界定与总线关闭状态
为了避免某个设备因为自身原因(例如硬件损坏)导致无法正确收发报文而不断的破坏总线的数据帧 , 从而影响其它正常节点通信 , CAN网络具有严格的错误诊断功能 , CAN通用规范中规定每个CAN控制器中有一个发送错误计数器和一个接收错误计数器 。 根据计数值不同 , 节点会处于不同的错误状态 , 并根据计数值的变化进行状态转换 , 状态转换如下图所示 。
文章图片
图1节点状态转换图情形1
以上三种错误状态表示发生故障的严重程度 , 总线关闭是节点最严重的错误状态 。 并且 , 节点在不同的状态下具有不同的特性 , 在总线关闭状态下 , 节点不能发送报文或应答总线上的报文 , 也就意味着不能再对总线有任何影响 。
状态跳转和错误计数的规则使得节点在发生通信故障时有了较好的自我错误处理和恢复机制 , 从一种较严重的错误状态跳转到另一种严重性相对较低的状态 , 本质上就是一种恢复过程 。 图1所呈现的转换过程是CAN通用规范所要求的 , 我们从设备供应商买回来的CAN控制器已经把这些功能固化在硅片之中 。
在通信过程中 , 错误主动和错误被动两种状态下节点的恢复过程一般不需要MCU进行额外的编程处理 , 直接使用CAN控制器固有功能即可 。 但对于总线关闭状态 , 往往不直接使用CAN控制器固有的恢复过程 , 而是对其进行编程控制 , 以实现“快恢复”和“慢恢复”机制 。
注:
由于篇幅有限 , 关于错误计数的详细规则以及各状态下节点的具体特性不在本文进行讨论 , 读者可以查阅CAN的相关协议规范 。
本文的“CAN控制器”是指已经实现了CAN通用协议物理层和数据链路层所要求的功能和特性的器件 , 如SJA1000;而“节点”是指把CAN控制器与MCU、收发器等相关器件进行整合开发出来的具有一定功能的CAN节点 。
为什么需要对总线关闭状态的节点实现“快恢复”和“慢恢复”策略?
当节点进入总线关闭状态后 , 如果MCU仅是开启自动恢复功能 , CAN控制器在检测到128次11个连续的隐性位后即可恢复通信 , 在实际的CAN通信总线中 , 这一条件是很容易达到的 。 以125K的波特率为例 , 128*11*(1/125000)=0.011264s 。 这意味着如果节点所在的CAN总线的帧间隔时间大于0.011264s , 节点在总线空闲时间内便可轻易恢复通信 。 我们已经知道 , 当进入总线关闭状态时 , 节点已经发生了严重的错误 , 处于不可信状态 , 如果迅速恢复参与总线通信 , 具有较高的风险 , 因此 , 在实际的应用中 , 往往会通过MCU对CAN控制器总线关闭状态的恢复过程进行编程处理 , 以控制节点从总线关闭状态恢复到错误主动状态的等待时间 , 达到既提高灵活性又保证节点在功能上的快速响应性的目的 。 具体包括“快恢复”和“慢恢复”策略 , 两种策略一般同时应用 。
通过以上的讨论 , 我们可以知道 , 节点进入总线关闭状态后 , 存在以下几种恢复情况:
MCU仅开启CAN控制器的自动恢复功能 , 节点只需检测到128次11个连续的隐性位便可以恢复通信 , 恢复过程如图1所示 。
MCU没有开启CAN控制器的自动恢复功能 , 也不主动干预总线关闭错误 , 节点将一直无法“自动”恢复总线通信 , 只能通过重新上电的方式使节点恢复,恢复过程如图2所示 。
文章图片
图2节点状态转换图情形2
MCU对CAN控制器的恢复过程进行编程处理 , 这时 , 节点的恢复行为由具体的编程逻辑决定 , 各厂家普遍采用了先“快恢复”后“慢恢复”的恢复策略 , 恢复过程如图3所示 。
推荐阅读
- 『华为』原本希望5G能连接世界,它反而让我们分道扬镳
- 『南极』科学家在南极冰下800米处,发现新的生命世界,颠覆了人类的认知
- 科学家▲科学家发现宇宙的终极是熵,这意味着什么?未来世界将一片混乱!
- [霸王龙]地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 世界人工智能大会|距离2020世界人工智能大会云端峰会开幕还有4天!
- 社会新鲜报|连沉默已久的中兴都忍不住了!,91000亿!华为再次“惊艳”世界
- 「霸王龙」地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 荔枝网|“世界最耐飞植保无人机”批量生产,连续飞行1677小时
- 霸王龙:地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 水豚:水豚是这个世界上朋友最多的动物 和谁都能成为好朋友