3、CAN总线高级:CAN FD协议演进、CAN与CAN FD兼容性设计、CAN网络拓扑与终端电阻匹配

3.1 CAN FD协议演进——从8字节到64字节的跨越

说实话,我刚入行那会儿,CAN 2.0的8字节数据场用得好好的。但后来车上ECU越来越多,OTA升级、刷写Bootloader这些需求一上来,8字节就明显不够用了。你想想看,一个几百KB的固件包,用标准CAN一帧一帧地发,那得等到猴年马月?

CAN FD(Flexible Data-Rate)就是在这样的背景下诞生的。它保留了CAN总线的物理层和仲裁机制,但做了两个关键改进:

  • 数据场扩展到64字节——单帧能装更多数据,传输效率直接翻了好几倍
  • 可变速率传输——仲裁段用标准速率(比如500kbps),数据段可以切换到高速(比如2Mbps甚至5Mbps)

我在做某款新能源车型的网关项目时,遇到过OTA刷写时间过长的问题。改用CAN FD后,刷写时间从原来的40分钟缩短到了12分钟。嗯,这个差距,客户一眼就能看出来。

核心区别速览:

特性经典CANCAN FD
数据场长度最多8字节最多64字节
传输速率固定(如500kbps)仲裁段固定,数据段可切换高速
CRC校验15位/17位17位/21位(更安全)
帧格式标准帧/扩展帧兼容标准帧/扩展帧,新增FD帧

3.2 CAN与CAN FD兼容性设计——混网共存的那些坑

很多朋友问我:「老车型的CAN节点还能不能跟CAN FD节点一起用?」我的回答是:能,但得小心。

CAN FD的物理层和经典CAN完全一样,都是差分信号。所以从硬件上看,它们可以挂在同一条总线上。但问题出在协议层——CAN FD节点发送FD帧时,数据段速率会突然变快,经典CAN节点根本认不出来,直接报错。

我个人的习惯是,在网关设计时做如下处理:

  • 分网段隔离——CAN FD节点和经典CAN节点尽量分到不同的物理网段,通过网关桥接
  • 如果必须混接——在CAN FD节点上配置「仅发送经典CAN帧」模式,或者使用支持CAN FD的收发器(如TJA1044)
  • 终端电阻统一——不管哪种节点,终端电阻都按120Ω来配,这个不能乱改

避坑指南:我曾经在一个项目中,把CAN FD节点和经典CAN节点直接挂在一起,结果经典CAN节点疯狂报错,总线利用率直接飙到90%以上。后来排查发现,是CAN FD节点在发送FD帧时,数据段速率切换到了2Mbps,经典CAN的控制器根本跟不上。解决办法很简单——在CAN FD节点的配置里关掉FD功能,让它只发经典CAN帧。

3.3 CAN网络拓扑与终端电阻匹配

说到拓扑,很多教科书上画的是直线型总线。但实际车上,你根本做不到完美的直线。ECU分布在车身的各个角落,线束得绕来绕去。所以实际拓扑往往是「菊花链」或者「星型+分支」的混合结构。

这里有个关键点:终端电阻的位置。标准CAN总线要求两端各接一个120Ω电阻,目的是匹配特性阻抗,防止信号反射。但车上节点多,线束长,如果终端电阻放错了位置,信号质量会变得很差。

我建议的做法是:

  1. 找到物理上的最远两端——把终端电阻放在这两个节点上
  2. 分支长度尽量短——分支超过30cm时,信号反射就会明显增加
  3. 不要用「T型」分支——T型分支会造成阻抗不连续,我见过太多因为T型分支导致通信失败的案例

注意:有些工程师为了省事,在每个节点上都焊一个120Ω电阻。这样做会导致总线等效电阻远低于60Ω,驱动能力下降,信号幅值变小。正确的做法是:整条总线只保留两个终端电阻,其他节点全部去掉。

我记得有一次,客户反馈某款车型的CAN总线在低温环境下偶尔丢帧。我们排查了整整两天,最后发现是终端电阻的焊接点有虚焊,低温时接触电阻变大,导致阻抗不匹配。嗯,从那以后,我对终端电阻的焊接质量就格外上心。

3.4 实际设计中的几个小技巧

  • CAN FD的速率选择——数据段速率建议不超过2Mbps,再高的话对线束和连接器的要求就太苛刻了
  • 总线长度与速率的关系——速率越高,总线长度越短。2Mbps时,总线长度最好控制在40米以内
  • 使用CAN FD时,记得更新收发器——老款的TJA1050不支持CAN FD的高速模式,得换成TJA1044或TJA1145

说白了,CAN FD不是颠覆性的技术,它是在经典CAN的基础上做了「加法」。但正是这些加法,让CAN总线在车载网络里又续了十年的命。我个人觉得,未来三到五年,CAN FD会逐步取代经典CAN,成为车载网络的主流。

好了,这一章的内容就到这里。下一章我们会聊CAN网络诊断与错误处理,到时候再细说那些让人头疼的Bus-Off和错误帧。