3、CANFD数据链路层:CANFD的仲裁机制、数据场长度编码(DLC)、位速率切换(BRS)
好,咱们今天聊聊CANFD的数据链路层。说实话,这一层是CANFD最核心的改动所在。你如果搞懂了仲裁机制、DLC编码和BRS位速率切换,基本上就抓住了CANFD的“魂”。我当年从CAN 2.0切换到CANFD时,第一个啃的就是这块内容。
3.1 仲裁机制:还是那个“老配方”,但味道不同了
CANFD的仲裁机制,说白了,跟经典CAN一模一样。还是那个“线与”逻辑,还是那个“显性位压倒隐性位”的规则。你想想看,为什么CANFD不把仲裁也改了?
原因很简单:兼容性。如果仲裁机制变了,那CANFD节点就没法跟经典CAN节点在同一个网络上共存了。嗯,这里要注意,CANFD的仲裁段速率(标称位速率)通常还是1Mbps以内,跟经典CAN保持一致。
我个人习惯把仲裁段比作“抢话筒”。谁先发显性位,谁就抢到了总线控制权。这个规则没变,但CANFD在仲裁结束后,可以“加速”了。这就是BRS的功劳,咱们后面细说。
关键点:仲裁机制不变,保证了CANFD与CAN 2.0的物理层兼容。但数据段可以跑更快,这是质的飞跃。
3.2 数据场长度编码(DLC):从8到64,不只是数字翻倍
经典CAN的DLC是4位,能表示0到8。CANFD的DLC也是4位,但编码方式变了。它不仅能表示0到8,还能表示12、16、20、24、32、48、64。
为什么会这样?因为4位二进制最大能表示15,而CANFD只用了其中一部分编码。我整理了一张表,你一看就明白:
| DLC值(十进制) | 经典CAN数据长度(字节) | CANFD数据长度(字节) |
|---|---|---|
| 0-8 | 0-8 | 0-8 |
| 9 | 8 | 12 |
| 10 | 8 | 16 |
| 11 | 8 | 20 |
| 12 | 8 | 24 |
| 13 | 8 | 32 |
| 14 | 8 | 48 |
| 15 | 8 | 64 |
你看,DLC值为9到15时,经典CAN统统当作8字节处理。但CANFD却能映射到更大的数据长度。我在项目中遇到过一个问题:有人把DLC设为9,以为只发9字节,结果CANFD控制器自动填充到12字节。嗯,这个坑不小。
避坑指南:我曾经调试一个OTA升级的工程,发现CANFD报文总是多出几个字节。查了半天,原来是DLC编码搞错了。记住:CANFD的DLC是“跳变”的,不是连续的。你设DLC=9,实际发12字节;设DLC=12,实际发24字节。别想当然。
3.3 位速率切换(BRS):加速的“开关”
BRS是CANFD最亮眼的功能。它就像一根“加速开关”。仲裁段用慢速(比如1Mbps),数据段用快速(比如5Mbps甚至8Mbps)。
BRS位在控制场里,紧跟在IDE位之后。如果BRS位是显性(0),表示不切换速率,整个报文都按标称位速率跑。如果BRS位是隐性(1),表示要切换了——从BRS位之后的某个点开始,进入高速数据段。
你想想看,为什么不在仲裁段也跑高速?因为仲裁需要所有节点同步,速率太高,信号传播延迟会导致仲裁失败。说白了,仲裁段是“民主投票”,得让大家都能听清楚;数据段是“领导讲话”,可以语速快一点。
我建议你在设计时注意一个细节:BRS切换点。不同厂家的控制器,切换点的位置可能略有差异。有的在BRS位采样点之后立即切换,有的要等到下一个位。这个差异,在高速率下会引发同步问题。
警告:我曾经在一个项目中,用了A厂的CANFD控制器和B厂的收发器。结果数据段跑到5Mbps时,偶尔出现位错误。排查后发现,是BRS切换点的时序偏差导致的。后来统一了收发器型号,问题解决。所以,高速CANFD设计,器件选型一定要做一致性验证。
3.4 数据段速率与采样点
数据段速率提高了,采样点也得跟着调。经典CAN的采样点通常在70%-80%的位置。但CANFD数据段跑5Mbps甚至更高时,采样点需要往后挪,比如80%-85%。
为什么?因为高速下,信号边沿更陡,但传播延迟的影响更明显。采样点靠后,能留出更多时间让信号稳定。我个人的经验是:数据段速率每提高1Mbps,采样点往后调2%-3%。
举个例子:
// 假设标称位速率 1Mbps,采样点 75%
// 数据段速率 5Mbps,采样点建议 83%
// 位时间配置(以Tq为单位)
// 标称位:SYNC_SEG=1, PROP_SEG=2, PHASE_SEG1=3, PHASE_SEG2=2
// 数据段:SYNC_SEG=1, PROP_SEG=1, PHASE_SEG1=4, PHASE_SEG2=1
// 采样点 = (1+2+3)/(1+2+3+2) = 75%
// 数据段采样点 = (1+1+4)/(1+1+4+1) = 85.7%
你看,同样的Tq数量,调整相位缓冲段就能改变采样点。这个配置,不同芯片的寄存器映射不一样,但原理是通用的。
3.5 实际应用中的权衡
CANFD的数据段速率不是越高越好。速率高了,总线长度就得缩短。我整理了一个经验数据:
| 数据段速率 | 最大总线长度(约) | 典型应用场景 |
|---|---|---|
| 2 Mbps | 40 m | 商用车、工业控制 |
| 5 Mbps | 20 m | 乘用车动力域、ADAS |
| 8 Mbps | 10 m | 域控制器内部、测试台架 |
你想想看,如果整车网络有几十米长,硬要跑8Mbps,那信号反射和衰减会让你头疼死。我建议你根据实际拓扑来选速率,别一味追求快。
总结一下:CANFD的数据链路层,仲裁机制是“旧瓶装旧酒”,DLC是“旧瓶装新酒”,BRS是“新瓶装新酒”。搞懂这三样,你就能理解CANFD为什么能兼容经典CAN,又能跑得更快、传得更多。
嗯,这一章就聊到这儿。下一章咱们深入CANFD的物理层,聊聊收发器、终端电阻和信号质量那些事。到时候我会分享一个我在台架上调试5Mbps信号时的“血泪史”。