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物理层信号流转图”。它讲了从控制器到总线再到控制器,信号怎么走。你看了这个图,后面理解位时间配置和采样点位置会更顺。
2.4 你该怎么检查物理层?一个经验清单
物理层出问题,上层protocol分析得再好也白搭。我列个清单,你可以对照着排查:
- 终端电阻到位吗?整条总线两端各一个120Ω,断电量CAN_H与CAN_L之间的阻值,应在60Ω左右。
- 差分信号压差够吗?显性态时CAN_H与CAN_L的压差应≥1.5V,通常2.0V左右。
- 隐性态共模电压稳定吗?两线对地电压应都在2.5V左右,偏差太大说明对地连接有问题。
- CAN_H与CAN_L有没有接反?我见过不少因为两根线交叉导致节点无法通信的。测波形确认:显性时CAN_H > CAN_L。
- 总线拓扑正确吗?CAN FD要求线性拓扑、短支线。T型分支在高速下会引入信号反射,破坏采样。
再次强调:CAN FD 的物理层标准(ISO 11898-2:2016)跟传统CAN比,对时间精度要求更高。但在底层物理连接上,差分信号的规则一模一样。把这块搞扎实了,后面调位时间和采样点才有底气。