1. CAN FD 测试的特殊性:四件"经典 CAN 没有"的事
CAN FD(ISO 11898-1:2015)与经典 CAN 的物理层完全兼容(都是差分双绞线、同样的电平规范),但协议层引入了四个新变量,每一个都会制造经典 CAN 时代不存在的故障形态:
| 新特性 | 故障形态 | 测试重点 |
|---|---|---|
| 双波特率(BRS) | 仲裁段/数据段切换点采样失败、BRS 位误判 → 整帧错位 | 两段波特率与切换时序一致性(第 4 节) |
| 双采样点 | 两节点仲裁段采样点不一致、数据域采样点偏差 → 长帧尾部错位 | 采样点实测(第 4 节) |
| 64 字节长帧 | 数据域持续 500 位以上高速传输,信号反射/振铃在长帧中段累计 | 眼图、长帧误码(第 3、5 节) |
| CRC 17/21 + 固定填充 + ESI 位 | CRC 长度与填充规则错误、错误状态通过 ESI 传播 | 帧结构逐位校验、错误注入(第 5 节) |
测试策略与经典 CAN 相同的是框架(物理层 → 一致性 → 数据链路层 → 应用层,见07 篇),不同的是每个层次里都要为上述四个新变量增加专项测试项。
2. 测试工具链:周立功 USBCANFD + ZCANPRO + CANScope-Pro
周立功(致远电子 ZLG)的 CAN 测试工具分两级:分析仪做收发与协议观察,CANScope 做物理层深度测量与一致性测试。工业现场/研发实验室最常见的组合:
| 工具 | 定位 | 关键能力(CAN FD 相关) |
|---|---|---|
| USBCANFD-100U / 200U | USB-CAN FD 分析仪(1 路 / 2 路) | CAN 波特率 40k~1Mbps、CAN FD 数据域 100k~5Mbps 任意可编程;支持 ISO 与 Bosch 两种 FD 标准;数据域最长 64 字节;USB 2.0 高速,单通道发送万帧/秒级;兼容 CAN 2.0A/B 模式 |
| ZCANPRO | 上位机分析软件(配 USBCAN 系列) | 报文收发与统计、错误帧/总线负载实时显示;CAN FD 双波特率自定义(如 1Mbps(75%), 5Mbps(75%) 分别配采样点);DBC 解析与发送、报文记录回放;CANopen/J1939 协议解析 |
| CANScope-Pro | CAN 总线综合分析仪(示波器+协议分析+误码率+压力测试一体) | 眼图(眼高/眼宽/抖动)、位时间与波特率实测、信号质量分析(幅值/斜率/扰动定位问题节点)、网络阻抗分析(60Ω±20%)、采样点测试、错误帧定位;配合 CANScope-StressZ 可做数字干扰注入、总线短路/长度/负载模拟等压力测试 |
典型测试拓扑:分析仪(USBCANFD 或 CANScope)作为独立节点挂上总线,不参与被测系统逻辑,只做观察/注入。总线两端各一只 120Ω 终端电阻(合计 60Ω),被测 DUT(驱动器/控制器)并联在中间。CANScope-StressZ 的压力测试模块可以在物理层上模拟短路、加长总线、增减负载、注入数字干扰,用来评估系统"在恶劣工况下是否仍稳定"。
① 分析仪 CAN_H/CAN_L 接总线对应线(别接反,显性电平会反);② 终端电阻:总线两端各 120Ω,实测 CAN_H-CAN_L 间约 60Ω(可先断电用万用表量);③ 共地:分析仪与被测系统地电位一致,避免共模偏差。
3. 物理层测试:眼图、位时间与信号质量(CANScope)
CAN FD 数据域跑到 2M~5M 时,位时间短到 500ns~200ns,信号完整性成为第一道关。CANScope 的实时示波器把大量波形按位周期叠加成眼图:
| 测试项 | 测量方法 | 合格判据(参考) |
|---|---|---|
| 眼图 | 示波器自动量程,叠加足够波形后测眼高/眼宽 | 眼高(差分幅度余量)充足、眼宽接近 1 个位时间;眼图"眼皮"越厚抖动越大 |
| 波特率实测 | 测量位宽度(位宽 = 1/波特率),多测几个位取平均 | 仲裁段/数据域实测波特率与配置偏差在容差内(125k 偏差案例:号称 125k 实测偏差超限 → 节点不同步) |
| 信号质量 | 按幅值/斜率/扰动特征逐节点评估波形 | 快速定位"哪个节点波形差"(问题节点往往是反射源) |
| 网络阻抗 | 交流阻抗分析(5k~100kHz 频段) | 满足 60Ω ± 20%,超出说明终端电阻缺失/过多或支线异常 |
| 压力测试 | CANScope-StressZ 注入干扰、模拟短路/长度/负载 | 系统在干扰/短路/高负载下仍不出现错误帧或可恢复 |
数据域 2M 以上时重点看数据段眼图:长帧后半段若出现眼宽收窄,往往是反射叠加(支线过长、终端不匹配);抖动集中在某个节点发出的帧上,优先查那个节点的收发器与 PCB 布线。物理层问题在协议层表现为"偶尔错误帧、偶发 bus-off",是最难排查的一类——所以测试顺序必须物理层先行。
4. 一致性测试:双波特率、双采样点与容差
CAN FD 一致性测试的核心是验证"DUT 的仲裁段/数据段波特率与采样点是否与设计一致"。原理与工具:CANScope 可以按指定波特率收 DUT 发出的帧,并测量 DUT 的实际采样点;ZCANPRO 侧则要把分析仪自身配成与被测网络完全一致的双波特率+双采样点,否则连"听"都听不到:
一致性测试的三个必做项:
- 双波特率验证:DUT 发 FD 帧(BRS=1),CANScope 分别实测仲裁段与数据段的实际波特率,偏差应在规范容差内(晶振容差 + SJW 吸收范围,见双波特率篇第 3 节)。
- 采样点实测:CANScope 的"采样点测试"功能——DUT 初始化后只监听不发,由 CANScope 主动发帧并扫描采样点,测出 DUT 真实采样点位置。经典 CAN 时代不少项目采样点偏差 5% 内"能用就行",FD 数据域位时间只有几百 ns,5% 就是几十 ns,长帧必错。
- 切换点一致性:BRS 位后的第一个数据域位、CRC 定界符前的最后一个数据域位,采样时刻必须与两段各自的波特率相位对齐;切换点附近出现毛刺/错位,直接抓 FD 帧时序图看。
分析仪只配了仲裁波特率、没配数据域波特率,或两段采样点与 DUT 不一致——ZCANPRO 会一直"收不到帧"或帧内容乱码。先核对双波特率+双采样点四项配置,再怀疑硬件。
5. 协议层测试:FD 帧结构、错误注入与 ESI 位
数据链路层的测试对象是"帧对不对、错怎么报"。CAN FD 帧结构与经典 CAN 的差异(详细位序见05 篇)在测试时要逐位验证:
| 字段 | FD 帧(BRS=1) | 测试验证点 |
|---|---|---|
| FDF | 1 = FD 帧 | 经典节点看到 FDF=1 会报格式错误——混跑网段要测"经典节点是否被 FD 帧干扰" |
| BRS | 1 = 数据域提速 | 切换点位置正确;BRS=0 的"全速帧"与 BRS=1 帧都要能收 |
| ESI | 0 = 发送方错误主动;1 = 错误被动 | FD 新增:接收方可直接看到发送节点的错误状态——测"DUT 进入错误被动后发出的帧 ESI=1" |
| DLC | 0~15(编码 0~8/12/16/20/24/32/48/64) | 64 字节长帧收发正确;非 8/16/32/64 的中间长度也按规范编码 |
| CRC | DLC≤16 用 CRC17(+5 固定填充位);DLC>16 用 CRC21(+6 固定填充位) | CRC 字段长度固定(22/27 位),数据段本身不填充——CRC 错判为填充错误是 FD 特有的错误注入点 |
错误注入测试是协议层测试的核心手段:用分析仪人为制造单点错误,验证 DUT 的错误检测与状态机响应(错误帧五类与错误状态机见07 篇第 4 节,FD 上同样适用):
- 位错误注入:发送时在固定位位置翻转一位,DUT 应检出并回错误帧;
- 填充错误注入:在数据段制造 6 个连续相同位(FD 数据段无填充,连续 6 位即违规)——这是 FD 特有的注入点,经典 CAN 测试不会覆盖;
- CRC 错误注入:改写 CRC 字段,DUT 应报 CRC 错误;
- ACK 缺失:分析仪"只听不答"模式(不产生 ACK),观察 DUT 的发送错误计数与错误状态迁移。
注入后观察两个指标:错误帧统计(ZCANPRO 的统计面板实时显示各类错误帧数量)与错误状态迁移(错误主动 ↔ 错误被动 ↔ bus-off,配合 ESI 位验证——DUT 错误被动后发出的 FD 帧 ESI 位应为 1,这能确认 ESI 机制真正生效)。
6. 负载与吞吐:CAN FD 值不值,用数据说话
引入 FD 的核心收益是吞吐。测试时用分析仪统计总线负载率(bus load)并在同一条总线上对比"经典 8 字节帧"与"FD 64 字节帧"的实际效果。理论值可精确计算(见第 7 节演示):
经典 CAN:8 帧 × 8 字节 ≈ 8 × 256µs ≈ 2.05ms(单帧约 128 位含填充)
CAN FD:1 帧 × 64 字节 ≈ 340µs(仲裁段 44µs + 数据域 270µs + 尾部 26µs)
→ 同样数据量,总线占用时间降为约 1/6,有效吞吐提升约 6 倍
实测注意:负载率按位时间占比统计(FD 帧里数据域位更快,占用总线时间更短),所以 ZCANPRO/CANScope 统计 FD 负载率时会按各段实际波特率加权——不要用"帧数 × 单帧长度"毛估。
7. 交互式演示:CAN FD 帧解析与吞吐对比计算器
输入仲裁/数据波特率、DLC 与 BRS 开关,实时计算单帧总时长、最大帧率、有效吞吐,并与经典 CAN(同仲裁波特率、8 字节帧)对比。所有数值按位长度与波特率真实计算,可对照第 6 节公式复核。
观察要点:数据域提速越狠、DLC 越大,吞吐倍数越可观;DLC≤16 时用 CRC17(22 位)、DLC>16 用 CRC21(27 位),切换点正好在 16 字节处;BRS 关闭时整帧走仲裁波特率(相当于"FD 格式但单速率"),吞吐明显回落——这正是短帧场景"FD 未必更快"的原因。
8. 可编译测试代码:SocketCAN FD 收发与错误统计
Linux 侧用 SocketCAN 即可完成大部分协议层测试:发 FD 帧(可带 BRS)、收帧、统计错误帧。下面是完整可编译的测试程序:
Windows 侧用周立功 SDK(VCI 接口)做同样的事:ZCAN_OpenDevice 打开 USBCANFD → ZCAN_InitCAN 配置双波特率+双采样点 → ZCAN_StartCAN → 用 VCI_CANFD_FRAME 结构(含 flags 的 FDF/BRS/ESI 位、data[64])收发。字段位定义以 ZLG SDK 头文件(zcan.h)为准,工程上直接看 SDK 示例工程的 canfd_loopback 例程即可。
9. CAN FD 测试清单(Checklist)
| 层次 | 测试项 | 判据/工具 | 通过 |
|---|---|---|---|
| 物理层 | 终端电阻 | 万用表 CAN_H-CAN_L ≈ 60Ω | ☐ |
| 眼图(眼高/眼宽/抖动) | CANScope-Pro;数据段 2M+ 重点看 | ☐ | |
| 波特率实测 | 位宽 = 1/波特率,两段分别测 | ☐ | |
| 网络阻抗 / 压力测试 | 60Ω±20%;StressZ 短路/干扰注入 | ☐ | |
| 一致性 | 双波特率配置一致性 | 分析仪与 DUT 仲裁/数据段完全一致 | ☐ |
| 双采样点实测 | CANScope 采样点测试;与设计值偏差在容差内 | ☐ | |
| BRS 切换点 | FD 帧时序图,两段相位对齐 | ☐ | |
| 数据链路 | FD 帧结构逐位验证 | FDF/BRS/ESI/DLC/CRC17↔21 边界(16B) | ☐ |
| 64 字节长帧 | 双向收发 1000 帧无错 | ☐ | |
| 错误注入 | 位/填充/CRC/ACK 错误 → 错误帧正确上报 | ☐ | |
| ESI 位与错误状态 | 错误被动节点发出的帧 ESI=1 | ☐ | |
| 应用层 | 负载率与吞吐对比 | FD 64B vs 经典 8 帧,实测符合理论 | ☐ |
| 长时间稳定性 | 满载 8h 无错误帧、无 bus-off | ☐ |
10. 工程要点
- 物理层先行:数据域 2M+ 的偶发错误帧,90% 是眼图问题(反射/终端/支线)而不是配置问题。先看眼图再查协议,顺序别反。
- 分析仪配置必须与 DUT 逐位一致:仲裁波特率、数据波特率、两个采样点,四项全对上才能稳定观察;不一致的症状是"收不到/乱码",与坏线极像。
- 长帧是 FD 的试金石:64 字节帧数据域持续约 530 位,任何信号缺陷都会在帧中段累计暴露——用 64 字节帧做稳定性测试比短帧有效得多。
- 16 字节是 CRC 分界线:DLC≤16 用 CRC17、DLC>16 用 CRC21,测试 DLC 覆盖 8/16/24/48/64 各档,别只测 8 和 64。
- 经典节点混跑要测干扰:FDF=1 的帧对经典节点是"格式错误",混跑网段必须实测经典节点在 FD 帧流量下的行为(07 篇错误帧部分结合看)。
- 记录测试条件:波特率/采样点/线缆长度/终端配置/环境温度写入测试报告(07 篇报告要点同样适用),CAN FD 结果对拓扑敏感,条件不写全的报告没法复现。
11. 小结
- CAN FD 测试 = 经典 CAN 测试框架 + 四个专项:双波特率、双采样点、64 字节长帧、CRC/ESI 机制
- 工具链:USBCANFD + ZCANPRO 做数据链路层收发与错误统计;CANScope-Pro 做物理层眼图与一致性测试
- 物理层:眼图/位时间/网络阻抗 60Ω±20%/压力测试,数据域 2M+ 必测
- 一致性:双波特率双采样点逐位对齐,采样点用 CANScope 实测而非只看配置
- 数据链路:FD 帧结构逐位验证 + 四类错误注入 + ESI 位验证错误状态传播
- 吞吐用数据说话:FD 64B 帧理论约 5 倍于经典 8 帧(500k/2M 组合),实测以总线负载统计为准
CAN 板块链路至此补齐:帧与 SocketCAN(04)→ 双波特率采样点(05)→ 伺服实战(06)→ 经典 CAN 测试(07)→ Modbus 寄存器(08)→ CAN FD 测试(本篇)。