第2章 CAN FD物理层:从电平到信号的硬核基础

物理层,说白了就是信号在线上怎么跑的问题。很多工程师一上来就扎进协议栈,结果板子调不通,拿示波器一看,波形惨不忍睹。嗯,我当年也干过这种事。

CAN FD的物理层,其实和经典CAN基本一致,只是速率更高了,要求也更苛刻了。咱们一个一个说。

2.1 差分信号与总线电平

CAN总线用两根线:CAN_H和CAN_L。它不靠对地电压传数据,而是靠两根线的电压差。这就是差分信号。

为什么用差分?抗共模干扰。你想想看,如果两根线同时被外界噪声抬高了1V,差值不变,信号就不受影响。这在工业现场、汽车引擎舱里特别重要。

总线电平分两种状态:

  • 显性(Dominant):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分电压约2V。逻辑上代表“0”。
  • 隐性(Recessive):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,差分电压约0V。逻辑上代表“1”。

关键点:显性电平会“覆盖”隐性电平。也就是说,只要有一个节点发显性,总线就是显性。这就是CAN总线仲裁的物理基础。

我在项目中遇到过一个问题:某次调试,总线一直处于隐性状态,怎么都拉不低。查了半天,发现是CAN收发器的VCC供电虚焊了。收发器没电,自然拉不出显性电平。这种坑,你排查的时候要留意。

2.2 CAN FD的位时序与采样点

位时序,就是每个bit在时间轴上的划分。CAN FD把1个bit分成4段:

段名称 作用 说明
同步段(SS) 同步所有节点 固定为1个Tq(时间量子)
传播段(PTS) 补偿物理延迟 线缆、收发器延迟都算在这里
相位缓冲段1(PS1) 采样点前调整 可编程,用于重同步
相位缓冲段2(PS2) 采样点后调整 可编程,用于重同步

采样点,就是接收器读取总线电平的那个时刻。它位于PS1和PS2之间。我个人习惯把采样点设在75%~85%的位置。为什么?因为越靠近bit末尾,信号越稳定,抖动越小。

我的经验:采样点设得太靠前(比如50%),容易采到振铃或反射;设得太靠后(比如90%),留给时钟误差的余量就少了。我一般取80%,稳得很。

CAN FD在数据段可以切换到更快的位时序。仲裁段用1Mbps,数据段切到4Mbps甚至8Mbps。这时候采样点要重新算,不能偷懒用同一套参数。

2.3 CAN FD的传输速率

经典CAN最高1Mbps,CAN FD把数据段推到了最高8Mbps。但注意,这是理论值。

实际能跑多快,取决于:

  • 总线长度:速率越高,允许的总线越短。8Mbps下,总线长度一般不超过10米。
  • 节点数量:节点越多,寄生电容越大,信号边沿变缓。
  • 收发器性能:不是所有收发器都支持8Mbps。选型时要看datasheet里的“Data Rate”参数。

我曾经在一个项目里,为了省成本用了便宜的收发器,结果数据段切到5Mbps就丢包。换了个支持CAN FD的收发器,问题立刻解决。嗯,有些钱不能省。

仲裁段速率通常固定,比如500kbps或1Mbps。数据段速率可以动态切换。切换点就在BRS(Bit Rate Switch)位。这个位为隐性时,用仲裁段速率;为显性时,切换到数据段速率。

注意:切换速率时,所有节点的采样点必须重新同步。如果某个节点的采样点没跟上,就会产生位错误。我见过有人把BRS位搞反了,结果整个网络瘫痪。

2.4 终端电阻与总线拓扑

终端电阻,说白了就是防止信号反射的。CAN总线要求在两端各接一个120Ω电阻。为什么是120Ω?因为双绞线的特性阻抗大约是120Ω,匹配了反射就最小。

拓扑结构:CAN总线必须是直线型,不能有星型或环型。分支(stub)越短越好,最好不超过30cm。

我遇到过最离谱的一次:客户把CAN总线接成了星型,每个分支还接了2米长。结果信号反射得一塌糊涂,波特率降到100k才能勉强通信。后来改成直线型,1Mbps稳如老狗。

终端电阻检查方法:断电状态下,用万用表量CAN_H和CAN_L之间的电阻。如果总线两端各有一个120Ω,量出来应该是60Ω。如果量出来是120Ω,说明只接了一个终端电阻;如果是0Ω,说明短路了。

2.5 物理层故障排查

物理层出问题,表现千奇百怪。但归根结底,就三类:短路、断路、共模干扰。

短路

  • CAN_H对地短路:总线一直显性,所有节点发不出隐性位。
  • CAN_L对电源短路:总线电平异常,收发器可能烧毁。
  • CAN_H和CAN_L短路:差分电压始终为0,总线一直隐性。

排查方法:断电测电阻,或者上电测电压。正常时CAN_H对地约2.5V,CAN_L对地约2.5V。如果偏差超过0.5V,就要怀疑了。

断路

  • 一根线断了:信号还能通,但共模抑制能力下降,容易受干扰。
  • 两根线都断了:通信完全中断。

排查方法:用示波器看波形。断线时波形会变得很奇怪,比如幅值变小、边沿变缓。

共模干扰

这是最隐蔽的故障。表现为:偶尔丢帧、错误帧增多、通信不稳定。原因通常是接地不良或外部强电磁场。

我曾经在一个电机驱动项目里,CAN总线老是丢帧。查了三天,发现是电机的地线和CAN的地线没分开,大电流回流把共模电压抬高了。后来把地线分开走,问题消失。

排查共模干扰的利器:用示波器看CAN_H和CAN_L对地的波形。正常时两者应该对称,如果出现同向的毛刺或偏移,就是共模干扰。这时候加共模扼流圈或者改善接地,往往能解决。

好了,物理层就聊这么多。下一章咱们进数据链路层,看看CAN FD的帧结构到底长什么样。