自研 USB CAN 板:物理收发操作
本文对应 STM32G431 / CANable 2.0 硬件方案、已刷入 b158aa7 SLCAN FD 固件的 USB 板。历史测试结论见FD 5M 实测。
安装和识别
sh
git clone https://github.com/lizi-learn/ymbot-usb-canfd.git
cd ymbot-usb-canfd
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m ymbot_usb_canfd.cli inventory记录本机 inventory 返回的 USB 序列号。硬件命令在 root 下检查端口占用;发现其他进程读取所选端口时会拒绝执行。
接线和测试准备
把两个独立通道接为台架测试总线:CANH ↔ CANH、CANL ↔ CANL、GND ↔ GND,核对终端和供电。不要把未知电源脚对插。
所选接口退出业务使用,测试总线不连接执行器。确认没有电池程序、串口监控等进程抢读接口,再显式指定两个不同的 USB 序列号。
Classic CAN 1M
sh
sudo .venv/bin/python -m ymbot_usb_canfd.cli test \
--tx FIRST_USB_SERIAL --rx SECOND_USB_SERIAL \
--mode classic --length 8 --duration 10 --rate 500 \
--output results/classic1m.jsonCAN FD 1M / 5M
sh
sudo .venv/bin/python -m ymbot_usb_canfd.cli test \
--tx FIRST_USB_SERIAL --rx SECOND_USB_SERIAL \
--mode fd --data-bps 5000000 --length 64 \
--duration 60 --rate 1000 --output results/fd5m.json这是有限时长、指定负载的实际收发测试。--rate 是请求帧率,不保证程序能达到;actual_fps 才是该窗口的实际值。
怎样阅读结果
核对成功发送与对端实收是否一致,同时看缺失、重复、乱序、ID / DLC / 完整载荷错误。保留原始 JSON 和实际耗时,不只保存一个 pass 标记。
固件 E 寄存器不是完整的控制器 TEC / REC 计数。需要更高程度的验收时,应补充完整硬件计数、波形与更长运行窗口。工具结束会关闭测试通道。
遇到端口占用
先定位占用程序及设备选择规则。本次发现 root 电池程序会扫描 ttyACM,TIOCEXCL 也无法阻止 root 抢读。工具不会自动停止机器人服务或修改其访问权限。