第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的帧结构到底长什么样。