找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1567

积分

0

好友

203

主题
发表于 2026-2-10 23:25:06 | 查看: 33| 回复: 0

CAN总线的BusOff状态通常源于错误帧的不断积累。错误帧本身是一个接收节点认为数据有误,从而故意打断通信以使发送节点感知并重发报文的设计。这里存在一个“接收方认为发送方有错”的主观认知环节,使得CAN总线的故障诊断有时颇具挑战性。本文将分享一种方法,通过分析CAN总线波形的幅度、脉宽及电流等多维度信息,来精确定位错误帧的产生根源。

一、CAN节点基础构成

典型的CAN节点由微控制器(MCU)、CAN控制器和CAN收发器(Transceiver)组成。MCU内置CAN控制器,负责将应用数据封装为标准CAN帧格式,同时也进行帧校验和错误处理。控制器处理好的逻辑报文通过TX(发送)和RX(接收)引脚传送至CAN收发器。收发器的核心作用是进行电平转换,将控制器的单端逻辑电平信号转变为在物理总线上传输的差分信号(CANH与CANL),并通过双绞线进行通信。

在物理层,一个典型的双节点CAN网络等效电路包含两个CAN收发器和匹配的终端电阻。总线静默时,收发器内部的电路将CAN-H和CAN-L都拉至约2.5V,这个状态称为“隐性”,对应逻辑电平1。当节点需要驱动总线时(TX=0),它会导通内部电路,在总线上产生一个显著的差分电压(CAN-H升高,CAN-L降低),这个状态称为“显性”,对应逻辑电平0。

这里有几点关键的反直觉知识:

  1. 逻辑反相:总线无人驱动(隐性)时,TX/RX逻辑电平为1;总线被驱动(显性)时,对应逻辑电平0。这种设计类似于开集电极逻辑,增强了抗干扰能力,但也要求特别注意MCU与收发器之间的上下电时序,避免出现MCU已断电(TX输出不确定)而收发器仍在工作的状态。
  2. 电压容错:理论上,CAN_L短接到地或CAN_H短接到12V,由于终端电阻的分压作用,总线仍可能维持基本通信,但误码率会升高。如果观察到CAN通信电压不以2.5V为中心对称,也可能是多条CAN线缆交叉错接所致。
  3. 终端电阻:一个CAN网络中,120Ω终端电阻在1到4颗之间都能工作。数量过少会影响远端节点的抗扰度,过多则可能导致显性差分电压无法达到接收阈值。
  4. 分支匹配:对于较长的CAN分支线,可以添加1KΩ至4.7KΩ的支线电阻来改善抗扰度。

二、CAN链路层与帧结构

CAN控制器负责链路层协议。一帧标准CAN报文包含几个关键字段:仲裁段、控制段、数据段、CRC段和ACK段。

  • 仲裁段:主要包含报文ID,并实际执行优先级仲裁功能。当两个节点同时开始发送时,它们会逐位比较ID。发送显性位(0)的节点会覆盖发送隐性位(1)的节点,ID值更小(二进制中0优先)的报文赢得总线使用权,失败的节点会自动退出发送并等待重试。这意味着CAN网络是对等的,优先级取决于报文ID本身,而非发送节点。
  • 控制段:包含如IDE(标识符扩展)、R0(保留位,在CAN-FD中用作FDF帧格式标志)、DLC(数据长度码)等控制信息。CAN-FD协议仅在数据段切换至更高的波特率(如2Mbps),仲裁段和控制段仍保持基础速率(如500kbps)。
  • CRC段:对从帧起始到数据段结束的所有位进行计算校验,确保数据完整性。
  • ACK段:这是一个由接收方确认的时隙。发送节点在此位发送隐性位(1),而所有正确接收到该帧(仅校验链路层格式正确)的节点会同时回应一个显性位(0)。因此,ACK位在总线上会呈现出较高的电压,因为多个节点在同时驱动。

三、真实CAN总线波形解析

通过示波器观察实际总线,可以获得丰富的信息。例如,在一个多节点网络中观测到的一帧完整报文波形显示:

  • 在报文起始的仲裁阶段,如果波形出现高于单节点驱动时的电压台阶,表明有多个节点在同时竞争总线。
  • 在ACK位,电压通常会达到最高,因为此时除了发送节点自身,所有正确接收的节点都在同时驱动显性位。
  • 一个节点的逻辑侧TX信号(绿色)在自身为接收方时,通常保持高电平(隐性),仅在需要发送(如竞争总线或回应ACK)时拉低。当它想发送隐性但总线被其他节点驱动为显性时(例如仲裁失败),其TX仍为高,但总线波形为低。

四、错误帧的产生机理与“位填充”规则

错误帧并非由某个节点单独发出,而是由某个接收节点认为总线出错后,故意驱动总线来打断发送方,从而在总线上形成的一个特殊序列。

理解错误帧的关键在于CAN协议的“位填充”规则:逢五补一。即发送节点在发送连续5个相同的显性位(0)或隐性位(1)后,必须自动插入一个相反极性的补位(填充位)。例如,连续5个0后必须插1个1。

如果发送节点违反了此规则(漏插补位),或者补位在传输中被干扰,接收节点就会检测到“位填充错误”。作为响应,该接收节点会立即向总线发送一个“主动错误标志”——连续6个显性位(0)。这个6连0本身也违反了“逢五补一”规则,从而能够被总线上所有节点识别为一个错误信号。

五、通过波形幅度与脉宽定位错误源

当发生错误时,示波器捕捉到的波形包含多维信息:

  1. 错误标志的脉宽:主动错误标志是6个连续显性位。在500kbps速率下,1个位宽2us,因此错误标志理论长度为12us。设置示波器触发条件为大于11us的显性脉宽,可以快速捕捉到错误帧,无需依赖复杂的协议解码。

  2. 电压台阶分析(升维打击)

    • 在错误标志持续期间,如果波形出现电压起伏的“台阶”,表明有多个节点在不同时间点开始或结束驱动错误标志。
    • 结合欧姆定律分析:总线上差分电压是驱动电流在并联终端电阻上的压降。驱动节点越多,等效电阻越小,在相同驱动能力下电压越高。因此,电压台阶的高度变化直接反映了同时驱动总线节点数量的变化。
    • 通过分析错误标志内电压台阶的数量、高度和时序,可以反推有哪些节点、在何时参与驱动了错误帧。
  3. 驱动能力差异:不同型号或品牌的CAN收发器驱动能力可能有细微差别。在错误波形中,如果某个电压台阶明显低于其他,可能对应着一个驱动能力较弱的节点,这有助于区分不同设备。

六、实战案例分析:CRC错误帧

在一个案例中,错误发生在报文的CRC段。放大后的波形显示,错误标志(连续显性)期间出现了三个明显的电压台阶。

  • 第一个台阶:电压最高,推测是节点A(认为CRC错误)和节点B(报文发送方)同时在驱动错误标志。
  • 第二个台阶:电压略微下降,可能是节点B停止驱动,仅剩节点A在驱动。
  • 第三个台阶:电压再次略微升高并持续,推测节点C也识别到错误(可能由于位填充规则被违反)加入驱动,与节点A共同形成。

通过这种“12us间隔拆分电压台阶”的方法,可以推断出:节点A率先因认为CRC错误而发出主动错误标志,节点B(发送方)随后因回读不一致也发出错误标志,最后节点C加入。故障根源可能在于节点A的采样点设置不佳或所在分支线路过长导致信号质量差,使其误判了CRC。

七、CAN-FD错误排查的特殊性

CAN-FD的错误排查原理相同,但更复杂:

  • 速率切换:CAN-FD报文在数据段会切换到更高波特率(如2Mbps)。错误可能发生在高速率段。
  • 填充规则跟随速率:“逢五补一”的规则在高速率段同样适用,但判断连续位的宽度以高速率的位时间为准。
  • 错误标志速率固定:无论错误发生在哪个速率段,节点输出的“主动错误标志”总是以基础速率(如500kbps)发送,即固定为12us长的6个显性位。

一个典型CAN-FD错误案例:节点C发送FD报文,但在高速数据段受到干扰,自身回读失败。它首先以500kbps发出12us的主动错误标志。节点A和B在高速率段检测到连续6个显性位(违反了高速率的位填充规则),随后也发出500kbps的错误标志。在示波器上,会先看到一段高速率的连续显性(例如3us,对应6个2Mbps的位),紧接着是叠加的、带有电压台阶的12us长错误标志。

八、总结与故障定位流程

利用示波器进行CAN错误帧深度排查,可遵循以下思路:

  1. 初步定位:结合通信矩阵(知道ID对应发送节点),逐个拔除非关键节点,同时用示波器观察错误帧是否消失,模糊定位问题节点。
  2. 信号观测:如果条件允许,测量疑似问题节点的逻辑电平信号(TX),看其何时拉低(发出错误标志),这能最直观地揭示是哪个节点“认为”总线出错。
  3. 电流探测:使用电流探头测量节点CAN_H或CAN_L引脚的电流。输出正电流表示该节点在驱动总线,输入负电流表示其他节点在驱动它。通过观察错误帧期间电流方向,可以清晰定位是谁在主动驱动错误标志。
  4. 波形分析:当无法接入逻辑或电流信号时,专注于分析差分电压波形。仔细测量错误标志区域(>11us显性)内的电压台阶数量、高度和布线时序,利用多节点驱动电压升高的原理,拆解错误标志的构成,推断故障源头。
  5. 参数校验:检查所有节点的波特率、采样点、同步跳转宽度(SJW)等参数是否一致,尤其是在CAN-FD网络中,参数不匹配是导致错误帧的常见原因。

通过上述多维度的波形分析,工程师可以超越简单的协议解码,深入物理层和链路层交互的细节,从而精准定位导致CAN总线错误帧乃至BusOff的根源,提升网络/系统运维 & 测试的效率与准确性。

参考资料

[1] 示波器排查CAN错误帧,没几个月消化不了!建议收藏!, 微信公众号:mp.weixin.qq.com/s/bJMHYQYE4lT_E9FulCMQHQ

版权声明:本文由 云栈社区 整理发布,版权归原作者所有。




上一篇:随身Wi-Fi硬件骗局剖析:内部电路解析与“只能点灯”的真相
下一篇:CentOS 7 服务器监控进阶:可视化进程管理工具 htop 安装与实战指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 14:19 , Processed in 0.896001 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表