第1章:CAN FD协议概述

1.1 从CAN 2.0到CAN FD的演进

说实话,我刚入行那会儿,CAN 2.0还是绝对的主流。那时候做车载项目,8字节的数据场基本够用。但随着汽车电子化程度越来越高,尤其是OTA升级、ADAS这些功能冒出来,8字节就明显不够用了。

为什么会这样?你想想看,一个ECU固件升级包动辄几兆字节。用CAN 2.0传,每次只能塞8个字节,还得加上各种协议开销。我见过一个项目,升级一个简单的BMS固件,整车在产线上等了快20分钟。客户都快疯了。

CAN FD(Flexible Data-Rate)就是在这样的背景下诞生的。它保留了CAN 2.0的核心框架,但做了两个关键改进:

  • 可变速率:仲裁段用标准速率(通常500kbps),数据段可以飙到2Mbps甚至更高
  • 数据场扩展:从8字节直接跳到64字节

我记得第一次在实验室跑通CAN FD通信时,看着示波器上那压缩的数据段波形,心里就一个念头:这玩意儿靠谱。

1.2 CAN FD的核心优势

更高的带宽

传统CAN 2.0的极限速率是1Mbps,但实际项目中很少超过500kbps。CAN FD在数据段可以跑到2Mbps、5Mbps,甚至8Mbps(取决于收发器)。

我做过一个对比测试:同样传输512字节数据,CAN 2.0需要64帧,耗时约12ms;CAN FD只用8帧,耗时不到1.5ms。差距接近10倍。

关键点:CAN FD的带宽提升不是线性的。数据场越大、速率越高,优势越明显。64字节数据场配合2Mbps速率,理论吞吐量是CAN 2.0的8倍以上。

更大的数据场

64字节意味着什么?

  • 一个完整的GPS定位数据包(经纬度+高度+速度+时间戳)可以一帧搞定
  • 电池管理系统(BMS)的单体电压数据,以前要拆成4-5帧,现在一帧搞定
  • 固件升级的块大小从8字节变成64字节,传输效率大幅提升

我在一个工业自动化项目里,用CAN FD传输电机控制参数。以前用CAN 2.0,每次参数更新要发6帧,还得做帧序管理。换成CAN FD后,一帧全搞定,代码量直接砍半。

1.3 CAN FD与CAN 2.0的兼容性

这个问题我经常被问到:老设备还能用吗?

答案是:物理层完全兼容,协议层部分兼容

特性 CAN 2.0 CAN FD 兼容性
物理层 差分信号 差分信号 完全兼容
仲裁机制 CSMA/CA CSMA/CA 完全兼容
数据场长度 8字节 64字节 CAN FD节点可收CAN 2.0帧
速率 固定 可变 需配置

注意:CAN FD节点可以接收CAN 2.0帧,但CAN 2.0节点无法处理CAN FD帧。如果总线上混用两种节点,必须确保CAN FD帧不会被老节点误接收。我见过一个案例,就是因为没做ID过滤,老节点收到CAN FD帧后直接挂死。

实际项目中,我建议的做法是:

  • 新设计全部用CAN FD控制器(向下兼容)
  • 老节点保留,但通过网关隔离
  • 同一网段内要么全是CAN FD,要么全是CAN 2.0

1.4 CAN FD的应用领域

车载网络

这是CAN FD的主战场。现在的智能汽车,一个域控制器可能就要处理几十个传感器数据。传统CAN 2.0的带宽根本扛不住。

我参与过的一个项目,用CAN FD做车载诊断(UDS on CAN FD)。以前读DTC故障码,要来回发好几轮。现在一帧就能把全车故障码拉回来,诊断效率提升明显。

工业自动化

工业现场对实时性要求极高。CAN FD的高带宽和低延迟特性,很适合做伺服驱动器的同步控制。

我记得有个客户做多轴机器人,用CAN 2.0时,8个轴的同步周期只能做到5ms。换成CAN FD后,直接压到1ms以内。机器人跑起来那叫一个顺滑。

医疗设备

医疗设备对数据传输的可靠性和实时性要求很苛刻。CAN FD的CRC校验机制比CAN 2.0更强(17位或21位CRC),误码率更低。

我在一个CT机项目里用过CAN FD。扫描数据量大,而且不能丢帧。CAN FD的64字节数据场加上强CRC,正好满足需求。

个人经验:选型时别只看速率。CAN FD的真正价值在于:用更少的帧传更多的数据,从而降低总线负载率。我一般建议总线负载率控制在30%以下,CAN FD更容易做到这一点。

小结

CAN FD不是颠覆性的新技术,它是在CAN 2.0基础上的合理演进。说白了,就是把老CAN的短板补上了——带宽不够就提速率,数据场太小就扩容量。

从我这些年做项目的经验来看,CAN FD的普及速度比预想的快。2015年刚出标准时,大家还在观望。现在新出的MCU,基本都集成了CAN FD控制器。如果你还在用CAN 2.0做新设计,我建议你认真考虑一下CAN FD。

下一章,我们会深入CAN FD的物理层,看看那些波形和时序到底是怎么回事。