1、CAN FD 协议基础:CAN 协议简介、CAN 与 CAN FD 的区别与演进

1.1 先从传统 CAN 聊起

CAN 总线,全称 Controller Area Network,1980 年代由 Bosch 开发,最初用在汽车里。说实话,这玩意儿活得比我想象中久多了。我入行那会儿,车上也就几十个 ECU,现在一辆高端车轻松上百个节点,CAN 还在扛着。

CAN 总线最核心的几样东西:

  • 多主架构 – 任何节点都能发消息,靠仲裁场决定谁先发。ID 越小优先级越高,这个设计我特别喜欢,简单粗暴有效。
  • 差分信号 – CAN_H 和 CAN_L,抗干扰能力强。我做现场总线调试时,拨下示波器一看,两线电压差明显,心里就踏实了。
  • 帧格式 – 数据帧、远程帧、错误帧、过载帧。标准帧 11 位 ID,扩展帧 29 位 ID。
  • 最高 1 Mbps – 实际上常用 250 kbps 或 500 kbps。我记得早年有个项目,用 1 Mbps 跑 40 cm 线,结果反射严重,后来老老实实降到 500 kbps。

它的局限也很清楚:每帧最多 8 字节数据,总线速率固定,不能分段。早年还够用,但到 2010 年后,ECU 升级固件、ADAS 传感器数据一上来,8 字节就成了瓶颈。我参与过一个车载雷达项目,目标列表动不动就几十个,一包塞不下,得分两三帧发,还要用时间戳对齐,相当麻烦。

1.2 为什么需要 CAN FD?

行业内其实挺早就开始琢磨怎么提速、扩容。Bosch 和几个芯片厂一起搞了 CAN FD(Flexible Data-rate),说白了就是给 CAN 打了一针强心剂。

核心驱动两个:

  • 数据量大了 – 标定、刷写、诊断、传感器融合,8 字节真不够用。
  • 带宽不够 – 传统 CAN 1 Mbps 封顶,而很多场景需要更快的刷新率。

我 2016 年接手过一个项目,ECU 刷写用传统 CAN 要 15 分钟,换成 CAN FD 后,数据场 64 字节,速率切到 2 Mbps,刷写时间直接降到 3 分钟。客户当场就竖大拇指了。

1.3 CAN 与 CAN FD 到底差在哪?

这里我把关键差异整理成一张表,你对照着看就清楚了:

对比项 传统 CAN CAN FD
仲裁场速率 固定(如 500 kbps) 固定(不变,保证兼容)
数据场速率 与仲裁场相同,不可变 最高可达 8 Mbps(灵活切换)
数据长度 0~8 字节 0~64 字节
DLC 编码 4 位,0~8 对应 0~8 字节 4 位,0~8 对应 0~8,9~15 对应 12/16/20/24/32/48/64 字节
CRC 保护 15 位 CRC 17 位(< 10 字节)或 21 位(>= 10 字节)
填充位规则 严格 5 个相同位后填充 数据场可选禁用填充(加速)
收发器兼容性 标准 ISO 11898-2 需 CAN FD 收发器,但物理层相同
关键区别一句话: CAN FD 保留了 CAN 的仲裁机制和物理层,只在数据场部分提速并扩容,做到向下兼容。

1.4 演进路径其实很清晰

从 CAN 2.0A/B 到 CAN FD,再到后面的 CAN XL,这是一条很明显的升级链路。我画了张图帮你理清关系:

CAN → CAN FD → CAN XL 演进图 传统 CAN 2.0 1 Mbps 固定速率 数据场 8 字节 15 位 CRC 严格位填充 CAN FD 仲裁场速率不变 数据场最高 8 Mbps 数据场 64 字节 17/21 位 CRC CAN XL(未来) 数据场 > 2000 字节 更高速率 兼容 CAN FD 演进核心逻辑 保留总线仲裁和物理层 → 只升级数据场速率和容量 → 向下兼容 注:CAN XL 标准仍在制定中,但方向已明确

从这张图能看出来,CAN 家族的三代产品都在做同一件事:保住总线竞争机制这个核心竞争力,同时让数据通道越来越宽、越来越快。CAN FD 正是当前最均衡的选择——既有兼容性,又解决了大部分带宽瓶颈。

1.5 实际使用时要注意什么?

小心兼容陷阱: CAN FD 节点可以与 CAN 节点挂在同一条总线上,但前提是 CAN FD 节点不能发 FD 帧给不支持 FD 的节点。我见过一个案例:新 ECU 默认发 FD 帧,老节点收到后直接报错,总线直接“挂掉”。一定要在配置里明确哪些节点支持 FD,或者靠设备描述文件(如 DBC 中的 FD 标志位)做区分。

还有一点,CAN FD 的收发器虽然电气特性与 CAN 相同,但市面上有些“CAN 收发器”声称支持 5 Mbps,实际抖动很大。我建议你选型时认准 ISO 11898-2:2016 认证的器件,特别是做 4 Mbps 以上应用时,买回来先上眼图,确认回环测试通过。

个人习惯: 我在项目初期会先画一版总线负载预算表。传统 CAN 负载率控制在 30% 以下,CAN FD 因为数据场速率高,通常 50% 以下都能接受,但要注意仲裁场仍然跑在低速,这部分负载不能忽略。我的公式很简单:仲裁场占用时间 + 数据场占用时间,两段加起来算总带宽占用率。

1.6 一点点演进小结

这些年我做过不少 CAN 相关项目,从纯粹 CAN 2.0 到混合 CAN FD,再到尝试预研 CAN XL。说实话,CAN FD 是目前最成熟、性价比最高的升级选项。它没有改变你熟悉的仲裁、错误处理、位时序这些东西,只是给你多了两把利器:速率可变 和 数据场变长。

接下去进入实战环节前,先把基础打牢。记住:CAN FD 不是颠覆,是改进。你只要吃透仲裁场和数据场这两段的不同表现,后面配参数时就能游刃有余。