☰
CAN-FD波形差异实测:PicoScope看经典CAN与FD帧
2026/9/28 19:28:52 网站建设 项目流程

一辆实验车的VCU频繁上报CAN-FD丢帧,总线分析仪解析出来的报文完全正常,ID、数据、CRC全都对得上。可我拿PicoScope接上总线一看,问题一目了然:数据段的窄脉冲在总线末端出现明显振铃,接收节点的采样点恰好落在振荡区间里。从那次之后,我做CAN/CAN-FD相关调试,都是示波器和协议解析仪一起上,一个看"内容对不对",一个看"电信号走得稳不稳"。这篇就把我用PicoScope实测两种协议波形差异的完整方法写出来,包括探头怎么接、解码怎么配、采样率设多少、以及判断CAN-FD帧的几个肉眼技巧,适合正在从经典CAN向CAN-FD迁移的工程师,也适合刚接触车载总线的新人照着操作。

1. 为什么波形层面必须有一台示波器兜底

1.1 协议解码器告诉你"数据还在",示波器告诉你"数据走不走得稳"

先说我实际踩过的坑。团队里调试一辆控制器间的CAN-FD通信,报文周期任务里偶发丢帧,整车日志里能看到接收节点报bus-off然后进入恢复流程。同事第一反应是拿CAN卡抓报文,结果怎么抓都是完整帧——ID正确、数据正确、CRC也正确,看起来一切正常。但问题恰恰出在这里:协议分析仪的功能是"能不能解出来",它根本不关心波形长什么样。只要接收节点的采样点踩到了正确的位电平上,哪怕信号已经振铃、过冲、边沿变缓得一团糟,它照样能解出完整报文。

换句话说,解码器告诉你的是"数据数值还在",它并不知道信号离崩溃有多近。相比之下,UART、SPI、I2C这类信号相对宽容,但CAN/CAN-FD属于差分异步总线,既要看通信时序,又要看物理层质量,示波器就成了必须项。后来我把PicoScope接上总线,看到数据段2Mbps的窄脉冲在长线缆末端叠加明显振铃,接收节点采样位置恰好落在电平判定临界区,丢帧原因立刻清楚了——不是协议栈问题,是信号完整性不达标。这就是为什么我现在始终强调"解析仪+示波器"组合,二者从来不是替代关系,而是上下楼关系。

1.2 PicoScope在CAN总线调试里的特殊定位

PicoScope本质上是一台基于PC的示波器,主机通过USB连电脑,软件窗口就是操作面板。它有几个特性特别适合车载总线调试:一是深存储配合高速采样能长时间连续捕获,偶发故障不容易漏;二是12位ADC分辨率远高于传统8位示波器,测量显性电平、过冲幅度这些细节更准;三是PicoScope 7对CAN和CAN-FD都提供串行解码,能直接显示ID、DLC、数据、CRC校验结果,还能把解码字段和波形逐位对齐。

这种"波形+协议透视"的组合,对新人非常友好。会接探头、会选量程、会配解码就能上手看CAN波形;对老手来说,12位分辨率、长捕获能力和掩膜测试功能又能支撑信号质量分析和偶发故障复现。下面我会按照从连探头到看懂波形差异的顺序,把关键步骤压缩成一套可直接照做的流程。如果时间紧张,先看第4节的波形对比就够应付日常判断了,其余章节是原理和避坑补充。

2. 动手前的三个底层认知:物理层、帧结构和时序

2.1 物理层:CAN与CAN-FD共用同一套差分电平规则

很多人以为CAN-FD改变了物理层,其实没有。ISO 11898-2规定的差分电平、终端电阻、显性/隐性逻辑,对经典CAN和CAN-FD完全一样。总线两条线,CAN_H和CAN_L:隐性(逻辑1)时两条线都被拉到2.5V附近(典型2.0~3.0V),差分电压接近0V;显性(逻辑0)时CAN_H被拉到约3.5V、CAN_L约1.5V,差分电压约2V。

示波器上把两路通道分别接CAN_H和CAN_L,再用数学通道做A-B,得到的就是差分波形。CAN解码一般都以这条差分波形作为输入,因为规范里所有位时序指标都是针对差分电压定义的,只看单根线的波形无法准确反映总线真实状态。终端电阻方面,总线两端各一只120Ω,网络等效直流阻抗约60Ω,这两只电阻直接影响波形幅度:只有一个终端电阻时差分显性幅度大约只有1V,两只都在才会看到标准2V摆幅。关于如何通过波形幅度反推终端状态,我放在第5节细说。

2.2 帧结构差异:FDF、BRS、ESI和DLC扩展

经典CAN数据帧结构大家比较熟:SOF、11位或29位标识符、RTR、IDE、控制段(r0+DLC)、数据段(最多8字节)、15位CRC、CRC分隔符、ACK槽、ACK分隔符、EOF、IFS。CAN-FD在保留这套框架基础上做了几处关键改造,先看标准帧的字段对比:

字段经典CAN标准帧CAN-FD标准帧
SOF1位显性1位显性
标识符11位11位
RTR/r1RTR位(数据帧显性)r1保留位(显性)
IDE显性(标准格式)显性(标准格式)
FDF无隐性(FD帧标志)
r0显性显性
BRS无隐性=数据段提速
ESI无发送节点错误状态
DLC0~8字节0~64字节,9~15为扩展长度编码
CRC15位17或21位+4位填充计数
速率全程一致仲裁/数据双速率

这里面FDF位最关键。经典CAN在r0位置固定发显性,CAN-FD在该位置发隐性作为FD标志,协议解码器就靠这一位区分两种帧。ESI位表示发送节点的错误状态(主动/被动),工程上可以用它快速判断哪个节点处于错误被动状态。DLC编码在CAN-FD里扩展为12、16、20、24、32、48、64字节,4位DLC已经不够直观表达实际长度,解码器通常会直接换算成字节数显示。

2.3 两种速率切换点:BRS位与CRC分隔符

CAN-FD真正的精髓是可变速率。仲裁段(SOF到BRS位)沿用经典速率,通常是500kbps或250kbps;BRS位为隐性时触发切换,从BRS之后开始进入数据段高速率,常见2Mbps或5Mbps;到了CRC分隔符再切回仲裁速率,之后ACK、EOF都是低速段。

所以一帧CAN-FD报文在示波器上会呈现"宽位——突然变窄——再变宽"的节奏。BRS位本身是隐性,从它之后的ESI位开始,位时间明显缩短。如果BRS为0,表示本帧没有启用速率切换,整帧都走低速,波形上就和经典CAN难以区分——不过这类帧数据段可以到64字节,帧体明显偏长,这也是一个判断依据。理解这个切换点对配置解码器非常关键,PicoScope 7里配置CAN-FD解码时,要分别填仲裁速率和数据速率,软件才能正确对齐采样点、计算CRC。只填一个速率时,数据段解码几乎必乱。

3. PicoScope实测准备:从探头到解码配置一次到位

3.1 机型与探头选择

PicoScope产品线里,做车载CAN/CAN-FD比较常见的是4225A(两通道)和4824A(八通道)。4225A入手门槛低,测单条CAN总线完全够用,两个通道接CAN_H和CAN_L刚好一一对应。4824A的优势是一次性挂8路,适合多条总线、多节点联合调试,比如同时看CAN、CAN-FD和LIN。预算有限时先上两通道型号,把差分测量和解码功能跑熟,后续再按需扩展。

探头方面,最省钱且足够可靠的方案是两支10:1无源电压探头,分别接CAN_H和CAN_L。10:1探头输入阻抗约10MΩ,对总线几乎没有负载影响,带宽也足够覆盖最高5Mbps的场景。有条件的话建议上差分探头,对地隔离更好,在可疑共地环境下更安全。不过普通实验室和维修场景里,使用无源探头+A-B数学通道已经能满足绝大多数需求,我下面就以这个方案为例。

3.2 通道连接与差分波形(A-B)

把CH-A接到CAN_H,CH-B接到CAN_L,探头地线夹到总线节点的电源地或底盘地。注意不要只接CH-A去测,因为总线处于隐性状态时两条线等电位,单通道波形就是一条稳定的2.5V平线,看不出总线有多少活动。接好之后在PicoScope 7里创建一个数学通道,选择A-B,这就是CAN_H与CAN_L的差分信号。后续的边沿测量、触发和解码都基于这条数学通道,共模噪声会被剔除,显性电平和隐性电平的摆幅更规整,测量位时间也更准确。

还有一个容易忽略的细节:打开软件之前先把两个通道都做一次探头补偿。两支探头如果高频响应不一致,CAN-FD数据段的窄脉冲边沿会被不同程度地衰减,A-B差分波形会出现虚假的过冲或凹陷。补偿方法很常规,接1kHz方波,调整探头上的微调电容直到波形上下沿平整没有圆角即可。

3.3 PicoScope 7的CAN解码配置

在Tools菜单里选择Serial Decoding,新建一个CAN解码器,源通道选刚才建的Math通道(A-B),然后按总线实际参数填写:协议类型选CAN或CAN FD;仲裁段速率填实际值,比如500kbps;数据段速率填2Mbps或5Mbps(仅CAN-FD需要);信号极性选显性为低,因为CAN总线是低有效逻辑;采样点默认在60%~80%附近即可。

配置完成后,解码结果会以表格和叠加层的形式显示在波形图上。每一帧报文被标记帧起始位置,表格里能看到ID、DLC、数据、CRC状态。如果配置速率和实际总线速率不一致,解码大概率出现大量bit错误提示,很多人会误以为解码功能坏了——此时先不要折腾软件,用标尺量一下波形上的实际位宽,反推真实速率再回头改配置。例如测到位宽2μs就是500kbps,测到0.5μs就是2Mbps。

3.4 采样率与触发策略

采样率是观测CAN-FD最容易翻车的环节。每个位周期至少要采10个点才能可靠解码,仲裁段500kbps(位宽2μs)需要10MS/s起步;数据段2Mbps(位宽0.5μs)需要至少20MS/s,5Mbps就要50MS/s以上。PicoScope支持深存储,可以设置比如50MS/s采样、捕获100ms,这样一屏里能看到成百上千帧,便于观察异常帧的上下文和复现规律。

触发方面,简单场景用边沿触发就能稳定捕捉帧起始;要定位特定ID或特定数据时,可以尝试CAN总线触发类型,直接设置ID条件让触发点停在目标帧上。对偶发故障,我习惯用循环捕获加时间戳,先把一大段时间窗的波形存下来,故障复现后再缩小时间窗看细节。这里提醒一句:如果时间轴拉得很长又不主动降采样,软件可能因内存限制自动降采样,解码错误率会明显上升,排查时先确认采集界面的实际采样率。

4. 实测截图对比:同一组数据,两种协议的波形差异在哪

这一节我用文字还原PicoScope 7上的实测波形截图,细节足够你在自己屏幕上对照验证。以下说的"截图"均基于同一条总线、同样的ID和相似的负载条件抓取。

4.1 经典CAN标准帧实测波形逐个阶段拆解

先看一条经典CAN标准帧,仲裁速率500kbps、数据8字节、ID假设0x123。屏幕从上到下三条波形:蓝线是CAN_H,红线是CAN_L,绿线是A-B差分波形。差分波形上,第一眼看到的是起始处的SOF显性位,从隐性电平跳到约2V的显性平台,宽度2μs;紧随其后的11位标识符每位都是2μs宽度,看起来就是一段连续的显性/隐性交替脉冲。中间有一个较宽的隐性位,数据帧里这是RTR位之后的IDE和r0两个显性位,然后就是4位DLC。

数据段8字节一共64位,在500kbps下要128μs,加上SOF、ID、CRC和EOF,整帧大约108位、约220μs(具体取决于位填充数量)。解码覆盖层会把ID、DLC、DATA逐字段标出来,表格里CRC状态显示OK。整帧波形看起来规整、对称、没有明显振铃,显性电平平台平直,隐性电平稳定在2.5V附近,这是健康经典CAN帧的典型形态。

4.2 CAN-FD实测波形:速率切换点的直观表现

再看一条CAN-FD标准帧,同样ID 0x123,仲裁段500kbps、数据段2Mbps,数据长度64字节,BRS=1。差分波形前17位(SOF到BRS)和经典CAN完全一样,2μs一位。关键看BRS之后的变化:从ESI位开始,波形突然变密,每个位只有0.5μs——直观感受就是原本平铺的脉冲被压缩到了原来的四分之一,数据段64字节在2Mbps下总共512位,屏幕这一段是一长串紧挨着的窄脉冲。

CRC段同样在数据速率下,直到CRC分隔符这个隐性位,位宽又跳回2μs,之后的ACK槽、ACK分隔符、EOF和IFS全部回到500kbps的慢速节奏。整帧总时长取决于位填充和CRC类型,实测64字节帧大约330~360μs。这张截图里最值得留意的是BRS切换点前后的"密度突变",如果环境噪声较大或采样率不足,突变处的边沿会变得模糊,解码器此时很容易报位错误,因为这个位置恰好是接收节点重新同步采样点的忙乱时刻。

4.3 不看解码结果,如何一眼识别CAN-FD

判断一条总线上的帧是经典CAN还是CAN-FD,不打开解码器也完全可以做到。先量一个位宽,确认仲裁速率;如果整帧位宽均匀,那是经典CAN或未开BRS的CAN-FD。如果帧中段位宽突然变窄、之后又恢复变宽,那基本就是CAN-FD且BRS=1。观察数据段总长,同样在500kbps下,如果数据字段长到明显超过经典CAN最大8字节的64位,说明即便BRS=0这也是CAN-FD帧。还可以看CRC区域长度,CAN-FD的17位或21位CRC在屏幕上比经典CAN的15位CRC明显更长。

这个肉眼判断法在混跑总线上尤其好用。同一条物理总线可以同时存在经典CAN帧和CAN-FD帧,协议层面靠FDF位区分,现代CAN控制器即使不支持FD格式,也不会对FD帧发送破坏性错误帧。我在调试网关转发、经典CAN与CAN-FD桥接的总线时,就是先靠波形特征判断哪些帧是FD帧,再决定该用哪个速率配置解码。另外一个和仲裁相关的细节:CAN-FD仲裁段保持低速,所以CAN-FD节点和经典CAN节点在同一物理总线上争用总线时,仲裁机制完全兼容,示波器上能看到显性电平覆盖隐性电平的正常仲裁过程。

4.4 典型帧时间对比:8字节与64字节的差距

用实测值算一笔账,更能理解CAN-FD的提速价值。忽略位填充的理想情况下:

场景帧结构总位长总时长
经典CAN单帧8字节@500kbps1+11+1+1+1+4+64+15+1+1+1+7108位216μs
经典CAN发送64字节(需8帧)108×8+24(IFS)888位1776μs
CAN-FD单帧64字节@500kbps/2Mbps17×2+550×0.5+12×2(μs)约580位等效约333μs

同一份64字节负载,CAN-FD在2Mbps数据段下比经典CAN快5倍以上,这还没算总线空闲和帧间间隔。实测波形里,CAN-FD单帧在屏幕上的时间占用远小于经典CAN的8帧连环,这也是两种波形非常直观的差异。如果数据段速率升到5Mbps,优势还会进一步拉大,但对线束和连接器的要求也同步提高。

5. 实测中更容易踩的坑与信号质量判断

5.1 探头、地线与共模偏移:三种容易被低估的干扰源

我用无源探头测CAN-FD时吃过一次亏:探头地线用了很长的鳄鱼夹线,结果数据段振铃被夸大,一度误判为总线拓扑问题,后来换成弹簧针式短地线,振铃明显减弱。原因很简单,长地线的分布电感在2Mbps边沿下会感应出可观压降。所以测CAN-FD数据段时,务必用最短的地线路径。车载环境下还要注意探头地线和底盘地之间可能存在电位差,最好把PicoScope主机和车辆电源系统共地,避免地环路噪声叠加进差分波形。

共模偏移也是常见隐患。理论上隐性时CAN_H和CAN_L都在2.5V附近,但两个节点地电位不一致时,两条线会整体上移或下移,隐性电平可能变成2V或3V。别急着认为收发器坏了,先测一下节点的地偏移。简单判断方法:示波器上同时看CAN_H和CAN_L,如果两条线的隐性电平同时偏离2.5V且偏移方向一致,基本是共模问题;如果只有一条线异常,才更像是收发器或线束问题。

5.2 采样率不足导致解码乱码

这是新手最常见的困惑。明明速率配对了,解码还是大量错误。第3.4节给过采样率参考,这里再强调一次:2Mbps数据段至少20MS/s,5Mbps至少50MS/s,并且要保证这个采样率覆盖到关心的整个时间段。如果你把时间轴拉长到几十毫秒又不降采样率,软件可能因内存限制自动降采样,这是解码错误的隐性来源。遇到解码乱码,先看采集设置界面的实际采样率,再决定是缩短时间窗还是降低分辨率,不要一上来就怀疑解码器坏了。

5.3 终端电阻异常在波形上的特征

终端电阻缺失或损坏的第一特征是显性电平幅度下降。标准双终端时差分显性幅度约2V,CAN_H约3.5V、CAN_L约1.5V;只剩单终端时,差分显性幅度只有约1V,CAN_H约3V、CAN_L约2V。如果测到显性幅度明显偏低,先别怀疑收发器,用万用表在总线两端量一下120Ω终端电阻是否到位,中间节点测量时等效阻值60Ω左右也是正常的。

终端电阻不匹配还会在波形边缘产生台阶状反射,尤其CAN-FD数据段的窄脉冲上,边沿后会出现一小段阻尼振荡。这在长线束、多节点拓扑里很常见,排查时优先看终端位置是否规范。比如一条总线上存在三个节点都带了120Ω终端,等效阻抗变成40Ω甚至更低,显性幅度会异常偏大,上升沿也会明显变快,这在5Mbps数据段下会引发额外振铃。

5.4 振铃与过冲:CAN-FD数据段的头号敌人

数据速率提高后,信号边沿时间相对位宽的比例变差,反射和振铃更容易踩到采样点。实测中最典型的恶性波形是:数据段每个上升沿后叠加一个超过幅度5%的过冲,随后出现1~2个周期的振铃。接收节点如果采样点设置偏早或偏晚,就会在振铃区间采到错误电平,表现为偶发CRC错误或位错误。

对这种问题,用PicoScope的测量工具直接量差分波形的过冲百分比和振铃峰值,再对照ISO 11898-2的信号质量要求判断是否超标。配合解码器的错误帧标记位置,能迅速锁定是哪一段线束或哪一个连接器造成的反射源。调整方法一般是:检查终端电阻位置、缩短高数据速率段的线缆长度、避免总线在不必要的点位上分支。数据段速率从2Mbps升到5Mbps之前,务必先用示波器确认波形余量足够。

5.5 掩膜测试与总线负载率统计

最后分享两个提效功能。PicoScope的掩膜极限测试(Mask Limit Testing)可以把一条已知正常的CAN-FD帧存成参考波形,定义上下限掩膜,然后让软件自动跑几小时,任何超出掩膜范围的异常边沿或幅度突变都会被自动标记。这对复现偶发丢帧特别有用,不用人一直盯屏,跑完回来看标记点就行。

总线负载率可以通过解码结果统计。把一屏的时间跨度设为T,屏内帧数记为f,每帧时长按位宽和长度估算,负载率近似等于所有帧时间之和除以T。实际操作时我会把时间轴设成几十毫秒,用PicoScope的帧起始列表和时间戳做统计,比逐个看帧更直观。负载率高的总线更容易暴露信号完整性问题,因为节点间干扰和反射会叠加,这也是观察CAN-FD波形差异之外需要额外关注的一层。

写到这顺便说一句,无论是研发调试还是售后诊断,千万别省掉用示波器看总线波形这一步。CAN与CAN-FD的协议差异可以看文档,但真正理解它们的数据速率切换、信号质量边界和故障表现,必须依赖波形级观测。PicoScope的深存储、12位分辨率和CAN/CAN-FD解码,刚好把这些能力整合进一台电脑里。如果你的项目也开始从经典CAN向CAN-FD迁移,建议下次上电前先按这篇的配置搭好捕获环境,等波形出来后对照着看一遍,你对协议的理解会比只读规范深一个台阶。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询