SocketCAN
SocketCAN 适合在 Linux 电脑、Jetson 或树莓派上直接控制 CAN 和 CAN FD 设备。开发板通过 USB 接入后,Linux 会把 4 路 CAN/CAN FD 显示为 4 个 canX 网络接口,可以直接使用 can-utils、python-can 或其他 SocketCAN 软件。
SocketCAN 不使用 SANPO 的 ST、ET、SF、EF 帧头。RS485 也不通过 SocketCAN 使用。
连接和识别设备
将开发板 USB 接到 Linux 主机。
将电机接到开发板 CAN 接口并正常供电。
安装工具并加载驱动:
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
发送扩展帧:
cansend can0 0000FD01#0102030405060708
cansend 成功时通常没有输出。电机是否回复取决于电机协议、ID 和当前状态。
使用 CAN FD
将 can0 设置为仲裁段 1 Mbps、数据段 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
发送开启 BRS 的 CAN FD 扩展帧:
cansend can0 0000FD01##11122334455667788
在 ## 后,第一个十六进制数字是 CAN FD 标志;1 表示开启 BRS,后面才是数据。
查看状态
ip -s -details link show can0
CAN FD 正常启用时可以看到 fd on、bitrate 和 dbitrate。如果错误计数持续增加,应停止发送并检查波特率、终端电阻、接线和设备供电。
SocketCAN 设置不会保存到开发板。设备重新上电、重新插拔或重新枚举后,应重新执行 ip link 配置。
CyberGear 示例
控制 can0 上 ID 为 1 的电机:
sudo python3 socketcan_cybergear_demo_v6.py \
--setup-links \
--motor-map "can0:1"
多接口示例:
--motor-map "can0:1,2,3;can1:4,5,6"
运行前应根据实际枚举结果和电机接线修改接口名及 ID。
常见问题
现象 |
处理方法 |
|---|---|
找不到 |
确认两颗 MCU 已烧录 V6 固件,执行 |
|
执行对应的 |
|
先执行 |
|
检查总线接线、波特率和终端电阻;排除问题后将接口 down 再重新启用 |
能发送但电机没有回复 |
检查 |