Skip to content

自研 USB CAN 板:CAN FD 5M 收发验证 ​

这次测试对象是采用 CANable 2.0 硬件方案的自研 USB CAN 板,有三颗独立 STM32G431 MCU。它与之前测试的 RK3588 / 5IO 开发板是两块不同的板。

结论:CAN0 ↔ CAN1 在本轮 FD 1M/5M 物理收发中通过完整性检查。CAN2 已刷写并启动,尚未接线,未做物理收发验证。

硬件与软件环境 ​

项目本次条件
接线CAN0 与 CAN1 对接,真实物理总线,未使用内部回环
主控STM32G431 × 3,各通道独立刷写
固件上游 normaldotcom/canable2-fw,固定提交 b158aa7,未修改上游固件
主机接口USB CDC / ttyACM*,非标准 SLCAN FD 协议
位时序配置仲裁 1 Mbit/s,FD 数据 5 Mbit/s,BRS 开启
连续测试负载每帧 64 字节,逐帧核对对端序号、ID、长度和完整载荷

实际收发结果 ​

阶段发送窗口实收帧数实际帧率完整性
CAN0 → CAN110 秒16,6031,660.30 帧/秒缺失、重复、内容错误、乱序均为 0
CAN1 → CAN010 秒16,6151,661.50 帧/秒缺失、重复、内容错误、乱序均为 0
同时双向60 秒每方向 54,929每方向 915.48 帧/秒缺失、重复、内容错误、乱序均为 0

三阶段合计 143,076 帧全部收到。固件 E 错误寄存器均返回 0。

另外完成两组独立检查:

  • Classic 1M、FD 2M / 5M 功能测试共 164 帧,覆盖标准 / 扩展 ID,以及 Classic 0–8 字节和 FD 全部合法长度。
  • 发布版 CLI 再测双向 5 秒、4,565 帧,全部收到;这组数据与上表分别计数。

5M 和实际吞吐有什么区别 ​

这里的 5M 是 FD 数据阶段的配置位速率。单向测试实际有效载荷约 0.85 Mbit/s;USB ASCII 协议、程序调度以及 CAN 帧开销都会影响应用吞吐。

本次没有把总线跑满。最长同时双向窗口为 60 秒,不能据此推断数小时或数天运行的丢包率。完整 TEC / REC 硬件计数及示波器位宽均未取得,E 寄存器不能替代这些测量。

三个通道分别验证到了哪一步 ​

通道原 Flash 备份逐字节读回重启版本查询对端收发
CAN0完成通过通过Classic 1M、FD 2M / 5M 通过
CAN1完成通过通过Classic 1M、FD 2M / 5M 通过
CAN2完成通过通过未接线,未运行

过程中发现的串口抢读 ​

机器上已有 root 电池程序会扫描并抢读 ttyACM*,导致 USB 串口回复被截取。原连续测试临时排除了该进程对所选端口的访问,测试后恢复;发布版工具会检查占用并拒绝运行。

TIOCEXCL 不能阻止 root 进程抢读。后续正式集成应修正电池程序的设备选择,避免把串口被抢读误判为 CAN 物理丢包。

报告与原始记录 ​

下一步可以补测 CAN2 对端收发、总线满载、更长时间运行,以及独立分析仪或示波器测量。