GS USB 配置与首次收发
本教程介绍 GS USB 固件 在 Windows 上的 EcuBus-Pro 配置,以及在 Linux 上的 SocketCAN 命令。
接线与首次测试
先确认设备已经运行适用的 GS USB 固件,再进行软件配置。首次测试使用两路 CAN:CAN_H 对接 CAN_H、CAN_L 对接 CAN_L,参考地和接口针脚按硬件手册连接;总线两端各配置一个 120 Ω 终端,不重复叠加外置与内置终端。
两个通道均需处于正常收发模式,波特率一致。CAN FD 测试还需一致的数据波特率,发送时启用 BRS。监听模式的对端不提供 ACK,不能用作本例唯一的接收节点。
本文示例参数为经典 CAN 500 kbit/s,CAN FD 500 kbit/s 仲裁 / 2 Mbit/s 数据。先发一帧核对 ID 和载荷,再进行连续收发。
Windows:EcuBus-Pro
1. Windows 设备识别
安装 EcuBus-Pro 并接入设备。在 Windows 设备管理器中查找 CANmeleon GS USB CAN1,确认 WinUSB 接口无错误标记。驱动程序提供商字段可能显示 Microchip Technology, Inc.
在 EcuBus-Pro 中选择 GS_USB(CANDLE) 后端,扫描并核对可见通道。遇到识别问题时,先记录设备状态和驱动信息,避免对其他 USB 设备批量替换驱动。
2. 配置通道并发送一帧
- 在 EcuBus-Pro 的设备配置中选择 GS_USB(CANDLE) 类型,绑定实际检测到的通道。
- 为已接线的发送端和接收端设置相同参数。经典 CAN 使用 500 kbit/s;CAN FD 开启 FD 并设置 500 kbit/s / 2 Mbit/s。
- 在交互发送功能中选择发送通道,添加标准 ID
0x123、8 字节载荷11 22 33 44 55 66 77 88。进行 FD 测试时选择 FD 帧并启用 BRS。 - 单次发送,在接收通道检查相同 ID 和载荷;交换收发通道再测一次。发送日志或本地 echo 不等于对端实际收到报文。
界面细节请以 EcuBus-Pro CAN 操作说明为准。
Linux:SocketCAN
1. 准备工具并检查接口
使用支持所需通道数的内核 gs_usb 驱动。使用四通道设备时,请确认驱动能识别四路接口。
sudo apt update
sudo apt install can-utils iproute2 ethtool usbutils
uname -r
lsusb
sudo modprobe gs_usb
ip -br link show type can接口可能是 can0 至 can3,已有其他 CAN 设备时编号可能不同。用下面的命令核对所选接口驱动;示例要求返回路径末尾为 /gs_usb:
readlink -f /sys/class/net/can0/device/driver
readlink -f /sys/class/net/can1/device/driver
sudo ethtool -p can0 2最后一条命令让对应通道定位闪烁 2 秒,结束后恢复当前灯语。先确认物理通道与接口的对应关系。下文以已接线的 can0 和 can1 为例,其他命名请统一替换。
2. 经典 CAN 单帧收发
先配置两个接口;切换参数前将接口置为 DOWN:
sudo ip link set can0 down
sudo ip link set can1 down
sudo ip link set can0 type can bitrate 500000 fd off
sudo ip link set can1 type can bitrate 500000 fd off
sudo ip link set can0 up
sudo ip link set can1 up
ip -details -statistics link show can0终端 A 接收:
candump can1终端 B 发送:
cansend can0 123#1122334455667788终端 A 应在 can1 上看到 ID 123、长度 8 和相同载荷。只在 can0 上看到本地回显不能证明接线或对端接收正常。
3. CAN FD 单帧收发
先在终端 A 按 Ctrl+C 停止接收,再重新配置两路为 500 kbit/s / 2 Mbit/s:
sudo ip link set can0 down
sudo ip link set can1 down
sudo ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on
sudo ip link set can1 type can bitrate 500000 dbitrate 2000000 fd on
sudo ip link set can0 up
sudo ip link set can1 up在终端 A 重新运行 candump can1,然后在终端 B 发送:
cansend can0 123##11122334455667788## 表示 CAN FD,紧接的第一个 1 是 BRS 标志,后面的 1122334455667788 才是 8 字节载荷。检查 can1 收到对应报文;反向测试时在一个终端运行 candump can0,另一个终端执行:
cansend can1 321##188776655443322114. 软件终端电阻与退出
有软件终端电阻的适用硬件,可在接口 DOWN 时设置并读回状态:
sudo ip link set can0 down
sudo ip link set can0 type can termination 120
ip -details link show can0
# 关闭内置终端时使用:
sudo ip link set can0 type can termination 0按实际接线选择 120 或 0 Ω,不要在已使用外部终端时额外开启。该设置用于当前运行配置,不将读回值等同于电气阻值测量,也不依赖其掉电保存。修改后如需继续收发,重新执行 sudo ip link set can0 up。
测试结束,在接收终端按 Ctrl+C,并关闭本次使用的接口:
sudo ip link set can0 down
sudo ip link set can1 down常见问题
| 现象 | 检查方向 |
|---|---|
| USB 可见,但没有 CAN 网络接口 | 核对当前固件、内核版本、gs_usb 模块及 dmesg 中的枚举信息 |
| 四路没有全部出现 | 核对驱动的多通道支持,并检查是否被其他 USB 软件或虚拟机占用 |
| 有发送记录但对端收不到 | 核对物理通道、CAN_H/CAN_L、终端、双方时序和正常收发模式 |
| 发送报错或 bus-off | 先停止发送;检查 ACK、接线和时序,修正后将接口 DOWN/UP 再测试 |
虚拟机 USB 直通时,同一设备只交给一个系统使用。Linux SocketCAN 使用期间不要让其他用户态 USB 后端同时接管设备。
反馈时请提供硬件型号、固件、操作系统/内核、驱动、软件版本和接线方式:SysMax CANmeleon 问题反馈。