SocketCAN
SocketCAN 适合在 Linux 上直接控制 CAN 和 CAN FD 设备。开发板通过 USB 接入后,Linux 会把 4 路 CAN/CAN FD 显示为 4 个 canX 网络接口,可以直接使用 can-utils、python-can 或其他 SocketCAN 软件。
Windows下没有 SocketCAN 网络接口。可以使用 协议模式 收发CAN/FDCAN数据,请阅读:SANPO USB 转 CAN 和 SANPO USB 转 FDCAN。
Windows下调试 CAN 和 CAN FD 设备,可以使用线上调试工具 SANPO Studio,或者离线软件 CANgaroo。
连接和识别设备
将开发板 USB 接到 Linux/Windows 主机。开发板芯片通过USB供电,确保USB电压不低于5V。
将电机接到开发板 CAN 接口,XT60接入电机电源。
Linux下使用方式:
安装工具并加载驱动
sudo apt update
sudo apt install can-utils
sudo modprobe gs_usb
查看接口:
ip link show type can
完整开发板通常显示 4 个 canX。Linux 的编号取决于枚举顺序,不能仅凭 can0~can3 判断对应的板上接口。
首次使用时,建议只连接一个电机,逐个接口发送查询命令确认物理对应关系。也可以查看 USB 设备路径:
readlink -f /sys/class/net/can0/device
udevadm info -q property -p "$(readlink -f /sys/class/net/can0/device)"
长期使用时,可以根据 USB 物理端口或设备序列号编写 udev 规则,为接口设置稳定名称。
配置经典 CAN
将 can0 设置为 1 Mbps:
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
监听总线:
candump can0
发送标准帧:
cansend can0 123#11223344
以上数据仅作为示例,应替换为实际电机协议要求的 ID 和数据。
发送扩展帧:
cansend can0 0000FD01#0102030405060708
以上数据仅作为示例,应替换为实际电机协议要求的 ID 和数据。
cansend 成功时通常没有输出。电机是否回复取决于电机协议、ID 和当前状态。
配置 CAN FD
将 can0 设置为仲裁段 1 Mbps、数据段 可配置 2/3/4/5 Mbps,并启用 CAN FD:
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up
发送开启 BRS 的 CAN FD 标准帧:
cansend can0 123##11122334455667788
以上数据仅作为示例,应替换为实际电机协议要求的 ID 和数据。
发送开启 BRS 的 CAN FD 扩展帧:
cansend can0 0000FD01##11122334455667788
以上数据仅作为示例,应替换为实际电机协议要求的 ID 和数据。
在 ## 后,第一个十六进制数字是 CAN FD 标志;1 表示开启 BRS,后面才是数据。
查看状态
ip -s -details link show can0
CAN FD 正常启用时可以看到 fd on、bitrate 和 dbitrate。如果错误计数持续增加,应停止发送并检查波特率、终端电阻、接线和设备供电。
SocketCAN 设置不会保存到开发板。设备重新上电、重新插拔或重新枚举后,应重新执行 ip link 配置。
小米CyberGear电机 示例
完整示例:Linux SocketCAN CyberGear 使用说明
控制 can0 上 ID 为 1 的电机:
sudo python3 socketcan_cybergear_demo_v8.py \
--setup-links \
--motor-map "can0:1"
多接口示例:
--motor-map "can0:1,2,3;can1:4,5,6"
运行前应根据实际枚举结果和电机接线修改接口名及 ID。
常见问题
现象 |
处理方法 |
|---|---|
找不到 |
执行 |
|
执行对应的 |
|
先执行 |
|
检查总线接线、波特率和终端电阻;排除问题后将接口 down 再重新启用 |
能发送但电机没有回复 |
检查 |