4. CAN FD速率提升原理:仲裁段与数据段双速率机制、BRS位的作用、采样点优化、传输延迟补偿
好,咱们进入正题。CAN FD 最核心的改进,说白了就是一句话:跑得快,还能跑得稳。
传统 CAN 总线,最高也就 1 Mbps。你想想看,现在一辆车上几十个 ECU,动不动就要刷写固件、传输诊断数据,1 Mbps 根本不够用。我当年做项目时,客户要求 OTA 升级时间控制在 5 分钟以内,结果光 CAN 传输就占了 3 分半,剩下的时间根本不够校验和回滚。后来换了 CAN FD,同样的数据量,30 秒搞定。
那 CAN FD 是怎么做到的?核心就是这套双速率机制。
4.1 仲裁段与数据段:为什么需要两种速率?
先问一个问题:CAN 总线为什么不能一直跑高速?
原因在于仲裁机制。CAN 总线是多主总线,多个节点同时发送时,靠“线与”逻辑仲裁。仲裁过程中,所有节点必须同步采样,才能正确判断谁赢得了总线。如果速率太高,信号在总线上的传播延迟就会导致采样点错位,仲裁就会失败。
所以,传统 CAN 只能用一个较低的速率跑完全程。
CAN FD 的聪明之处在于:仲裁段用标准速率(比如 500 kbps),数据段切换到高速率(比如 2 Mbps 甚至 5 Mbps)。
- 仲裁段:负责 ID 仲裁和总线访问控制。速率低,保证所有节点都能正确同步。
- 数据段:负责传输实际数据。速率高,提升吞吐量。
我习惯把这种机制比作“高速公路的匝道”。你上高速前,在匝道上慢慢排队(仲裁段),等上了主路,一脚油门踩到 120(数据段)。
关键点:仲裁段和数据段的速率可以独立配置。比如仲裁段 500 kbps,数据段 2 Mbps。但要注意,数据段速率不能超过收发器和总线物理层的极限。
4.2 BRS 位的作用:谁来决定切换时机?
好,现在问题来了:接收节点怎么知道当前是仲裁段还是数据段?
答案就在 CAN FD 帧格式里的一个特殊位——BRS 位(Bit Rate Switch)。
BRS 位位于控制场中,紧跟在 IDE 位之后。它的作用很简单:
- BRS = 0:不切换速率,全程使用仲裁段速率(兼容传统 CAN)。
- BRS = 1:从 BRS 位之后的第一个位开始,切换到数据段高速率,直到 CRC 段结束。
说白了,BRS 位就是一个“换挡信号”。发送节点在发送 BRS 位时,如果置 1,就告诉所有接收节点:“注意,我要加速了!”
我在项目中遇到过一个问题:某个节点在接收 CAN FD 报文时,总是 CRC 错误。排查了半天,发现是 BRS 位的采样点没对准。接收节点在 BRS 位还没稳定时就开始切换速率,导致后续位全部错位。嗯,这里要注意:BRS 位本身仍然以仲裁段速率发送,切换发生在 BRS 位之后。
个人经验:设计时,建议在 BRS 位之后插入 1-2 个位的“过渡时间”,让收发器有足够时间调整。有些控制器会自动处理,但如果你用的是老款收发器,最好手动加一个位填充。
4.3 采样点优化:高速下的“黄金位置”
速率上去了,采样点就成了新的瓶颈。
采样点,就是接收节点在每个位时间内采样信号的位置。传统 CAN 的采样点通常设在 70%-80% 的位置。但到了 CAN FD 的数据段,位时间缩短到原来的 1/4 甚至 1/10,采样点稍微偏一点,就可能采到错误的电平。
为什么会这样?因为总线上的信号有传播延迟。高速率下,一个位的时间可能只有 200 ns,而信号从发送端传到接收端就要花 50 ns。如果采样点设得太靠前,信号还没稳定;设得太靠后,又可能被下一个位干扰。
我建议的优化思路是这样的:
- 计算传播延迟:根据总线长度和收发器延迟,估算最坏情况下的信号延迟。
- 确定采样点位置:一般推荐数据段采样点设在 70%-80% 之间。但如果你用的是 5 Mbps 的速率,我建议设在 75% 左右,留出足够的余量。
- 调整同步段长度:CAN FD 允许配置同步段(Sync Seg)和传播段(Prop Seg)的长度。适当增加传播段,可以补偿延迟。
避坑指南:我曾经在一个项目中,把采样点设在了 85%,结果总线长度超过 2 米时,通信就频繁出错。后来改回 75%,问题解决。记住:采样点不是越靠后越好,要综合考虑总线长度和收发器性能。
4.4 传输延迟补偿:让高速信号“对齐”
最后聊一个比较深的话题——传输延迟补偿(TDC,Transmitter Delay Compensation)。
在 CAN FD 的数据段,发送节点自己也需要采样自己发送的信号,用来做位错误检测。但问题来了:发送节点发出的信号,经过收发器、总线、再回到自己的接收路径,已经延迟了一段时间。如果延迟超过半个位时间,发送节点就会误判自己发送的位。
TDC 的作用就是补偿这个延迟。它通过测量发送节点自身的环回延迟,然后调整采样时机,确保发送节点能正确采样到自己发出的信号。
具体实现上,TDC 通常包含两个参数:
- 测量延迟:从发送节点发出信号,到接收节点收到信号的时间差。
- 补偿偏移:根据测量延迟,调整采样点的位置。
我个人的习惯是:在系统设计阶段,先通过仿真工具估算最坏情况下的延迟,然后留出 20% 的余量。如果实际测试中发现位错误,再微调补偿偏移值。
总结一下:CAN FD 的速率提升,不是简单地把时钟频率翻倍。它需要仲裁段和数据段双速率配合,BRS 位精确切换,采样点精心优化,再加上 TDC 补偿延迟。每一步都踩准了,才能跑出 5 Mbps 的稳定通信。
下一章,我会详细讲 CAN FD 的帧结构,特别是 DLC 编码和 CRC 校验的变化。到时候你会发现,CAN FD 的“快”背后,其实是一整套精密的工程权衡。