1. CAN FD技术概述:从CAN 2.0到CAN FD的演进

大家好,我是老张。做车载网络这行十几年了,今天咱们聊聊CAN FD。

说实话,我第一次接触CAN FD是在2015年。那时候客户要求把ECU刷写时间从20分钟压缩到5分钟以内。我盯着CAN 2.0那1Mbps的速率,心里直犯嘀咕——这怎么可能?后来才知道,原来CAN FD早就给出了答案。

1.1 从CAN 2.0到CAN FD的演进

CAN总线从1986年诞生到现在,经历了几个关键阶段。我把它总结成一张表,你一看就明白:

阶段 时间 特点 典型速率
CAN 2.0A 1991年 11位标识符,标准帧 125kbps-1Mbps
CAN 2.0B 1991年 29位标识符,扩展帧 125kbps-1Mbps
CAN FD 2012年 可变速率,64字节数据场 仲裁段≤1Mbps,数据段≤8Mbps
CAN XL 2018年 2048字节数据场,更高速率 最高20Mbps

为什么会从CAN 2.0演进到CAN FD?说白了,就是车上的电子设备越来越多,数据量越来越大。我记得2010年做的一个项目,整车只有20多个ECU,CAN总线负载率不到30%。现在呢?随便一个高端车型,ECU数量轻松超过100个,CAN总线负载率经常飙到70%以上。

CAN 2.0的瓶颈很明显:

  • 速率上限1Mbps——这在今天看来确实不够用
  • 数据场只有8字节——传输一个诊断请求都得拆成好几帧
  • 总线利用率低——大量时间花在仲裁和帧开销上

CAN FD就是在这样的背景下诞生的。它保留了CAN 2.0的物理层和仲裁机制,但在数据段做了革命性的改进。

1.2 CAN FD的核心优势

CAN FD最核心的优势就两个:速率提升和数据场扩展。咱们一个一个说。

速率提升

CAN FD采用了双速率机制。什么意思呢?就是仲裁段和数据段可以跑不同的速率。

仲裁段:最高1Mbps,和CAN 2.0一样。为什么?因为仲裁需要所有节点同步,速率太高容易出问题。

数据段:最高8Mbps(实际应用中常用2-5Mbps)。数据段不需要仲裁,所以可以跑得更快。

我举个例子你就明白了。假设你要传输64字节数据:

  • CAN 2.0:每帧8字节,需要8帧,每帧耗时约130μs(1Mbps),总共约1.04ms
  • CAN FD:1帧搞定,仲裁段1Mbps,数据段5Mbps,总共约0.15ms

你看,速度提升了将近7倍。我在做OTA升级项目时,这个优势特别明显。以前刷写一个ECU要20分钟,用CAN FD后,5分钟就搞定了。

重要提示:CAN FD的速率提升不是无限制的。数据段速率受限于总线长度、节点数量、收发器性能等因素。我建议在实际项目中,数据段速率先从2Mbps开始测试,稳定后再逐步提高。

数据场扩展

CAN FD的数据场从8字节扩展到了64字节。这个变化看似简单,实际影响非常大。

你想想看,以前传输一个诊断请求(比如读取DTC信息),经常需要拆成好几帧。每帧都有帧头、帧尾、CRC等开销,效率很低。现在64字节一帧,大部分诊断请求一帧就能搞定。

我做过一个统计:

应用场景 CAN 2.0所需帧数 CAN FD所需帧数 效率提升
ECU刷写(1MB数据) 131,072帧 16,384帧 8倍
诊断请求(典型50字节) 7帧 1帧 7倍
CANape标定数据 32帧 4帧 8倍

嗯,这里要注意:数据场扩展后,CRC校验也变了。CAN FD使用了17位或21位CRC(取决于数据场长度),比CAN 2.0的15位CRC更可靠。我在项目中遇到过CRC校验失败的情况,后来发现是收发器配置问题,调整后就好了。

1.3 CAN FD与CAN 2.0的兼容性分析

这个问题我经常被问到。很多工程师担心:用了CAN FD,原来的CAN 2.0设备还能不能用?

答案是:部分兼容

咱们从几个维度来分析:

物理层兼容性

CAN FD和CAN 2.0使用相同的物理层。也就是说,CAN收发器、线束、终端电阻这些硬件是通用的。我建议你在选型时直接选用支持CAN FD的收发器,比如TJA1044、TJA1463这些,它们可以自动识别CAN FD和CAN 2.0帧。

数据链路层兼容性

这里有点复杂。CAN FD帧和CAN 2.0帧在格式上有区别:

  • CAN FD帧在控制场中增加了EDL位(Extended Data Length),用于标识这是CAN FD帧
  • CAN FD帧的DLC编码方式不同(0-8对应0-8字节,9-15对应12-64字节)
  • CAN FD帧的CRC计算方式不同

所以,CAN 2.0控制器收到CAN FD帧时,会把它当作错误帧处理。反过来,CAN FD控制器可以正常接收CAN 2.0帧。

避坑指南:我曾经在一个项目中,把CAN FD节点和CAN 2.0节点混在同一总线上。结果CAN 2.0节点频繁报错,总线负载率飙升。后来发现是CAN FD节点发送了FD帧,CAN 2.0节点无法识别。解决方案是:在CAN FD节点中配置只发送CAN 2.0帧,或者把CAN 2.0节点升级为CAN FD节点。

混合网络设计建议

如果你需要在同一总线上混用CAN FD和CAN 2.0节点,我有几点建议:

  1. 所有节点都使用CAN FD收发器——这样即使CAN 2.0节点也能正确识别CAN FD帧的物理信号
  2. CAN FD节点配置为"经典CAN模式"——只发送CAN 2.0帧,但可以接收CAN FD帧
  3. 使用网关隔离——CAN FD域和CAN 2.0域通过网关连接,互不影响
  4. 逐步升级——先升级关键节点,再逐步替换其他节点

个人经验:我建议在项目初期就规划好CAN FD的升级路径。不要等到量产了再改,那时候成本就高了。我一般会在设计阶段预留CAN FD的硬件接口,软件上做好兼容性处理。这样后期升级时,只需要更新软件和部分硬件,成本可控。

好了,这一章的内容就到这里。CAN FD的核心优势你记住了吗?速率提升和数据场扩展,这两个是重点。下一章咱们聊聊CAN FD的帧结构,看看它到底是怎么实现这些功能的。