SANPO USB 转 CAN

SANPO USB 转 CAN 适合在 Windows 或 Linux 上使用串口程序控制经典 CAN 设备。上位机在 CAN ID 和数据外加入接口编号,开发板会完成 USB 串口与 CAN 总线之间的转换。

CAN FD 请使用 SANPO USB 转 FDCAN。Linux 上如果希望直接使用 canXcansendcandumppython-can,请使用 SocketCAN

连接和准备

完整开发板通常会出现两个 USB 串口。其中一个访问 CAN-1/2,另一个访问 CAN-3/4。操作系统分配的 COM/dev/ttyACM* 编号不保证与板上丝印顺序一致,首次使用时建议只连接一个 CAN 设备确认对应关系。

  1. 打开对应的 USB 串口。

  2. 使用 AT+SETFDCAN? 查询当前 CAN 参数。

  3. 如果与设备不一致,按 通信参数配置修改;经典 CAN 使用第一个波特率参数。

  4. 使用十六进制或二进制方式发送本页定义的完整报文。

USB 是虚拟串口,串口软件里选择的波特率不会改变 CAN 总线速度。

如果其他旧版软件曾切换过 USB CAN 格式,可以按文本发送 AT+ET 并使用 CRLF 结尾;收到 OK 后恢复本页格式。正常上电后通常不需要执行该命令。

选择 CAN 接口

当前 USB 串口

Channel

发送目标

对应 CAN-1/2

0x01

CAN-1

对应 CAN-1/2

0x02

CAN-2

对应 CAN-3/4

0x03

CAN-3

对应 CAN-3/4

0x04

CAN-4

任意一个 USB 串口

0x00

当前 MCU 的两路 CAN

固件内部按本地两路选择接口,因此 1/3 都表示当前 MCU 的第一路,2/4 都表示第二路。建议按上表填写,便于与整板丝印一致。

回包 Channel 使用本地编号:第一路返回 0x01,第二路返回 0x02。例如 CAN-3 的反馈会在第二个 USB 串口中显示为 Channel 1。

CAN 扩展帧

发送和接收使用相同格式:

字段

长度

说明

帧头

2 字节

固定 45 54,即 ET

Channel

1 字节

CAN 接口编号

CAN ID

4 字节

29 位扩展帧 ID,高字节在前

数据长度

1 字节

08

CAN 数据

0~8 字节

长度必须与前一字段一致

帧尾

2 字节

固定 0D 0A

向 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 字节

固定 53 54,即 ST

Channel

1 字节

CAN 接口编号

保留字段

2 字节

固定 00 00

CAN ID

2 字节

11 位标准帧 ID,高字节在前

数据长度

1 字节

08

CAN 数据

0~8 字节

长度必须与前一字段一致

帧尾

2 字节

固定 0D 0A

向 Channel 2、标准帧 ID 0x142 发送 4 字节数据:

53 54 02 00 00 01 42 04 11 22 33 44 0D 0A

CyberGear 示例

示例程序:USB 转 CAN 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 为 0x00;改为具体通道

回包 Channel 与板上 3/4 不一致

回包使用当前 MCU 的本地 1/2,属于正常行为

回包格式与本页不同

按文本发送 AT+ET,收到 OK 后重试