2、CAN FD物理层基础:差分信号与总线电平

我们做CAN FD,很多朋友一上来就盯着位时间、采样点这些参数调。但我要说,有个前置问题必须先搞明白——物理层。物理层要是不稳,你后面配置再完美的采样点也是白搭。

差分信号和总线电平,这俩是CAN FD通信的“地基”。你想想看,车里的电磁环境有多恶劣?点火线圈、电机、各种开关……传统单端信号在这种地方分分钟被干掉。差分,说白了就是专门为解决这个问题而生的。

2.1 为什么非得是差分信号?

CAN总线用两根线——CAN_H 和 CAN_L。信号不靠单根线对地电压来传,而是靠这两根线之间的电压差。这就是差分信号的本质。

核心思路:“压差传信,共模抗扰”——信号质量看 CAN_H - CAN_L,外部干扰对两根线的影响差不多,一减就被抵消了。

我刚开始做嵌入式时,有次晚上测试新做的CAN节点,一直报错。查了半天,发现CAN_H和CAN_L的线长差了好几厘米,导致抗干扰变差。后来两根线严格等长走,问题没了。这种小细节,差分对的要求就是严格。

特征 单端信号 差分信号(CAN FD)
参考地 需要 不需要(依赖线间压差)
抗共模干扰 弱 强(共模干扰被抵消)
电磁辐射 较大 小(两根线辐射相互抵消)
信号摆幅 通常 0~5V 或 0~3.3V 约 2V 压差(可靠稳定)
适合场景 短距离、低噪声 长距离、强电磁干扰(汽车、工业现场)

个人习惯: 凡是车上用的总线,我绝不会考虑单端方案。差分信号虽然多两根线,但换来的是你后期少折腾很多EMC问题。

差分还有一个隐性好处——共模电压范围宽。CAN收发器的共模范围一般能做到 ±12V 甚至 ±30V。我曾遇到过,地电位差相差十几伏,485早就挂了,CAN照样跑。

2.2 显性与隐性:总线电平的两张脸

CAN FD 总线电平就两种状态:显性(Dominant) 和 隐性(Recessive)。

逻辑上讲:隐性对应逻辑“1”(总线空闲时的状态),显性对应逻辑“0”(主动拉低)。但这个对应关系跟TTL/CMOS不一样,你千万别搞混。

状态 逻辑值 CAN_H 电压 CAN_L 电压 压差 (CAN_H - CAN_L)
显性 0 约 3.5V 约 1.5V 约 2.0V
隐性 1 约 2.5V 约 2.5V 约 0V

你看,隐性的时候两根线都是2.5V。显性的时候CAN_H跳高,CAN_L拉低。有一个关键机制:总线仲裁的时候,显性位会“覆盖”隐性位。比如两个节点同时发,一个发“0”一个发“1”,发“1”的节点看到总线电压差被拉成显性了,就知道自己仲裁输了,自动退出发送,只等着收。这就是无破坏逐位仲裁。

注意:显性状态不是两根线各自拉到电源和GND,而是收发器内部产生约2V压差。你不能用万用表量完一根线就去判断电平,必须测差分压差。

2.3 物理层架构:收发器是主角

CAN控制器(内部叫CAN核)是数字逻辑,它只能输出0/1的数字电平。而我们在总线上需要差分信号,这活谁干?CAN收发器。

收发器的内部结构其实就是两套驱动器:一套把“0”变成差分显性,一套输出“1”时释放总线让端接电阻自己拉回隐性。具体来说:

  • TX → 总线:控制器给高电平(1)时,收发器输出隐性;给低电平(0)时,输出显性。
  • 总线 → RX:收发器把差分压差转成单端数字电平送给控制器。
  • 终端电阻:总线两端各一个120Ω,匹配特性阻抗,减少信号反射。

我曾在这上面吃过亏。有次调试发现CAN FD跑高速时(比如5Mbps)波形反射特别厉害,采样点附近有个毛刺。查了半天,原来总线一端缺了120Ω终端电阻。加上去之后,波形干净得跟教科书似的。所以终端电阻不是摆设,高速CAN FD下尤其关键。

实际经验:判断总线连接是否正常,量CAN_H和CAN_L之间的电阻——正常的总线(加电时)两端120Ω并联的结果是60Ω。如果你量出来是120Ω,那肯定有一端没接终端电阻。

下面这张图,我把它叫做“CAN FD物理层信号流转图”。它讲了从控制器到总线再到控制器,信号怎么走。你看了这个图,后面理解位时间配置和采样点位置会更顺。

CAN FD 物理层信号流转图 节点A CAN控制器 (CAN核) 节点A CAN收发器 (驱动/接收) 差分传输线 CAN_H CAN_L 节点B CAN控制器+收发器 终端电阻 每端120Ω,并联后60Ω 信号路径与电平转换 ① 节点A的CAN核 → 输出数字位(0或1) ② 收发器 → 将数字位转为差分信号(显性/隐性压差) ③ 差分信号沿总线传输 → 节点B的收发器还原为数字位 → CAN核解析

2.4 你该怎么检查物理层?一个经验清单

物理层出问题,上层protocol分析得再好也白搭。我列个清单,你可以对照着排查:

  1. 终端电阻到位吗?整条总线两端各一个120Ω,断电量CAN_H与CAN_L之间的阻值,应在60Ω左右。
  2. 差分信号压差够吗?显性态时CAN_H与CAN_L的压差应≥1.5V,通常2.0V左右。
  3. 隐性态共模电压稳定吗?两线对地电压应都在2.5V左右,偏差太大说明对地连接有问题。
  4. CAN_H与CAN_L有没有接反?我见过不少因为两根线交叉导致节点无法通信的。测波形确认:显性时CAN_H > CAN_L。
  5. 总线拓扑正确吗?CAN FD要求线性拓扑、短支线。T型分支在高速下会引入信号反射,破坏采样。

再次强调:CAN FD 的物理层标准(ISO 11898-2:2016)跟传统CAN比,对时间精度要求更高。但在底层物理连接上,差分信号的规则一模一样。把这块搞扎实了,后面调位时间和采样点才有底气。