第1章:CAN FD的位速率切换机制

各位同学,今天我们来聊聊CAN FD里最核心的一个特性——位速率切换。说实话,我第一次接触这个机制的时候,也被绕得有点晕。但搞明白之后,你会发现它其实很巧妙。

1.1 标称位速率 vs 数据位速率

CAN FD和传统CAN最大的区别在哪?说白了,就是它能在同一个报文里跑两种速度。

  • 标称位速率(仲裁段):这是总线仲裁阶段用的速度。通常我习惯设成500kbps或1Mbps。为什么?因为仲裁需要所有节点同时参与,速度太快容易出问题。
  • 数据位速率(数据段):这是传输数据时用的速度。可以飙到2Mbps、5Mbps甚至更高。我在项目里最高用到过8Mbps,嗯,前提是总线拓扑要够干净。

你想想看,仲裁的时候大家慢慢来,数据传输的时候猛加速——这就是CAN FD的精髓。

核心区别总结:

参数 仲裁段 数据段
位速率 固定(通常≤1Mbps) 可调(最高8Mbps+)
作用 总线仲裁、ID传输 数据负载传输
采样点 通常87.5% 可灵活配置

1.2 BRS位的作用

BRS位,全称是Bit Rate Switch。这个位只有1个bit,但它的作用可大了。

我在项目中遇到过这样一个坑:有一次抓包发现数据段速率没切换上去,排查了半天,最后发现是BRS位被置成了隐性。嗯,从那以后我每次配置CAN FD控制器,都会先检查BRS位的设置。

  • BRS = 显性(0):不切换速率,整个报文都用标称位速率传输。说白了就是降级成传统CAN。
  • BRS = 隐性(1):在BRS位之后立即切换到数据位速率,直到CRC分隔符再切回来。

我的小技巧:调试阶段建议先把BRS置1,看看数据段能不能正常跑高速。如果不行,再降回标称速率排查问题。

1.3 位速率切换的时序要求

速率切换不是瞬间完成的,它需要满足严格的时序要求。我给大家画个图,这样更直观。

CAN FD位速率切换时序图 仲裁段(标称速率) BRS 数据段(高速率) CRC ACK(标称速率) 切换点1 切换点2 ~500kbps ~2-8Mbps 时序要求 切换点1:BRS位采样点之后立即切换 切换点2:CRC分隔符采样点之前切回 切换时间:通常需要1-2个bit的同步时间

从图上你能看到,速率切换发生在两个关键点:

  1. BRS位之后:从标称速率切换到数据速率。这个切换必须在BRS位采样完成后立即发生。
  2. CRC分隔符之前:从数据速率切回标称速率。这个切换要提前完成,确保ACK段能正常采样。

注意:我曾经在项目里遇到过切换时序不对导致整个网络崩溃的情况。原因是某个节点的晶振偏差太大,高速率下采样点偏移了。所以,建议各位在选型时一定要关注CAN FD控制器的PLL精度。

1.4 实际抓包中的速率切换观察

好了,理论讲完了,咱们来看看实际抓包怎么观察速率切换。我习惯用Wireshark的CAN FD解析器,它会把BRS位和速率信息直接标出来。

Frame 1: 64 bytes on wire (512 bits), 64 bytes captured (512 bits)
    CAN FD Protocol
        Identifier: 0x123
        Flags: 0x01
            .... ...1 = BRS: Bit Rate Switch (1)
            .... ..0. = ESI: Error State Indicator (0)
        Data Length Code: 8 (64 bytes)
        Bit Rate: Arbitration 500 kbps, Data 2 Mbps
        Data: 01 02 03 04 05 06 07 08
        CRC: 0xABCD
        CRC Delimiter: 1
        ACK Slot: 1
        ACK Delimiter: 1
        EOF: 7 bits

你看这个抓包结果,Wireshark明确标出了:

  • BRS = 1:说明这个报文启用了速率切换
  • Arbitration 500 kbps, Data 2 Mbps:仲裁段500k,数据段2M
  • 如果BRS = 0,这里只会显示一个速率值

我的观察技巧:在Wireshark里,我习惯把CAN FD的报文过滤出来,然后看"Bit Rate"这一列。如果看到两个速率值,说明速率切换成功了。如果只有一个,那就要检查BRS位是不是被置0了。

另外,你还可以通过Wireshark的"IO Graph"功能,观察总线上的实际速率变化。我个人习惯把仲裁段和数据段用不同颜色标出来,这样一眼就能看出哪些时间段在跑高速。

嗯,关于位速率切换,今天就先聊这么多。记住一句话:仲裁段求稳,数据段求快,BRS位就是那个开关。搞明白了这个,CAN FD你就掌握了七成。

本章要点回顾:

  • CAN FD支持两种位速率:仲裁段(标称)和数据段(高速)
  • BRS位控制是否启用速率切换(1=切换,0=不切换)
  • 速率切换有严格的时序要求,切换点必须在BRS位之后和CRC分隔符之前
  • Wireshark可以直观显示BRS位和实际速率值

专注资料整理