快速开始

SANPO 集成开发板固件 V6版本 基于 STM32G473 系列 MCU,支持 CAN FD / 经典 CAN / RS485。上位机可以通过 USB CDC串口协议、Linux SocketCAN 或 SPI 固定长度协议使用 CAN/CAN FD;RS485 通过 USB CDC串口或 SPI 使用。

出厂固件版本说明:SANPO 集成开发板 FDCAN 升级版基于 STM32G473 平台开发,已预装 V6 固件;标准版、隔离版(CAN) 和隔离版(RS485) 基于 STM32F407 平台开发,仍预装 V4 固件。不同硬件版本对应不同的固件版本,已在使用 V4 固件的用户可以继续按原有方式使用,无需强制升级。

文档适用范围:FDCAN 升级版用户请使用本文档;标准版、隔离版(CAN) 和隔离版(RS485) 用户请回到 V4 版本说明文档

使用前配置波特率

V6 出厂默认通信参数为:经典 CAN / CAN FD 仲裁段 1000000,CAN FD 数据段 5000000,RS485 4000000,1,0,8

使用 USB CDC串口协议或 SPI 协议收发数据前,请先通过 USB CDC串口 AT+ 指令查询或配置波特率,确认固件保存值和实际的 CAN、CAN FD、RS485 设备参数一致。使用串口工具发送 AT+ 指令时,把发送结束符设置为 CRLF

AT+SETFDCAN=<arb_baud>,<data_baud>
AT+SETRS485=<baud>,<stop>,<parity>,<bits>

查询当前固件保存值:

AT+SETFDCAN?
AT+SETRS485?

USB CDC串口协议和 SPI 协议使用固件保存的这组参数;SocketCAN 使用 Linux ip link 单独配置当前运行时波特率。详细说明见 波特率配置

产品能力

能力

说明

CAN FD

支持 USB CDC串口、SocketCAN、SPI 转 CAN FD 标准帧和扩展帧,最大 64 字节数据区

经典 CAN

支持 USB CDC串口、SocketCAN、SPI 转 CAN 标准帧和扩展帧,最大 8 字节数据区

RS485

支持 USB CDC串口/SPI 转 RS485

SocketCAN

单块 SANPO 集成开发板提供 4 路 CAN 接口,Linux 下通过 gs_usb 枚举为 canX 网络接口,通常为 can0can1can2can3

批量执行

支持本地保存并自动执行 CAN、CAN FD、RS485 指令

SANPO 通信协议头定义

如下这些协议头用于 USB CDC串口协议和 SPI 固定长度协议。SocketCAN 不使用这些帧头,Linux 上位机直接发送标准 CAN 或 CAN FD 报文。

协议头

十六进制

含义

ST

0x53 0x54

经典 CAN 标准帧

ET

0x45 0x54

经典 CAN 扩展帧

SF

0x53 0x46

CAN FD 标准帧

EF

0x45 0x46

CAN FD 扩展帧

RT

0x52 0x54

RS485 RT 封装帧

AT

0x41 0x54

AT控制命令

AT+ 控制指令结尾

AT+ 控制指令通常通过串口助手等工具发送。文档中的命令表通常只写命令主体;实际发送时,每条 AT+ 指令都必须以 CRLF 结尾。

使用串口工具时,只输入命令主体,并把发送结束符设置为 CRLF。不要在输入框中手动输入反斜杠 r、反斜杠 n 这几个字符,除非串口工具输入配置为可转义。

例如如下命令示例:

AT+VER
AT+SETFDCAN=1000000,5000000
AT+SPIMODE=LONG

USB CDC串口协议

USB CDC串口使用变长协议,标准 SANPO 报文均以 0x0D 0x0A 结尾。

协议

帧头

长度

USB CDC串口转经典 CAN

ST / ET

变长,数据 0~8 字节

USB CDC串口转 CAN FD

SF / EF

变长,数据 0~64 字节

USB CDC串口转 RS485(SANPO RT 封装帧)

RT

变长,数据 0~64 字节

USB CDC串口转 RS485(原始数据透传)

无固定帧头

发送 AT+RS485RAW=1 后临时启用,用于兼容第三方 RS485 上位机,例如宇树原厂上位机

固件上电默认使用非透传的 SANPO RT 封装帧模式。需要临时使用第三方 RS485 上位机时,发送 AT+RS485RAW=1 开启原始数据透传;使用完成后发送 AT+RS485RAW=0 恢复 RT 封装帧模式。该透传开关不作为上电默认配置保存,重新上电后会自动恢复为非透传模式。

SocketCAN 接口

Linux 主机可以通过 gs_usb 驱动把 SANPO 集成开发板识别为 4 个 SocketCAN 网络接口。在主机没有其他 SocketCAN 设备时,通常显示为 can0can1can2can3。SocketCAN 使用 Linux 标准 CAN API,不需要构造 SANPO 自定义帧。

常用命令如下:

sudo modprobe gs_usb
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
cansend can0 123#11223344
candump can0

CAN FD 使用 ip link 开启 fd on 并设置数据段波特率:

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

一块 SANPO 集成开发板上的 4 路 CAN 会分别显示为 4 个 canX 接口,但 Linux 分配的 canX 编号不保证和板上 CAN1~CAN4 的物理顺序固定一致。实际使用前应确认 canX 和物理 CAN 总线的对应关系,详见 SocketCAN / gs_usb

SPI 协议

SPI 使用固定长度全双工协议。总线长度包含最后 1 字节 SPI CRC;报文区不包含 CRC。

SPI 报文模式

总线长度

报文区长度

支持协议

默认

SHORT

23 字节

22 字节

经典 CAN、RS485

LONG

73 字节

72 字节

经典 CAN、CAN FD、RS485

SHORT 模式用于兼容和低开销通信;LONG 模式用于 CAN FD 和更长 RS485 数据。固件出厂默认 SHORT 模式,可以使用 AT+ 指令切换,切换后,下次上电默认使用上次切换后的模式。

SPI 报文模式通过 USB CDC串口 AT+ 指令切换。使用串口工具时,只输入以下命令主体,并把发送结束符设置为 CRLF

AT+SPIMODE?
AT+SPIMODE=SHORT
AT+SPIMODE=LONG

收到 OK 后,SPI 主机应停止当前 SPI 交易,等待至少 10 ms,再按新模式长度发起通信。

数据长度字段

经典 CAN / CAN FD 的数据长度字段是“数据长度编码”,不是直接字节数。
经典 CAN 的数据长度字段范围 0x00~0x08。 CAN FD 的数据长度字段范围是0x00~0x0F

编码字段值

真实数据长度

0x00

0

0x01

1

0x02

2

0x03

3

0x04

4

0x05

5

0x06

6

0x07

7

0x08

8

0x09

12

0x0A

16

0x0B

20

0x0C

24

0x0D

32

0x0E

48

0x0F

64

波特率策略

USB CDC串口协议和 SPI 协议使用固件保存的 CAN/FDCAN 参数。该参数通过 USB CDC串口 AT+ 指令配置。使用串口工具时,只输入命令主体,并把发送结束符设置为 CRLF

AT+SETFDCAN=<arb_baud>,<data_baud>

查询当前固件保存的通信参数:

AT+SETFDCAN?
AT+SETRS485?

返回格式分别为 FDCAN:<arb_baud>,<data_baud>RS485:<baud>,<stop>,<parity>,<bits>

总线

默认策略

经典 CAN

使用 arb_baud,例如 1000000 / 500000 / 250000 / 125000 / 100000

CAN FD 仲裁段

使用 arb_baud

CAN FD 数据段

使用 data_baud,当前支持 20000005000000

RS485

通过 AT+SETRS485=<baud>,<stop>,<parity>,<bits> 配置

出厂默认 CAN/FDCAN 建议值为 AT+SETFDCAN=1000000,5000000。CAN FD 默认开启 BRS,因此仲裁段和数据段可以使用不同波特率。AT+SETFDCANAT+SETRS485AT+SPIMODEAT+RS485RAWCHAT+BATAUTOSET/BATAUTOCLR 的配置会写入固件持久化存储,下次上电继续使用,无需重新配置。AT+RS485RAW 只控制当前运行时是否开启 RS485 原始数据透传,重新上电后自动恢复为非透传模式。

SocketCAN 使用 Linux ip link set canX type can ... 配置当前运行时波特率。该配置不会写入固件存储,设备重新上电或重新枚举后,SocketCAN 上位机应重新执行 ip link 配置。

USB CDC串口/SPI 和 SocketCAN 共用同一组物理 FDCAN 控制器。同一条 CAN 总线如果同时被多种入口配置,最后一次配置会决定当前实际 CAN 时序。正式控制时,建议同一条 CAN 总线只选择一种入口发送控制帧。

如需恢复出厂通信配置,或多次修改配置后返回 ERR,5 表示配置区空间不足,可以发送:

AT+CFGERASE

该命令只擦除通信配置区,不擦除批量指令数据。执行成功后立即恢复默认值:CAN/FDCAN 为 1000000/5000000,SPI 为 SHORT,RS485 为 4000000,1,0,8

USB CDC串口连接时设置的波特率,只作为虚拟串口的连接配置,不会同步修改 CAN/FDCAN/RS485 的波特率(请注意:配置策略与V4版本的固件不同)。

兼容性

  • 兼容小米 CyberGear 原厂上位机(CAN扩展帧通信)。

  • 发送 AT+RS485RAW=1 后,兼容宇树等第三方 RS485 上位机(RS485 原始数据透传)。

  • Linux 主机可以通过 SocketCAN 标准接口直接使用 canX,不需要使用 SANPO 定义 CAN 帧头。

  • SPI 协议不再支持无帧头 RS485;SPI 转 RS485 统一使用 SANPO RT 封装帧。

文档入口

文档

功能

波特率配置

CAN/FDCAN、RS485 和 SocketCAN 波特率配置

USB CDC串口转 CAN

USB CDC串口协议,经典 CAN 标准帧、扩展帧

USB CDC串口转 FDCAN

USB CDC串口协议,CAN FD 标准帧、扩展帧

USB CDC串口转 RS485

USB CDC串口协议,SANPO RT 封装帧和可临时开启的 RS485 原始数据透传

SocketCAN / gs_usb

Linux SocketCAN 标准接口,经典 CAN 和 CAN FD

SPI 转 CAN

SPI 经典 CAN 短帧/长帧

SPI 转 FDCAN

SPI CAN FD 长帧

SPI 转 RS485

SPI RS485 短帧/长帧

批量离线执行

本地存储并自动执行 CAN/CAN FD/RS485 指令