2、CAN FD物理层:双线差分信号、显性电平与隐性电平、位时间与采样点、CAN FD的物理层变化(更快的位速率)

好,咱们进入第二章。物理层这东西,说实话,很多做上层软件的朋友容易忽略。但我要说,你如果不懂物理层,遇到总线故障时基本就是两眼一抹黑。我自己就吃过这个亏——有次调试一个车载网关,死活收不到数据,最后发现是共模电压漂了。嗯,从那以后,我对物理层就格外上心。

2.1 双线差分信号:CAN的“两条腿”

CAN总线物理层最核心的设计,就是双线差分信号。说白了,就是两根线——CAN_H和CAN_L——一起干活。信号不是靠单根线对地电压,而是靠两根线之间的电压差来传递。

为什么这么设计?抗干扰。你想想看,汽车里电磁环境多恶劣,电机、点火线圈、各种开关,全是噪声源。如果单线传输,噪声叠加在信号上,接收端根本分不清。但差分信号不一样——噪声同时耦合到两根线上,一减就没了。这就是共模抑制。

我在项目中遇到过一件事:某次EMC测试,辐射超标严重。查了半天,发现是CAN线双绞的节距不对。双绞线每英寸绞合次数是有讲究的,绞得不够密,共模抑制能力就下降。后来换了线束,问题解决。所以,别小看这两根线。

关键点:CAN_H和CAN_L在静态时电压均为2.5V左右(隐性),差分电压为0V。显性时,CAN_H升到3.5V,CAN_L降到1.5V,差分电压约2V。

2.2 显性电平与隐性电平:总线上的“0”和“1”

CAN总线上只有两种状态:显性(Dominant)和隐性(Recessive)。

  • 隐性电平:对应逻辑“1”。CAN_H和CAN_L都是2.5V,差分电压≈0V。这时候总线处于“放松”状态,任何节点都可以把它拉成显性。
  • 显性电平:对应逻辑“0”。CAN_H被拉到3.5V,CAN_L被拉到1.5V,差分电压≈2V。显性会“覆盖”隐性——只要有一个节点发送显性,总线就是显性。

这里有个重要的仲裁机制:多个节点同时发送时,谁先发显性位(0),谁就赢得总线。这就是CAN的非破坏性逐位仲裁。我刚开始学的时候觉得这设计太巧妙了——不需要额外的仲裁器,靠物理层就搞定了。

注意:千万不要把CAN_H和CAN_L接反。接反了,显性和隐性就颠倒了,整个网络无法通信。我曾经见过一个同事,调试了一整天,最后发现是DB9接头焊反了——嗯,这种事谁没经历过呢。

2.3 位时间与采样点:什么时候“读”数据

CAN通信是同步的,每个位都有固定的时间长度。这个位时间被分成四段:

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

采样点就位于PS1和PS2之间。说白了,就是在这个时刻,接收器去读总线上的电平。采样点的位置非常关键——太靠前,信号还没稳定;太靠后,可能已经进入下一位了。

我个人习惯把采样点设置在87.5%左右的位置。为什么?因为CAN总线有传播延迟,信号从发送端传到最远节点需要时间。采样点靠后一些,能保证所有节点都看到稳定的电平。当然,具体数值要看你的网络拓扑和位速率。

经验之谈:我曾经在一个长距离(约40米)的CAN网络中调试,默认采样点设在75%,结果总是偶发错误帧。后来把采样点调到85%,问题消失。说白了,采样点就是给信号留出“稳定时间”。

2.4 CAN FD的物理层变化:更快的位速率

CAN FD最大的变化,就是数据段可以跑得更快。传统CAN最高1Mbps,CAN FD在数据段可以到5Mbps甚至更高。但这不是白来的,物理层要做一些调整。

第一,收发器要升级。传统CAN收发器(如TJA1050)只能支持到1Mbps。CAN FD需要更高速的收发器,比如TJA1044、TJA1463等。这些收发器的上升沿和下降沿更陡,能支持更高的位速率。

第二,位时序要重新算。高速意味着位时间更短。比如5Mbps时,一个位只有200ns。这么短的时间,采样点的精度就变得极其重要。我建议用CAN FD控制器自带的位时序计算工具,手动算容易出错。

第三,终端电阻和线缆质量要求更高。高速信号对反射更敏感。终端电阻必须精确匹配(120Ω),线缆的双绞质量和特性阻抗也要达标。否则,信号反射会导致位错误。

核心变化总结:

  • 仲裁段:仍使用传统CAN的位速率(通常125k-1Mbps),保证兼容性
  • 数据段:切换到高速率(最高5Mbps+),提升吞吐量
  • 收发器:必须支持CAN FD的高速切换能力
  • 采样点:高速段建议设置在80%-85%之间,留足余量

我记得第一次用CAN FD时,觉得不就是把速率调高嘛,有什么难的。结果一上5Mbps,总线全是错误帧。查了半天,发现是线束太长(超过5米),信号反射太严重。后来把速率降到2Mbps,线束长度控制在3米以内,才稳定下来。所以,高速CAN FD对物理层的设计要求真的很高。

好了,这一章就到这里。物理层是基础,基础不牢,地动山摇。下一章我们讲CAN FD的数据链路层,看看帧结构是怎么设计的。