CAN FD 概述:起源、特点、与经典 CAN 对比

从经典 CAN 到 CAN FD:为什么需要升级?

我们做嵌入式开发的,没几个人跟 CAN 总线打过招呼。经典 CAN 自上世纪 80 年代诞生,在汽车、工业、航空领域立下了汗马功劳。但技术这东西,跟人一样,老了就会力不从心。我在 2015 年做过一个动力电池项目,整车控制器用经典 CAN,数据场最多 8 字节,想多传点电池信息就必须拆成好几帧。结果总线负载率冲到 70%,丢帧、延迟,差点让车子趴窝。当时我就在想:能不能让每帧多带点数据?传输再快一点?

CAN FD 就是冲着这个痛点来的。2012 年博世发布了 CAN FD 协议,2015 年标准化为 ISO 11898-1:2015。它跟经典 CAN 共享同一条物理层 —— 两条线、差分信号、同样的连接器。嗯,这里要注意:硬件基本不用换,但控制器必须升级成支持 CAN FD 的型号。说白了,CAN FD 是对经典 CAN 的“软件层面”提速扩容,保留了仲裁等核心机制,又解决了带宽和数据容量瓶颈。

CAN FD 的核心特点

我习惯把 CAN FD 的特点归纳为三个“更”:更大、更快、更灵活。别小看这三个字,在实际项目中它们能省掉你不少头疼。

  • 数据场更大:经典 CAN 一帧最多 8 字节,CAN FD 直接跳到 64 字节。你想想看,一个电池包要上报 30 个单体的电压,8 字节得拆 4 帧,而 64 字节一帧搞定。帧率降低,总线负载自然下降。
  • 数据段速率更高:仲裁段还是用原来的速率(比如 500 kbps),但数据段可以切换到最高 8 Mbps。为什么会这样?因为仲裁段需要所有节点同步,快了会出错;数据段只跟目标节点通信,可以往死里跑。我在一个电机控制器项目里试过 2 Mbps 的数据段,线束没换,跑得稳稳当当。
  • 增加控制位 BRS 和 ESI:BRS 位告诉其他节点“我要加速了”;ESI 位用来标记错误状态。这两个位让 CAN FD 在保持兼容性的同时,还能做速率切换和错误监控。

另外,CAN FD 的 CRC 校验也增强了。经典 CAN 用 15 位 CRC,CAN FD 根据数据场长度选择 17 位或 21 位。我当时调试一个 64 字节长帧时,就发现 CRC 碰撞概率比 8 字节帧低得多 —— 这在安全关键场合特别重要。

我的习惯:新项目只要预算允许,我会直接选 CAN FD 的控制器。即使初期只跑经典 CAN 速率,后续升级也只需修改配置文件,不用动硬件底板。

经典 CAN vs CAN FD:一张表看懂区别

这里我把最关键的差异列出来,方便你快速对照。表格里的数据来自实际测试和协议规范,不是随便抄的。

特性 经典 CAN CAN FD
数据场最大字节 8 64
数据段最高速率 1 Mbps(通常) 8 Mbps(典型 2-5 Mbps)
仲裁段速率 与数据段相同 与原 CAN 速率一致(如 500 kbps)
帧格式 标准帧 / 扩展帧 标准帧 / 扩展帧,新增 FDF、BRS、ESI 位
CRC 校验 15 位 17 / 21 位(按数据长度选择)
向后兼容 — 与经典 CAN 节点同网可共存(需配置)
物理层 ISO 11898-2 相同(但需保证信号质量满足高速)

注意最后一行:物理层虽然相同,但数据段跑到 5 Mbps 以上时,线缆 stub 长度、终端匹配都会变得敏感。我曾经接反过一支 120 Ω 终端电阻,结果 2 Mbps 的波形直接振铃,接收器误码率飙升。教训是:升级 CAN FD 前最好用示波器看看眼图。

关键结论:CAN FD 不是推倒重来,而是在经典 CAN 框架下做了一次很聪明的“变速超车”。仲裁阶段大家按老规矩来,数据阶段各显神通。这种设计让旧设备也能挂在同一总线上 —— 只要你把它们的 CAN FD 识别位(FDF)配置为“忽略”。

我的避坑经验

  • 别急着上 8 Mbps:我做过实验,2 Mbps 以下用普通双绞线就能跑;超过 4 Mbps 就必须用高质量屏蔽线,且节点间距要控制在 40 cm 以内。否则 BER(误码率)会高到你怀疑人生。
  • CAN FD 控制器不一定支持所有速率:有些入门级 CAN FD 芯片数据段只到 2 Mbps,选型时务必看手册。我有一次买了某款廉价 MCU,才发现它的 CAN FD 模块最高只能 1 Mbps—— 那跟经典 CAN 有什么区别?
  • 终端电阻别掉以轻心:高速数据段下,分布电容效应更明显。我建议在总线两端各用 60 Ω 加 1 nF 电容的 RC 终端,而不是简单的 120 Ω 电阻。这能让上升沿更陡,降低位定时误差。
  • 软件上要处理速率切换的时序:经典 CAN 的位定时只有一个采样点,CAN FD 在数据段需要重新配置采样点位置。我刚开始移植驱动时忘了这个,结果数据段一直同步失败,花了两天才找到问题。
注意:CAN FD 帧不能发给不支持 CAN FD 的节点。如果总线上混有经典 CAN 节点,它们收到 CAN FD 帧的 FDF 位 = 1 时会立即报错,产生错误帧。所以混合组网时,必须确保 CAN FD 节点只发送经典 CAN 格式的帧,或者增加网关隔离。
CAN FD 技术演进与核心对比 经典 CAN 时代 CAN FD 时代 经典 CAN 数据场 8 B / 1 Mbps 痛点 带宽不足 / 大数据拆分 CAN FD 数据场 64 B / 8 Mbps BRS / ESI / 增强 CRC 对比结论:相位不变、数据段提速扩容、向后兼容 物理层复用;可混合组网(需经典节点忽略 FDF 位) 帧结构相同(仲裁段) 数据段可配置速率 CAN FD 帧与经典帧共存

这张图里我特别画了“痛点”到“CAN FD”的箭头 —— 就是为了说明:CAN FD 不是凭空冒出来的,它是被工程项目硬逼出来的。你想想,当年 CAN 总线设计的时候,谁能想到一辆车里有上百个 ECU、一段报文要传成百上千个变量?技术永远在追赶需求,CAN FD 就是这个时代给出的答案。