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升级场景中有三个核心优势:
- 单帧数据量提升8倍:从8字节到64字节,帧数减少,协议开销降低
- 数据段速率提升5-8倍:从1 Mbps到5-8 Mbps,传输时间大幅缩短
- 兼容现有CAN网络:仲裁段保持低速,可以与传统CAN节点共存
当然,CAN FD也不是没有代价。它要求所有节点都支持CAN FD,而且对硬件时序要求更高。但说实话,对于OTA升级这种“刚需”场景,这些代价完全值得。下一章,我会结合一个实际项目,给大家讲讲CAN FD在OTA升级中的具体协议设计——包括怎么分包、怎么确认、怎么处理错误。嗯,那才是真正考验工程师功底的地方。