CAN/CAN FD PHY 特点:差分信号、隐性/显性电平、位定时与同步

各位,聊到 CAN 和 CAN FD 的物理层,很多人第一反应就是“差分信号”——没错,这是最核心的底子。但我见过不少硬件工程师,画板子时把 CAN_H 和 CAN_L 走线拉得乱七八糟,结果链路死活协商不上。说白了,你连差分对的基本规矩都没摸透,PHY 怎么可能正常工作?

这一章我就带大家把这三个关键点掰开揉碎:差分信号怎么传、隐性显性电平到底啥意思、位定时和同步为什么能决定你的总线能跑多快。这些都是我平时做故障诊断时反复验证的东西,实用得很。

差分信号:抗干扰的“双绞线兄弟”

CAN 总线用一对差分线——CAN_H 和 CAN_L。信号不是对地测量的,而是看两根线的电压差。我打个比方:两根线就像双胞胎兄弟,外界噪声来了,同时干扰他俩,但兄弟俩的差距基本不变。这样抗干扰能力就比单端信号强很多。

具体来说:

  • 隐性电平(Recessive):CAN_H 和 CAN_L 电压接近,差值为 0V 左右。此时总线处于空闲状态,允许任何节点发送。
  • 显性电平(Dominant):CAN_H 比 CAN_L 高约 2V(标准 CAN 为 2.5V vs 1.5V,差值为 1V)。主动拉低总线,覆盖隐性电平。

为什么显性能覆盖隐性?我习惯用“线与”逻辑理解:多个节点同时发送时,只要有一个发显性,总线就是显性。隐性相当于高阻态,显性相当于强下拉。这个特性是实现总线仲裁的基础。

经验之谈:我曾经遇到一个项目,CAN 通信偶尔丢帧,查了三天发现是差分走线在连接器附近绕了个直角,导致阻抗突变。换了个圆弧走线,问题立刻消失。记住,差分对要等长、等距、紧耦合,阻抗控制在 120Ω ± 10%。

隐性/显性电平:仲裁与位填充的秘密

隐性电平代表逻辑“1”,显性电平代表逻辑“0”。仲裁时,发送节点不断监测总线电平,如果自己发的隐性被别人的显性覆盖,就自动退出。这个机制我特别喜欢——没有主从,完全靠电平斗智斗勇。

电平的具体数值(以标准 CAN 为例)

参数 隐性 显性
CAN_H 电压 2.5V 3.5V
CAN_L 电压 2.5V 1.5V
差分电压 ≈0V ≈2V
逻辑值 1 0

注意,CAN FD 的显性电平跟标准 CAN 一样,但为了支持更高数据速率,收发器对共模电压要求更严格。我见过有的设计把 CAN FD 收发器用在标准 CAN 节点上,结果因为共模范围不匹配,偶尔出现位错误。

避坑指南:我曾经调试一套混合网络(CAN 2.0 和 CAN FD 共存),用了不同厂家的收发器。结果 FD 节点发高速数据时,老节点采样到错误的显性电平,触发错误帧。最后统一了收发器型号才解决。所以,电平兼容性不能只看协议,还要看物理层芯片的时序。

位定时与同步:决定你能跑多快

CAN 总线的位定时决定了通信速率。为什么有时候明明选了 500kbps 的波特率,实际却连不上?因为采样点位置不对。我教你一个口诀:“采样点,7/8;边沿同步,防漂移”。

位定时结构:

  • 同步段 (Sync_Seg):用于检测边沿,固定 1 个时间量子 (Tq)。
  • 传播段 (Prop_Seg):补偿物理延迟,通常 1~8 Tq。
  • 相位缓冲段 1 (Phase_Seg1):用于重同步,采样点前调整。
  • 相位缓冲段 2 (Phase_Seg2):采样点后调整。
  • 采样点:位于 Phase_Seg1 和 Phase_Seg2 之间。

标准推荐采样点在位时间的 70%~90%。CAN FD 数据段由于速率更高,采样点通常设在 80% 附近。我一般把采样点设置在 87.5%,容错性好。

同步机制分两种:

  1. 硬同步:总线从空闲变忙时,每个节点检测到下降沿(隐性转显性)后,立即复位位定时计数器。只发生在帧起始 (SOF)。
  2. 重同步:帧传输过程中,如果边沿不在预期位置,通过调整 Phase_Seg1/2 来对齐。说白了就是“追边沿”。

我建议你查一下 CAN 控制器的寄存器,里面通常有 SJW(同步跳转宽度)参数。SJW 最大能调多宽?一般限制在 1~4 Tq。如果总线时钟偏差大,就把 SJW 设大一点,但注意会降低抗干扰能力。

核心公式:
位时间 (t_bit) = (Sync_Seg + Prop_Seg + Phase_Seg1 + Phase_Seg2) × Tq
波特率 = 1 / t_bit
采样点位置 = (Sync_Seg + Prop_Seg + Phase_Seg1) / (同步段+传播段+相位1+相位2) × 100%

一张图看懂 CAN PHY 特点

下面这张 SVG 图总结了差分信号、电平状态和位定时的关系,我做故障诊断时经常拿来对照。

CAN PHY 核心特点结构图 CAN/CAN FD PHY 特点 差分信号 隐性/显性电平 位定时与同步 CAN_H / CAN_L 等长等距 特征阻抗 120Ω 共模噪声抑制 隐性:2.5V / 2.5V 显性:3.5V / 1.5V 线与仲裁(显性覆盖) 同步段 / 传播段 相位缓冲段 1 & 2 采样点 70%~90% 诊断关注点 差分线阻抗异常 → 信号反射 → 位错误 电平误差 → 仲裁失效 → 总线冲突 → 链路协商失败 采样点偏移 → 位同步丢失 → CRC/ACK 错误

实战案例:采样点设置不当导致链路协商失败

有一次客户反馈,他们的一款车载网关在换用 CAN FD 收发器后,只能通信 100kbps,选 500kbps 就报错。我远程让他们读控制器寄存器,发现采样点设在 62.5%——太靠前了。高速 FD 数据段的位时间短,采样点必须靠后,否则采样到不稳定的边沿。

我给出的方案:

  • 调整位时间配置:Prop_Seg = 2 Tq, Phase_Seg1 = 7 Tq, Phase_Seg2 = 2 Tq(总 12 Tq,采样点 83.3%)
  • SJW 设为 2 Tq,允许更大时钟偏差。
  • 检查晶振精度:必须 ±0.5% 以内,CAN FD 高速时要求更严。

调整后通信恢复正常。你看,位定时这东西,不是你随便写个参数就行的。我习惯用工具计算,比如 ST 的 CAN Bit Timing Calculator。你如果手算,务必核对采样点是否在范围内。

注意:CAN FD 的非标准位速率(比如 2Mbps 以上)要求收发器支持快速上升沿。我曾经碰过一款廉价收发器,驱动能力差,数据段边沿变缓,导致采样误判。换用 TI 的 TCAN1042 才稳定。所以选择 PHY 芯片时,不光看协议,还要看它的上升/下降时间指标。