3. CANFD数据场与BRS位实战:BRS位的作用、ESI位含义、如何通过CANalyzer Trace窗口识别CANFD帧
好,咱们直接进入正题。这一节我打算把CANFD帧里最核心的两个位——BRS和ESI,彻底讲透。很多工程师看了协议文档,知道BRS是波特率切换,ESI是错误状态指示,但一到实际抓波形、看Trace窗口,就懵了。嗯,我当年也经历过这个阶段。
3.1 BRS位:它到底在切换什么?
BRS,全称是Bit Rate Switch。说白了,就是告诉总线上的节点:「我要加速了,你们跟上!」
在CANFD帧里,数据场之后的段(包括数据场、CRC、ACK等)可以用更高的速率传输。而仲裁段和ACK段,必须用标准速率。为什么?因为仲裁需要所有节点同步,用高速容易出乱子。
BRS位在控制场里,紧挨着IDE位。 它的值很简单:
- BRS = 0(显性):不切换,全程用仲裁段速率。这其实就是传统CAN的传输方式。
- BRS = 1(隐性):切换!数据场开始用高速率。
我在项目中遇到过一个问题:某个节点发送的CANFD帧,BRS位明明是1,但接收节点就是收不到数据。后来一查,接收节点的收发器不支持高速模式。你看,硬件不匹配,协议层再对也没用。
关键点:BRS位只在CANFD帧中有效。传统CAN帧里,这个位的位置是保留位,必须为显性(0)。所以,如果你在Trace窗口看到BRS位为1,那100%是CANFD帧。
3.2 ESI位:节点的「健康状态」指示灯
ESI,Error State Indicator。这个位反映了发送节点的错误状态。我个人习惯把它理解为节点的「健康指示灯」。
- ESI = 0(显性):发送节点处于「错误主动」状态。说白了,节点很健康,能正常发送和接收,出错了也能主动发送错误帧。
- ESI = 1(隐性):发送节点处于「错误被动」或「总线关闭」状态。节点已经出问题了,只能被动接收,不能主动发送错误帧了。
为什么会这样?CAN协议规定,节点内部有两个错误计数器:发送错误计数和接收错误计数。当计数超过127,节点就从「错误主动」降级为「错误被动」。这时候,ESI位就会从0变成1。
ESI位只在CANFD帧的数据场里有效。 传统CAN帧没有这个位。所以,ESI位也是区分CANFD和CAN的一个重要标志。
避坑指南:我曾经调试一个ECU,发现它偶尔会丢帧。Trace窗口里看,ESI位总是1。我一开始以为是协议配置问题,查了半天。后来才发现,是那个ECU的CAN收发器供电不稳,导致错误计数器飙升。所以,看到ESI=1,别光盯着软件,先检查硬件。
3.3 如何在CANalyzer Trace窗口识别CANFD帧?
好,理论说完了,咱们上实战。CANalyzer的Trace窗口,是咱们诊断问题的最前线。
第一步:确认CANalyzer配置支持CANFD。 在Measurement Setup里,确保你的CAN通道配置成了CANFD模式。如果配成了Classic CAN,那CANFD帧会被当成错误帧处理,你什么都看不到。
第二步:打开Trace窗口,看ID列。 传统CAN帧的ID后面没有特殊标记。CANFD帧的ID后面,会有一个小图标或者文字标识。在CANalyzer 12.0以上版本,默认会显示一个「FD」标签。
第三步:看DLC列。 CANFD的DLC编码和传统CAN一样,但数据长度可以超过8字节。如果DLC显示的数据长度大于8(比如12、16、32、64),那肯定是CANFD帧。
第四步:看Data列。 这是最直观的。双击一条报文,在Detail View里,你会看到详细的位信息:
- BRS位:显示为「BRS: 1」或「BRS: 0」。
- ESI位:显示为「ESI: 1」或「ESI: 0」。
- Data Length:显示实际数据长度,比如64 bytes。
我举个例子。你在Trace窗口看到一条报文:
ID: 0x123 DLC: 15 Data: 01 02 03 ... (共64字节) BRS: 1 ESI: 0
看到没?DLC=15(编码值,实际数据64字节),BRS=1,ESI=0。这100%是一条CANFD帧,而且发送节点状态良好。
注意:有些CANalyzer版本默认不显示BRS和ESI列。你需要右键点击Trace窗口的表头,选择「Insert Column」,然后勾选「BRS」和「ESI」。别问我怎么知道的,我第一次找这两个字段找了十分钟。
3.4 实战小技巧:用Filter快速筛选CANFD帧
在Trace窗口里,如果总线上既有CAN帧又有CANFD帧,看起来会很乱。我建议你使用Filter功能:
- 在Trace窗口右键,选择「Filter」。
- 在Filter设置里,选择「CAN FD Frame」。
- 点击OK。这样,Trace窗口就只显示CANFD帧了。
反过来,如果你想看传统CAN帧,就选「CAN Frame」。这个功能在分析混合网络时特别有用。
好了,这一节的内容就到这里。BRS和ESI这两个位,说白了就是CANFD帧的「身份证」。你只要在Trace窗口里看到它们,就能立刻判断出这是CANFD帧,并且知道发送节点的状态。下一节,咱们聊聊CANFD的CRC和Stuff Bit,那才是真正考验硬件设计的地方。