SANPO USB 转 CAN
SANPO USB 转 CAN 适合在 Windows 或 Linux 上使用串口程序控制经典 CAN 设备。上位机在 CAN ID 和数据外加入接口编号,开发板会完成 USB 串口与 CAN 总线之间的转换。
CAN FD 请使用 SANPO USB 转 FDCAN。Linux 上如果希望直接使用 canX、cansend、candump 或 python-can,请使用 SocketCAN。
连接和准备
完整开发板通常会出现两个 USB 串口。其中一个访问 CAN-1/2,另一个访问 CAN-3/4。操作系统分配的 COM 或 /dev/ttyACM* 编号不保证与板上丝印顺序一致,首次使用时建议只连接一个 CAN 设备确认对应关系。
打开对应的 USB 串口。
使用
AT+SETFDCAN?查询当前 CAN 参数。如果与设备不一致,按 通信参数配置修改;经典 CAN 使用第一个波特率参数。
使用十六进制或二进制方式发送本页定义的完整报文。
USB 是虚拟串口,串口软件里选择的波特率不会改变 CAN 总线速度。
如果其他旧版软件曾切换过 USB CAN 格式,可以按文本发送 AT+ET 并使用 CRLF 结尾;收到 OK 后恢复本页格式。正常上电后通常不需要执行该命令。
选择 CAN 接口
当前 USB 串口 |
Channel |
发送目标 |
|---|---|---|
对应 CAN-1/2 |
|
CAN-1 |
对应 CAN-1/2 |
|
CAN-2 |
对应 CAN-3/4 |
|
CAN-3 |
对应 CAN-3/4 |
|
CAN-4 |
任意一个 USB 串口 |
|
当前 MCU 的两路 CAN |
固件内部按本地两路选择接口,因此 1/3 都表示当前 MCU 的第一路,2/4 都表示第二路。建议按上表填写,便于与整板丝印一致。
回包 Channel 使用本地编号:第一路返回 0x01,第二路返回 0x02。例如 CAN-3 的反馈会在第二个 USB 串口中显示为 Channel 1。
CAN 扩展帧
发送和接收使用相同格式:
字段 |
长度 |
说明 |
|---|---|---|
帧头 |
2 字节 |
固定 |
Channel |
1 字节 |
CAN 接口编号 |
CAN ID |
4 字节 |
29 位扩展帧 ID,高字节在前 |
数据长度 |
1 字节 |
|
CAN 数据 |
0~8 字节 |
长度必须与前一字段一致 |
帧尾 |
2 字节 |
固定 |
向 Channel 1、扩展帧 ID 0x0000FD01 发送 8 字节数据:
45 54 01 00 00 FD 01 08 01 02 03 04 05 06 07 08 0D 0A
CAN 标准帧
发送和接收使用相同格式:
字段 |
长度 |
说明 |
|---|---|---|
帧头 |
2 字节 |
固定 |
Channel |
1 字节 |
CAN 接口编号 |
保留字段 |
2 字节 |
固定 |
CAN ID |
2 字节 |
11 位标准帧 ID,高字节在前 |
数据长度 |
1 字节 |
|
CAN 数据 |
0~8 字节 |
长度必须与前一字段一致 |
帧尾 |
2 字节 |
固定 |
向 Channel 2、标准帧 ID 0x142 发送 4 字节数据:
53 54 02 00 00 01 42 04 11 22 33 44 0D 0A
CyberGear 示例
Windows 示例:
python usb2can_cybergear_demo_v6.py --port COM8 --motors 1 --channel 1
Linux 示例:
sudo python3 usb2can_cybergear_demo_v6.py --port /dev/ttyACM0 --motors 1 --channel 1
请根据实际串口、接口和电机 ID 修改参数。
常见问题
现象 |
处理方法 |
|---|---|
找不到 USB 串口 |
检查 USB 线、驱动、控制部分供电,并重新插拔开发板 |
发送后没有回复 |
检查 USB 串口对应关系、Channel、CAN ID、波特率、终端电阻、接线和设备供电 |
报文被发到两路 CAN |
Channel 为 |
回包 Channel 与板上 3/4 不一致 |
回包使用当前 MCU 的本地 |
回包格式与本页不同 |
按文本发送 |