一、先把事说清楚:CAN 和 CAN FD 在工程里不是一回事
很多人上来就把 CAN FD 当"CAN 提速版"——只对一半。
维度 | Classical CAN | CAN FD |
|---|---|---|
最大Payload | 8 Byte | 64 Byte |
波特率 | 整帧单一波特(常用 125k/250k/500k/1M) | 双波特:仲裁段 500k~1M / 数据段2M~8M |
帧格式 | 标准/扩展帧 | FD 帧 +FDF / res / BRS / ESI 位 |
CRC | 15 bit | 17/21 bit(抗干扰更强) |
典型场景 | 车身/底盘/老款动力 | 域控/智驾/新一代军工总线 |
⚠️第一个难点就在这:CAN FD 是"双波特+新 CRC+新控制位",老款 CAN 卡如果只支持 Classical CAN,接 FD 节点要么通不上,要么数据段解析错——测试设备侧必须原生支持 FD,不能靠"CAN 卡凑合"。
二、CAN/CAN FD 测试到底测什么?(分层拆)
不要一上来就"发帧看响应",工程上要分四层:
L1:物理层 & 链路层基础验证
波特率/采样点(仲裁段 vs 数据段,FD 要分别配)
验收码(Filter)+ 屏蔽码(Mask)——只收想要的 ID
标准帧 vs 扩展帧(29 bit ID 在军工/汽车都常见)
总线负载率观察(≥70% 就要警惕)
L2:协议层一致性
数据帧 / 远程帧 / 错误帧 / 超载帧
ACK 槽(几个节点应答?无 ACK → 发送方会重发)
CRC 校验(FD 的 17/21 bit CRC 错包注入)
Bit Stuffing 违例(注入填充错误)
L3:故障注入 & 容错(这是 HIL 最值钱的部分)
BusOff 注入:强制节点连续发错误帧 → 看是否进 BusOff → 看恢复时间("三错即 Off"是 ISO 11898 硬规定)
ACK 缺失:屏蔽 ACK 槽 → 看发送方重发逻辑
ID 冲突 / 优先级反转:两个节点同时抢仲裁,看高优先级是否先出
FD 特有:BRS 位不切(数据段还跑仲裁波特)→ 看节点怎么处理"不合规 FD 帧"
L4:UDS / 诊断 / 应用层
UDS on CAN(ISO 14229):0x7E0/0x7E8 经典配对
ISO-TP(15765-2)分段重组:SF/FF/CF/FC——FD 的 64 Byte 出来后,很多老 TP 逻辑要重验
读 DID / 写 DTC / 刷写流(34/36/37 那套)
三、CAN/CAN FD 测试的四大"重灾区"
重灾①:FD 双波特配错,测了一周等于白测
仲裁段 500k、数据段 2M——测试设备侧 DBF 要独立配,不能是"全局 2M 一把梭"。
很多团队犯的错:CANoe/CANalyzer 配对了,但自研工装只配了全局波特 → FD 节点数据段全红。
重灾②:BusOff 恢复时间测不准
ISO 11898 要求:节点进 BusOff 后,必须"快恢(主动纠错几次)→ 慢恢(128×11 隐性位静默)→ 重发"。
你测试侧如果只是"看到 BusOff 标志"不够,要能量"从最后一错帧到第一帧重发"的微秒级间隔——这就要求测试设备自身抖动够小。
重灾③:多节点 ACK + 负载率耦合
32 个 ECU 挂一条 500k 总线,第 31 个上线后负载飙到 78% → 某节点偶发"发得出去、ACK 收不全"。
这种问题靠"一主一发"的手点测不出来,要"多节点并发+长时间跑+统计重发率"才能抓。
重灾④:UDS 刷写流 + 安全解锁
0x27 Security Access → Key 算错三次 → 会话锁 → 延时恢复。
很多产线工装只测"正常解锁成功",不测"三次错→锁→延时→再试"这条故障链——结果车厂审核被打回。
四、ETest 里 CAN/CAN FD 是怎么落地的(对照白皮书能力)
ETest 「测试资源管理」里明确列了 CAN/CANFD 通道属性(波特率、验收码、屏蔽码等可配),并且和 ICD 管理、通信协议管理、测试序列做了打通——下面把"上面那四层测试"对应到 ETest 的具体能力上。
1)通道与资源配置
支持CAN / CAN FD 通道( ARINC429/1553B/AFDX/FC-AE-ASM 等 50+ 种,CANFD 是标准项)
通道属性配置页:波特率、验收码、屏蔽码——FD 场景下"仲裁波特 / 数据波特"分别配(这点对 FD 双波特是关键)
支持连接器引脚表 Excel 导入 → 多 CAN 节点接线不出错
2)ICD 绑定
ICD 可绑到 CAN/CANFD 通道( TCP/UDP/RSx/ARINC429/1553B/AFDX/1394/FC-AE-ASM 等,CAN 是同体系)
消息帧支持:
周期 / 事件 / 组合帧
大小端、字节序、信号位偏移
物理值↔原始值转换(斜率/偏移/最小值)
激励运行时可调参:选一个或多个帧按周期发,信号值可从 yml 文件读,也可手动改 → 实时调总线负载率、调 DID 值
3)协议字段级——这是 CAN/CAN FD 测试的"灵魂段"
精确到位(bit) 的协议字段定义——CAN 的 ID(11/29bit)、RTR、IDE、FDF、BRS、ESI、DLC、Data、CRC 都能按 bit 拆
CRC 内置 +自定义校验算法 → 注入"CRC 错包"不用改 DUT,测试侧拼
自动组包/解包 → UDS(14229) + ISO-TP(15765-2) 的 SF/FF/CF/FC 可结构化定义
关键字/动态函数(ByteSize、CheckCode)→ 帧长自动算、校验自动填
✅ 这意味着:BusOff / ACK 缺失 / CRC 错 / 填充错误 这些 L3 故障注入,不是靠"拔线"硬造,而是协议字段级拼出来再发出去——复现性 100%。
4)测试序列 + 实时性
测试序列支持串行/并行、执行次数、预约执行、单步/断点
通道数据记录可开关 → BusOff 恢复时间这种"微秒级事件"要开记录
执行器响应时间 ≤1ms,同步抖动 <10μs——对 CAN FD 2M 数据段 + BusOff 恢复计时这种场景够用
实时监控支持表格 + 曲线切换,CAN ID 可按十六进制/十进制看
5)部署形态怎么选
场景 | ETest 部署 | CAN/CAN FD 适用性 |
|---|---|---|
单机电控/ECU 板级体检 | 设计器+执行器同机(桌面) | 非实时够用,产线/调试工装 |
实时 HIL(FD 2M + 模型闭环) | 设计器上位机 + 执行器下位机(Linux-RT/翼辉) | FD 推荐走这档,抖动稳 |
多 ECU 并发(域控+智驾+车身) | 多执行器分布式 | 多 CAN 节点并发 ACK / 负载率 |
五、一个"可抄走"的 CAN FD 测试清单
下面这份可以直接贴进测试方案附录。
【CAN FD 测试核查清单】
L1 基础
[ ] 仲裁段波特 / 数据段波特独立配置(如 500k / 2M)
[ ] 验收码+屏蔽码过滤(只收目标 ECU ID)
[ ] 标准帧 / 扩展帧(29bit)双测
L2 协议一致性
[ ] 数据帧 / 远程帧 / 错误帧监听
[ ] ACK 槽计数(几个节点应答?无 ACK 重发?)
[ ] 负载率曲线(≥70% 预警)
L3 故障注入(字段级)
[ ] CRC 错包(17/21bit 改为错值)
[ ] 填充错误(Bit Stuff 违例)
[ ] BRS 不切(数据段仍跑仲裁波特)
[ ] ACK 屏蔽 → 重发逻辑
[ ] 连续错误 → BusOff → 恢复时间(ms 级计量)
L4 UDS / 应用
[ ] 0x27 Security Access 三次错→锁→延时
[ ] ISO-TP SF/FF/CF/FC 重组(FD 64Byte 场景)
[ ] 刷写流 34/36/37 回归