CAN FD 基础知识
各位好,我是老周。在汽车电子这行摸爬滚打了十几年,从最早的 CAN 2.0 一直做到现在的 CAN FD。每次跟刚入行的同事聊起总线负载率,我总爱先问一句:「你见过 CAN 线被堵死是什么样吗?」 嗯,见过的人永远不会忘记那场景——整个网络像死了一样,关键报文死活发不出去。
要想搞懂 CAN FD 的负载率计算,咱们得先把地基打牢。这一章咱们就聊聊 CAN FD 到底是从哪儿来的,跟传统 CAN 比有什么好处,以及它现在都用在哪里。我尽量用大白话讲,但技术细节一点不会少。
1.1 CAN FD 的起源与标准
传统 CAN(2.0 A/B)是 1986 年由 Bosch 起草的。说实话,设计之初谁也没想到它能活这么多年。早期传输速率最高 1 Mbps,后来因为电气限制,大家实际用的多是 500 kbps 或者 250 kbps。报文数据段最多 8 个字节。这在 90 年代完全够用——一辆车上没多少个 ECU,信号量也小。
但到了 2010 年以后,情况变了。我亲身经历过一个项目:某款高端车型的网关,光诊断报文就把 500 kbps 的 CAN 总线占到了 70% 以上,留给实时控制报文的窗口越来越小。这时候 Bosch 坐不住了,2012 年正式推出了 CAN FD。
CAN FD 的核心改进两句话就能说清:
- 数据段可以跑到 8 Mbps(取决于网络拓扑和收发器)
- 一帧报文最多能带 64 字节数据
标准方面,CAN FD 在 2015 年被纳入 ISO 11898-1:2015。说白了,它是在原 CAN 物理层和数据链路层上做的扩展,所以大部分硬件接口、收发器、线束都可以复用。我建议项目选型时优先看支持 CAN FD 的控制器,哪怕现在只跑经典 CAN,将来升级也方便。
1.2 CAN FD 与传统 CAN 的区别
很多人以为 CAN FD 只是「跑得快、装得多」,其实没那么简单。咱们直接上个表格对比最核心的差异:
| 对比项 | 传统 CAN (2.0A/B) | CAN FD |
|---|---|---|
| 数据段速率 | 最高 1 Mbps | 最高 8 Mbps(通常 2-5 Mbps) |
| 每帧最大数据 | 8 字节 | 64 字节 |
| 仲裁段速率 | 与数据段相同 | 可与数据段不同(低速仲裁 + 高速数据) |
| CRC 字段 | 15 位 CRC | 17/21 位 CRC(更强的检错能力) |
| DLC 编码 | 0-8 对应 0-8 字节 | 0-8 对应 0-8 字节,9-15 对应 12-64 字节 |
| 帧格式 | 标准帧 / 扩展帧 | 标准帧 / 扩展帧 + FD 标志 |
| 兼容性 | 不能与 CAN FD 混合通信 | 可降级为经典 CAN 模式 |
这里有一个关键点,我得特意说一下:仲裁段速率必须降低。为什么呢?因为位定时对总线延迟敏感。数据段跑快了,仲裁段如果也跑同样快,总线仲裁就会出错。实际项目中,我通常把仲裁段设在 500 kbps,数据段设在 2 Mbps-4 Mbps。这样既有足够长的位采样窗口来保证仲裁可靠性,又能把大数据块快速送出去。
我个人习惯:在配置 CAN FD 控制器时,先根据线缆长度计算环路延迟,再反过来确定数据段速率。一般长度 < 10 m 可以上 5 Mbps;超过 20 m 保守点降到 2 Mbps。这个经验值来自我踩过的一个坑——某次线束加了十几米延长线,结果通讯全是 CRC 错误,查了两天才发现是速率太高导致信号反射。
再来看帧结构的变化。传统 CAN 帧的数据长度码 DLC 只能编码 0-8;CAN FD 的 DLC 编码则扩展了,当 DLC 值为 9-15 时,实际数据字节数按特殊映射表得到 12、16、20、24、32、48、64。你想想看,64 字节意味着原来需要 8 帧才能传完的一个标定表,现在一帧就够了。这在 ECU 刷写和标定场景下特别爽。
1.3 CAN FD 的应用场景
CAN FD 并不是「万金油」。有些场景用了反而浪费——比如窗户升降这种信号,8 字节一帧足够了。但下面几类场景,我强烈建议上 CAN FD:
- • 高级驾驶辅助系统 (ADAS):激光雷达、毫米波雷达、摄像头的数据包动辄几十字节。用传统 CAN 你得分帧拆包,接收端还得拼接,既占带宽又慢。CAN FD 一包就能装下一帧原始点云的部分数据。
- • 整车 OTA 升级:我记得 2018 年某项目用传统 CAN 刷写一个 2 MB 的固件,跑了 15 分钟。换成 CAN FD 的 2 Mbps 数据段 + 64 字节有效载荷,刷写时间压到了不到 2 分钟。你想想看,这对产线和售后意味着什么。
- • 动力域联合控制:发动机、变速箱、BMS 之间要交换很多实时控制量。CAN FD 的高速率让多帧数据可以集成到一帧里减少等待。
- • 网关数据路由:多网段之间的数据转发,以前需要在网关里做大量分段重组。CAN FD 能减少网关的处理负担。
- • 诊断通信 (ISO 14229 UDS):诊断仪发请求-响应,传统 CAN 一次最多传 8 字节,需要很多连续的通信对。CAN FD 能显著缩短诊断事务时间。
曾经踩过的一个坑:我有个朋友(真是朋友)在做电池包内部通信时,一股脑把所有报文全改成 CAN FD,速率设到 5 Mbps。结果 EMI 干扰导致频繁总线关闭。后来发现高压大电流环境下,高速数据段对共模干扰太敏感。我建议这类场景把数据段降到 2 Mbps,并额外加共模扼流圈。不要为了追求速度牺牲可靠性。
说了这么多,咱们用一张图把 CAN FD 的知识体系串起来:
上图基本把这一章的核心逻辑串起来了。你们可以把它当作后续学习的地图——左边是历史背景,中间是技术差异,右边是实际应用。咱们后面几章讲的负载率计算,全都建立在这张图的基础之上。
好,今天的内容先到这儿。记住:CAN FD 的核心价值不是「更快」两个字能概括的,它是在不改变物理层基本骨架的前提下,把数据链路层重新设计了一遍。后面咱们正式开始算负载率,你会发现许多有趣的东西。