2、CAN FD基础回顾:CAN与CAN FD的区别、CAN FD的帧结构(数据段64字节)、CAN FD的帧速率特性(仲裁段与数据段双速率)

好,咱们正式开始聊CAN FD。说实话,很多工程师对CAN FD的理解还停留在“比CAN快一点”的层面。但如果你要做OTA升级,这点认知远远不够。我当年第一次接触CAN FD,是在一个远程固件刷写的项目里。当时客户要求把升级时间从40分钟压缩到10分钟以内,传统CAN根本做不到。嗯,那是我第一次真正意识到——CAN FD不是简单的“升级版”,它几乎是重新定义了车载通信的玩法。

2.1 CAN与CAN FD:到底差在哪?

先问大家一个问题:为什么传统CAN在OTA升级中越来越吃力?说白了,就是带宽不够。传统CAN最高也就1 Mbps,而且数据段一次最多只能带8个字节。你想想看,一个固件动辄几十兆字节,用CAN传,那得拆成多少帧?我算过,一个2 MB的固件,用CAN标准帧传,大概要拆成26万帧左右。每帧还得有协议开销、应答等待,实际有效吞吐量能到500 kbps就不错了。

CAN FD(Flexible Data-Rate)就是为了解决这个问题诞生的。它保留了CAN的物理层和仲裁机制,但在数据段做了两个关键改进:

  • 数据段长度扩展:从8字节提升到最多64字节
  • 数据段速率提升:从最高1 Mbps提升到最高8 Mbps(甚至更高)

这两个改进叠加起来,效果是惊人的。我给大家算一笔账:

对比项 传统CAN CAN FD
最大数据段长度 8字节 64字节
仲裁段速率 最高1 Mbps 最高1 Mbps(兼容)
数据段速率 同仲裁段 最高8 Mbps(典型2-5 Mbps)
单帧有效载荷 最多8字节 最多64字节
2 MB固件理论帧数 约262,144帧 约32,768帧
理论传输时间(1 Mbps) 约210秒 约26秒(数据段5 Mbps)

你看,同样是传2 MB数据,CAN FD的理论时间只有传统CAN的八分之一左右。当然,实际项目中还要考虑协议开销、应答等待、总线负载等因素,但差距依然非常明显。

核心结论:CAN FD不是“小修小补”,而是从帧结构到速率控制都做了重新设计。OTA升级这种大块数据传输场景,正是CAN FD发挥优势的主战场。

2.2 CAN FD的帧结构:数据段64字节的秘密

咱们来看看CAN FD的帧结构长什么样。说实话,我第一次看CAN FD的帧结构图时,第一反应是“怎么多了这么多控制位?”但后来用多了才发现,每一个位都有它的道理。

CAN FD的帧结构(以数据帧为例)大致如下:

SOF + 11/29位ID + RTR + IDE + r0 + BRS + ESI + DLC + 数据段(0-64字节) + CRC + ACK + EOF + IFS

与传统CAN相比,关键变化在以下几个位:

  • BRS(Bit Rate Switch):这是CAN FD的灵魂位。当BRS=1时,表示从BRS位之后切换到高速率模式;当BRS=0时,整个帧都按仲裁段速率传输。说白了,这就是“双速率”的开关。
  • ESI(Error State Indicator):这个位告诉接收方,发送节点当前处于“错误主动”还是“错误被动”状态。我在项目中遇到过,有些ECU在错误被动状态下会强制把BRS置0,导致整个网络的数据段速率被迫降下来。嗯,这个坑后面会细讲。
  • DLC(Data Length Code):传统CAN的DLC只能表示0-8字节,而CAN FD的DLC扩展了编码方式,可以表示0-8、12、16、20、24、32、48、64字节。注意,不是连续的,是跳变的。我刚开始写驱动时,就因为这个编码方式踩过坑——DLC=9表示12字节,DLC=10表示16字节,千万别搞混了。

个人经验:我建议大家在设计OTA升级协议时,尽量使用64字节的数据段长度。虽然DLC支持多种长度,但64字节是硬件效率最高的配置。很多CAN FD控制器在非64字节长度时,内部DMA传输会有额外的对齐开销。我曾经在一个项目中,因为用了32字节的数据段,结果发现吞吐量比64字节低了将近30%。后来查了芯片手册才发现,控制器对64字节有专门的硬件加速路径。

2.3 CAN FD的速率特性:仲裁段与数据段双速率

这个特性,我觉得是CAN FD最巧妙的设计。为什么这么说?你想想看,传统CAN为什么速率上不去?根本原因在于仲裁机制。CAN总线采用“线与”逻辑进行仲裁,这就要求所有节点必须在同一个位时间内完成采样。如果速率太高,总线长度受限,信号反射也会变得严重。

CAN FD的解决方案很聪明:仲裁段保持低速,数据段切换到高速。具体来说:

  • 仲裁段:从SOF到BRS位之前,包括ID、RTR、IDE、r0、BRS、ESI等控制位,都按仲裁速率(通常为500 kbps或1 Mbps)传输。这个阶段,所有节点都在参与仲裁,必须保证同步。
  • 数据段:从BRS位之后,包括DLC、数据段、CRC等,切换到高速率(通常为2-5 Mbps)。这个阶段,只有发送节点在占用总线,其他节点只负责接收,所以可以跑得更快。

为什么要保留仲裁段低速?我给大家打个比方:这就像高速公路上的收费站。收费站入口(仲裁段)大家排队缴费,速度慢但有序;进入高速路(数据段)后,大家各走各的道,速度就提上来了。如果收费站也搞高速,那肯定得撞车。

避坑指南:我曾经在一个项目中,把仲裁段速率设为1 Mbps,数据段速率设为8 Mbps。结果发现,在长总线(超过10米)的情况下,数据段频繁出现CRC错误。后来分析发现,8 Mbps的信号在长线上反射严重,导致采样点偏移。我的建议是:数据段速率不要超过仲裁段速率的4倍,且总线长度控制在5米以内。对于OTA升级这种大数据量场景,推荐配置是仲裁段500 kbps + 数据段2-5 Mbps。

另外,还有一个容易被忽略的点:采样点位置。仲裁段和数据段的采样点位置可能不同。仲裁段因为速率低,采样点通常设在60%-70%的位置;数据段速率高,采样点需要更靠后,通常在70%-80%的位置。如果采样点设置不当,高速数据段很容易出现位错误。我建议大家在项目初期就用CAN示波器抓一下实际波形,确认采样点是否在安全范围内。

2.4 小结:CAN FD给OTA带来了什么?

总结一下,CAN FD相比传统CAN,在OTA升级场景中有三个核心优势:

  1. 单帧数据量提升8倍:从8字节到64字节,帧数减少,协议开销降低
  2. 数据段速率提升5-8倍:从1 Mbps到5-8 Mbps,传输时间大幅缩短
  3. 兼容现有CAN网络:仲裁段保持低速,可以与传统CAN节点共存

当然,CAN FD也不是没有代价。它要求所有节点都支持CAN FD,而且对硬件时序要求更高。但说实话,对于OTA升级这种“刚需”场景,这些代价完全值得。下一章,我会结合一个实际项目,给大家讲讲CAN FD在OTA升级中的具体协议设计——包括怎么分包、怎么确认、怎么处理错误。嗯,那才是真正考验工程师功底的地方。