尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

用PicoScope 5分钟抓出CAN与CAN-FD波形差异及调试实战

用PicoScope 5分钟抓出CAN与CAN-FD波形差异及调试实战 做车载总线诊断和嵌入式调试这些年PicoScope一直是我工作台上的常客。这玩意儿与其说是个示波器不如说是个能随身携带的“总线翻译官”——尤其当你要同时面对CAN和CAN-FD混搭的整车网络时光看报文解析软件里的数字永远不如亲眼看一眼差分电压波形来得踏实。今天我就用一次真实的项目排查聊聊怎么在5分钟内用PicoScope抓出CAN和CAN-FD的波形差异并把那些示波器说明书里不会写的细节一并倒出来。我知道很多人一听到“看波形”就头大觉得那是硬件大牛才干的活。其实分辨CAN和CAN-FD没那么玄核心就是盯住一个关键位置BRS位之后的数据段有没有突然变快。只要你会看CAN电平的显性和隐性再掌握PicoScope的触发和解码设置剩下的就是几分钟的事。这篇文章既写给刚接触CAN总线的新人也适合那些手上有PicoScope但一直没把解码功能用起来的老哥。我会把探头怎么接、参数怎么调、波形怎么看、坑在哪全交代清楚最后再拆一帧真实报文。1. 为什么都说“看波形就能分CAN和CAN-FD”1.1 我的真实场景从一次排查说起上个月陪客户做一块域控制器的台架联调现象很典型ECU偶发收不到某些节点发来的数据但报文分析仪里又看不到超时和错误帧。用传统USB-CAN盒子来回抓包只能看到一堆16进制数据完全定位不了问题。后来我把PicoScope的差分探头并到CAN_H和CAN_L上用CAN触发功能按帧抓波形一眼就发现不对劲有一部分“CAN-FD”报文的位宽在数据段忽宽忽窄和协议规定完全不符。后来查出来是某个传感器节点的CAN-FD控制器把数据段波特率配错了导致波形后半段位时间不一致。如果只依赖协议解析这种错误几乎会被当作正常报文放过因为解析器按固定波特率去采样很多时候照样能解出数据只是偶发出错。但示波器不会骗人波形把物理层的瑕疵直接暴露出来。从那次以后我在任何CAN-FD项目里都会先看波形再谈协议这个习惯救了我好几次。1.2 CAN-FD到底改了什么东西才让波形变不一样要理解波形差异得先明白CAN-FD在物理层上做了什么手脚。经典CAN最高速率通常是500kbps或1Mbps而CAN-FDCAN with Flexible Data-rate最大的特点就是允许“一个帧里有两段速度”仲裁段和大部分控制段仍然按原来的低速率发送等报文走到BRSBit Rate Switch位时如果该位为显性收发器立刻切换到一个更高的速率来发送后面的数据段和CRC段。这个切换过程在示波器上会形成肉眼可见的“台阶”或“压缩”。你可以把CAN总线想象成一条双车道公路经典CAN全程限速50km/h而CAN-FD在BRS位之后进入一条临时高速匝道限速变成200km/h。波形上同样一个bit对应的时间长度在数据段会突然变窄。这就是区分两者的核心物理特征。至于为什么设计成两段速度是因为仲裁过程还需要所有节点同步如果仲裁段也跑高速总线上的竞争窗口会变得极窄可靠性大打折扣。所以保持仲裁段低速、数据段高速是兼顾兼容性和吞吐量的妥协方案。搞清楚这层原理再看波形差异就很简单了你要找的其实就两个东西——BRS位有没有出现以及BRS位之后位宽有没有突然变窄。有了这个直觉下面所有实操步骤都是在帮你把这个直觉落在屏幕上。2. 动手之前的准备PicoScope探针接法和关键设置2.1 探针怎么接别把差分信号接地很多人第一次拿示波器测CAN总线习惯性地把探头的接地夹夹到车身上探头尖去点CAN_H。这么做在低频下凑合能看但测CAN-FD的高速数据段时共模噪声和地弹会把波形搅得一团糟而且你看到的其实是“单端信号”不是总线真正的差分状态。正确做法是用差分探头把两个输入端分别接到CAN_H和CAN_L上注意不需要接地因为你想看的是两条线之间的电位差。我用的是PicoScope 4824A配TA342差分探头接法很简单TA342的红色鳄鱼夹夹到CAN_H黑色夹夹到CAN_LUSB插到电脑上打开PicoScope 7软件。如果手头一时没有差分探头也可以用两个普通探头分别量CAN_H对地、CAN_L对地然后在软件里用数学通道做CHA减CHB的波形。这个办法能应急但带宽和共模抑制比会差一些在1Mbps以下低速总线勉强可用测CAN-FD的2Mbps以上数据段时最好还是用真正的差分探头。连接端子时要注意CAN总线两端有120欧终端电阻如果你的示波器探头阻抗不够高相当于在总线上又并了一个负载可能导致显性电平幅值下降。PicoScope的差分探头输入阻抗通常在1MΩ以上问题不大但如果你用的是那种便宜的50Ω探头千万别直接怼上去。2.2 触发和时基设置先从波特率倒推时间轴打开PicoScope 7之后第一件事是设置触发。我的习惯是选择CAN触发PicoScope自带CAN协议触发功能可以按帧起始SOF、帧类型、ID甚至数据场来触发。最省事的办法在触发类型里选“CAN”然后让示波器自动找SOF位。如果选不了协议触发低端型号可能没有那就用普通的边沿触发触发源选差分通道触发电平设成显性电平的中间值比如显性低于1.5V、隐性高于2.5V而差分典型值是CAN_H3.5V、CAN_L1.5V时显性二者相等约2.5V为隐性。一般把边沿触发设为下降沿电平设置在1.8V左右基本都能稳定抓到帧起始。时基设置的技巧是不要凭感觉乱放。先确认你的总线仲裁段波特率是多少比如500kbps那么一个位时间就是1/5000002μs。若要完整显示一个最长帧经典CAN最长130位左右即约260μsCAN-FD十六字节数据帧可能拉到几百微秒采样时长建议设500μs到1ms。水平时基放慢一点没关系先看清楚整帧结构再放大看细节。波形采样率也要注意PicoScope 4824A在12位精度下能到80MS/s对于CAN-FD的5Mbps数据段来说一个位只有200ns采样率至少要20MS/s才能比较平滑地还原波形形状。如果你用的是8位的PicoScope 2000系列建议把带宽限制打开避免高频噪声影响波形判断。2.3 解码器怎么开让示波器把0101翻译成报文光看波形还是一堆跳动的电平要快速读懂内容必须打开PicoScope的总线解码功能。在通道栏右侧选择“串行解码”——CAN然后把解码通道指向刚才接差分探头的通道设好仲裁段波特率和采样点位置。PicoScope会自动识别CAN和CAN-FD帧前提是你勾选了“CAN FD”选项。采样点位置这个参数很关键通常设为70%~75%即采样时刻在位的后半段这样能避开CAN位跳变沿附近的振铃和边沿抖动。打开解码后示波器屏幕上每条报文的下面会显示ID、DLC、数据字节和CRC状态。如果解码器把数据段里的位速率识别错了往往会出现大片CRC错误或续帧错误。这时候回来看波形你会发现BRS位之后的数据位宽和解码器设定的位时间不匹配。这其实就是一种快速诊断方法解码器错得越离谱说明实际位速率和新设定值差得越远。调试CAN-FD时我通常会把BRS后的数据波特率也填进解码器并同时开启容错采样让示波器尽量把帧解出来再用面板上的时间光标去实测单个数据位的宽度。3. 实测波形对比CAN与CAN-FD的五大关键差异3.1 仲裁段完全一致这是第一眼确认的基础先看帧开头。无论CAN还是CAN-FD从SOF到BRS位之前的这部分波形几乎一模一样。都是先一个显性位表示帧起始然后跟着12位的仲裁场11位ID RTR位标准帧格式CAN-FD的RTR位固定为显性用于区分数据帧然后是IDE位。在标准帧里IDE位为显性在扩展帧里IDE位为隐性。这部分位时间完全由仲裁段波特率决定和后面CAN-FD是否提速没有关系。你拿到一帧波形第一件事就是数一数从下降沿开始的波形节奏是否均匀。在经典CAN里整个帧从头到尾都是同一个位速率所以你会看到几乎等宽的位图案——最宽的就是连续多个隐性位电平保持在高位最窄的就是连续多个显性位。而在CAN-FD里只有初始这二十来个位是“慢速等宽”的。所以只要看到前半段宽度规整、后半段突然变得密集或者明显出现两种不同宽度的位基本就能断定这是CAN-FD。如果整帧从头到尾位宽都一样那就是经典CAN不用再往后看了。3.2 BRS位是分水岭位速率切换一眼看穿BRS位是CAN-FD新增的控制位位置在IDE位之后紧跟在一个保留位之后DLC位之前。BRS为显性表示后面的数据段切换到高速为隐性表示不切换整个帧都按低速发送。因此在标准CAN协议里根本没有这个位它的位置在原协议中属于保留位。在实际波形上BRS位是一个宽度正常的显性位随后紧跟的位如果突然变成“高速位”那这个地方就是肉眼可见的分水岭。我习惯把光标放在这个位置量一下BRS位持续时间应该是1个慢速位时间比如500kbps下是2μs紧接着的下一个位时间可能变成250ns4Mbps。这个压缩幅度非常直观。如果你看到BRS位前后所有位宽度都一样说明这个CAN-FD节点没有启用位速率切换即BRS位为隐性数据段仍然按仲裁段速度发送也可以说这是一个变体的CAN-FDFlexible Data-rate未生效。在验证CAN-FD功能时这个现象很值得注意因为很多早期芯片默认不启用BRS结果你抓到的所谓“CAN-FD”其实数据段速度没提上去需要到配置寄存器里去查。3.3 数据段位宽变化CAN-FD的“密电码”过了BRS位之后CAN-FD的数据场和CRC场在位速率上会显著变快。假设你的CAN-FD配置为仲裁段500kbps、数据段2Mbps那么一个高速位的时间是500ns而慢速位是2μs整整快了4倍。在同一个屏幕中你会看到BRS前一个位占屏幕宽度BRS后一个位只占四分之一宽度。这就是最直观的“密电码”——它不像电平高低那样需要解码器光靠眼睛就能识别。还有一个细节CAN-FD最高支持64字节数据而经典CAN只有8字节。如果你抓到一个数据场特别长的帧那大概率是CAN-FD即使它没有切换BRS就是上面说的慢速CAN-FD它的DLC也会更大。这个时候你可以数DLC位后面的数据字节数。我在实际测试中通常把时基放大到每个位都能看清然后连续点住光标测量数据场中间连续5个位的时间算出实际数据段波特率。用这个实测值和配置值对比能迅速发现波特率偏差。比如配置成2Mbps实际却是1.8Mbps波形上位时间会偏差10%左右对应500ns变成了556ns多测几个位就能觉察到。3.4 CRC校验段与填充规则波形末端也有讲究再往后看在报文尾部CRC场也是区分CAN和CAN-FD的一个重要位置。经典CAN使用CRC-15多项式位于CRC分隔符和ACK场之前帧结尾的结构是CRC界定符、ACK时隙、ACK界定符然后是连续7个隐性位作为帧结束EOF。CAN-FD则使用更强的CRC根据数据场长度自动选择17位或21位的CRC多项式。在示波器上这些CRC位的数量差异并不像位速率切换那样“一眼就能看出来”因为你无法光靠波形知道它内部算出来多少位但你可以在解码器的CRC状态栏看到结果。另外两种协议都用了位填充规则发送端在连续5个相同极性位之后自动插入一个反向填充位。在低速CAN和高速CAN-FD数据段里填充规则都生效。于是在波形上你会看到所有连续的显性/隐性电平长度不会超过6个位时间串行解耦后。这其实是个不错的“帧有效性检查”如果你在波形中看到一个电平持续时间特别长比如超过了6个位时间都没翻转那说明总线空闲或者帧已经结束。如果在帧中间出现了超长电平多半是解码失败或者串位了。值得一提的是CAN-FD的填充规则在部分分段上有些微妙差别比如CRC段之后不再填充但看电平连续长度这个“土办法”仍然有效它不会给你高精度的协议校验但能快速帮助分辨总线活动热潮是否正常。很多新人在抓CAN波形时会把总线空闲时的隐性电平误认为是一长串“1”其实那只是没有节点驱动的空闲状态不是数据。3.5 波特率配置错误时的波形会怎样第三个差异场景是“错误配置”。如果你用PicoScope抓CAN和CAN-FD混合网络但解码器里的波特率设置错了比如仲裁段设成了1Mbps而实际是500kbps示波器会疯狂报解帧错误。此时看波形你会觉得位宽整体都比正常时窄了一半解码出的ID和实际完全对不上。更隐蔽的是如果你用500kbps解1Mbps的经典CAN每个“视频位”会解码成两个位输出的数据乱套。对于CAN-FD配置错更麻烦因为数据段和仲裁段是两套波特率你得分别填对。我在工作中经常遇到有人只改了仲裁段波特率忘了改数据段结果解码器的数据场一片乱码。这时候从波形上去量实际的数据位宽可以帮助你快速确定应该填多少。把PicoScope上的时间光标放在BRS位后的数据段上连续选中10个位读总时间除以10就是一个位的平均宽度用1除这个宽度就是波特率。这个操作比盲猜管用得多也让我养成了“先测实位宽再填解码器参数”的习惯。4. 常见问题与避坑指南4.1 触发不到CAN FD数据帧怎么办我遇到过不少朋友问“PicoScope明明接了CAN为什么按Trig键就是抓不到帧”大部分情况不是探头问题而是触发方式没选对。如果你用普通的边沿触发下降沿而CAN-H在隐性时是2.5V显性时降到1.5V下降沿幅度只有1V触发电平设成2V可能不稳定。另一个原因是PicoScope边沿触发默认的耦合方式是交流低频信号会被滤掉一些。建议把触发耦合设为直流再配合约30%的触发电平滞回。如果你坚持用CAN协议触发但抓不到CAN-FD帧请确认你选择的是“CAN FD”触发类型而不是普通CAN。部分PicoScope老固件版本对CAN-FD触发支持不好可以在官网更新到最新的PicoScope 7软件和固件。我去年就踩过这个坑以为硬件问题后来发现是软件版本太老升级后瞬间丝滑。另外触发位置要放在屏幕左侧还是中间我习惯把水平延迟调到约10%处让触发点靠左这样触发后可以看到完整报文不至于帧头被截断。4.2 波形上为什么会有毛刺或台阶当你看到CAN或CAN-FD波形上有明显的毛刺、回勾或台阶时先别急着怀疑总线坏了。大部分情况下是阻抗不匹配或者测量方式不对。例如探头地线太长会形成大的测量回路捕获到开关噪声。解决方法是尽量使用差分探头并把探头线缩短。测量点最好选在终端电阻靠近ECU一侧而不是在长长的线束末端。总线上的毛刺还可能来自收发器切换速率不匹配尤其是多个节点用不同厂家芯片时TCAN和TJA1057等器件的上升沿斜率不一样会在显性到隐性的切换点造成台阶。如果解码器能正常解帧且CRC不报错其实这种台阶是可以容忍的但若出现错误帧频繁就要检查CAN_H和CAN_L之间的共模电感和ESD保护器件是否异常。还有一种“台阶”只在CAN-FD里出现从慢速仲裁段切换到快速数据段时总线电平可能因为收发器延迟而出现一个短暂的回沟。这是正常现象反映的是接收节点端的PLL正在锁定新位率。你只要用解码器确认帧能被正确识别就不用管它。我的建议是不要看到一点台阶就换硬件先用PicoScope放大波形看看台阶位置是否正好在BRS位之后如果是那往往不是问题。4.3 差分探头和单端探头的选择坑很多人图省事用单端探头测CAN_H对地看到波形也能看个大概但这样测出来的波形受地参考影响很大。汽车12V系统里地偏移可能达到好几伏在发动机启动瞬间更是剧烈波动单端探头的波形可能大幅“漂移”甚至超出屏幕。你真正关心的其实是CAN_H和CAN_L的电压差差分探头直接给出干净差分信号而且共模抑制比高适合在实车上测。如果你确实没有差分探头还有一招两个探头分别接CAN_H和CAN_L在PicoScope里新建数学通道A-B这样也能显示差分波形。注意两个探头要同时选用相同衰减比并做零偏移校准。但这种方法在高速CAN-FD下不宜依赖因为两个探头分别经过不同路径后会有相位差解出来的差分波形边缘会有畸变。有条件还是入手一个TA342或类似的高压差分探头带宽至少20MHz以上CAN-FD实用性才够。4.4 关于ISO和非ISO CAN FD的识别CAN-FD协议有个历史遗留问题非ISO早期草案和ISO 11898-1:2015的CRC算法不同。2020年以后的设备基本都只支持ISO标准但有些老节点可能还停留在非ISO版本。如果你在混合网络里抓波形发现某些CAN-FD帧解码出来CRC错误而波形上看不出物理层异常那很有可能就是ISO版本不匹配。PicoScope 7的CAN解码器默认按ISO计算CRC但也可以手动切换成“非ISO”模式很多人在解码器设置页忽略了第三级菜单里的这个选项。区分这两种帧不看波形更依赖协议解析。但在实际操作中你可以通过PicoScope的解码器把不同节点发送的帧分别解码如果同一个节点发出来的帧用ISO模式解CRC全错换成非ISO模式就全对基本可以断定它是个非ISO节点。出现这种局面的总线通常会是经典CAN和CAN-FD混用且老传感器节点居多。如果整车项目里碰到这个问题我的建议是别试图在软件里兼容它因为非ISO和非ISO节点之间互通性很差最稳妥的方案是升级老节点的协议栈到ISO版本。反正波形已经帮你定位到异常节点决策就有了依据。5. 我的实操心得拆解一个真实CAN-FD报文波形最后分享一段最近实测的波形分析过程算是把前面所有知识串一遍。车型是一条台架CAN-FD网络仲裁段波特率500kbps数据段2Mbps。我用PicoScope 4824A的差分探头接在域控制器CAN接口处触发条件设为CAN FD触发时基200μs/格采样率50MS/s。触发后屏幕上出现了一帧典型CANFD数据帧。我先看帧头SOF到BRS位的宽度大约2μs一格共约20多个位宽度均匀。接着在BRS位的位置可以用解码栏的标记直接跳转之后我发现波形明显“挤”在一起一个位的时间仅有500ns和配置的2Mbps完全对应。然后我用时间光标测量了数据场里连续8个位的总时间4000ns算下来单个位500ns确认数据段速率无误。接着放大CRC段看到CRC和CRC分隔符后的波形解码器显示CRC0x3A1B无错误。整帧下来示波器左下角的统计栏显示了一帧有效CANFD帧DLC0x08数据字节也能一一对上。有意思的是同一个网络上还混有经典CAN帧两者的波形在同一屏幕上交替出现经典CAN的各个位宽度从头到尾都是2μs而CANFD则在BRS后变成500ns。用PicoScope的“帧类型”筛选功能可以直接统计一段时间内经典CAN和CANFD帧的数量这对评估网络总负载率、带宽利用率非常方便。我之前一直用总线分析仪统计现在改用示波器后发现物理层和协议层能同时看效率高了不止一倍。还有一个小技巧想特别提一下用PicoScope的“串行解码”选项选择“CAN/CAN FD”然后在“错误帧”选项卡里把“CRC错误”和“格式错误”的帧高亮再开启无限余晖模式persistence mode让示波器累积显示帧波形。这样在几秒钟内你就能看到大量帧的重叠形状。如果一个节点发送的数据段位速率抖动很大余晖波形会显得很“糊”边缘模糊而正常节点会形成清晰利落的眼图eye diagram。我靠这个观察过好几块硬件发现芯片晶振精度不够或者收发器驱动能力弱导致眼图闭合。这个功能特别适合排查隐性故障比单帧逐一看高效得多。我个人在实际操作中的体会是PicoScope这类高分辨率示波器用于CAN-FD调试最大的价值不是“测电压”而是把物理层和协议层拉到同一个时间轴上比对。你既能看总线高低电平的微观质量又能看ID和数据内容的宏观逻辑。遇到任何CAN-FD通信异常我先做的三件事永远是第一用示波器看BRS位之后波形有没有正常提速第二量实际数据位宽度和配置波特率做对比第三开解码器的CRC错误统计。只要这三步走完九成的问题都能锁定方向。剩下的那一成再考虑是不是线束过长、节点过多、或者软件兼容性问题。如果你正准备上手CAN-FD项目这套方法可以直接套用省钱省时间。
返回列表