SANPO USB 转 FDCAN

SANPO USB 转 FDCAN 用于通过 USB 串口收发 CAN FD 标准帧和扩展帧,单帧数据最多 64 字节。固件发送 CAN FD 时固定开启 BRS。

经典 CAN 请使用 SANPO USB 转 CAN。Linux 上如果希望使用标准 canX 接口,请使用 SocketCAN

连接和准备

  1. 打开目标 MCU 对应的 USB 串口。

  2. 发送 AT+SETFDCAN?,确认仲裁段和数据段波特率与总线一致。

  3. 需要修改时发送 AT+SETFDCAN=<仲裁段>,<数据段>,并以 CRLF 结尾。

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

出厂默认值为仲裁段 1 Mbps、数据段 5 Mbps。支持的具体数值见 通信参数配置

选择 CAN FD 接口

当前 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 FD

发送时 1/3 都选择当前 MCU 的第一路,2/4 都选择第二路。回包只使用本地 Channel 1/2

数据长度编码

CAN FD 的长度字段不是任意字节数,只能使用以下编码:

编码

数据字节数

编码

数据字节数

00

0

08

8

01

1

09

12

02

2

0A

16

03

3

0B

20

04

4

0C

24

05

5

0D

32

06

6

0E

48

07

7

0F

64

数据区的实际字节数必须与编码一致。

CAN FD 扩展帧

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

字段

长度

说明

帧头

2 字节

固定 45 46,即 EF

Channel

1 字节

CAN FD 接口编号

CAN ID

4 字节

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

长度编码

1 字节

000F

数据

0~64 字节

字节数由长度编码决定

帧尾

2 字节

固定 0D 0A

向 Channel 1、扩展帧 ID 0x1F100101 发送 16 字节数据:

45 46 01 1F 10 01 01 0A
01 01 01 01 42 00 00 00 01 01 64 00 78 56 34 12
0D 0A

其中 0A 表示数据区为 16 字节。

CAN FD 标准帧

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

字段

长度

说明

帧头

2 字节

固定 53 46,即 SF

Channel

1 字节

CAN FD 接口编号

保留字段

2 字节

固定 00 00

CAN ID

2 字节

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

长度编码

1 字节

000F

数据

0~64 字节

字节数由长度编码决定

帧尾

2 字节

固定 0D 0A

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

53 46 02 00 00 01 42 09
01 02 03 04 05 06 07 08 09 0A 0B 0C
0D 0A

回包识别

电机反馈会使用同一种 SFEF 格式返回。根据帧头判断标准帧或扩展帧,根据长度编码确定数据字节数,再使用 Channel 判断来自当前 MCU 的第一路还是第二路。

USB 是字节流,一次串口读取可能包含半帧、完整一帧或多帧。上位机应按帧头和长度编码拆包,不要假设一次 read() 恰好得到一帧。

常见问题

现象

处理方法

经典 CAN 设备没有响应

经典 CAN 应使用 ST/ET,不要使用 SF/EF

CAN FD 没有响应

检查仲裁段、数据段、BRS、终端电阻和对端是否支持 CAN FD

发送长度不合法

只能使用 0~8、12、16、20、24、32、48、64 字节

回包 Channel 只显示 1/2

回包使用当前 MCU 的本地编号,属于正常行为

多帧数据连在一起

按帧头、长度编码和帧尾连续解析,不要按串口读取次数分帧