快速开始
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 下通过 |
批量执行 |
支持本地保存并自动执行 CAN、CAN FD、RS485 指令 |
SANPO 通信协议头定义
如下这些协议头用于 USB CDC串口协议和 SPI 固定长度协议。SocketCAN 不使用这些帧头,Linux 上位机直接发送标准 CAN 或 CAN FD 报文。
协议头 |
十六进制 |
含义 |
|---|---|---|
|
|
经典 CAN 标准帧 |
|
|
经典 CAN 扩展帧 |
|
|
CAN FD 标准帧 |
|
|
CAN FD 扩展帧 |
|
|
RS485 RT 封装帧 |
|
|
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 |
|
变长,数据 0~8 字节 |
USB CDC串口转 CAN FD |
|
变长,数据 0~64 字节 |
USB CDC串口转 RS485(SANPO RT 封装帧) |
|
变长,数据 0~64 字节 |
USB CDC串口转 RS485(原始数据透传) |
无固定帧头 |
发送 |
固件上电默认使用非透传的 SANPO RT 封装帧模式。需要临时使用第三方 RS485 上位机时,发送 AT+RS485RAW=1 开启原始数据透传;使用完成后发送 AT+RS485RAW=0 恢复 RT 封装帧模式。该透传开关不作为上电默认配置保存,重新上电后会自动恢复为非透传模式。
SocketCAN 接口
Linux 主机可以通过 gs_usb 驱动把 SANPO 集成开发板识别为 4 个 SocketCAN 网络接口。在主机没有其他 SocketCAN 设备时,通常显示为 can0、can1、can2、can3。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 报文模式 |
总线长度 |
报文区长度 |
支持协议 |
默认 |
|---|---|---|---|---|
|
23 字节 |
22 字节 |
经典 CAN、RS485 |
是 |
|
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。
编码字段值 |
真实数据长度 |
|---|---|
|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
12 |
|
16 |
|
20 |
|
24 |
|
32 |
|
48 |
|
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 |
使用 |
CAN FD 仲裁段 |
使用 |
CAN FD 数据段 |
使用 |
RS485 |
通过 |
出厂默认 CAN/FDCAN 建议值为 AT+SETFDCAN=1000000,5000000。CAN FD 默认开启 BRS,因此仲裁段和数据段可以使用不同波特率。AT+SETFDCAN、AT+SETRS485、AT+SPIMODE、AT+RS485RAWCH 和 AT+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 FD 标准帧、扩展帧 |
|
USB CDC串口协议,SANPO RT 封装帧和可临时开启的 RS485 原始数据透传 |
|
Linux SocketCAN 标准接口,经典 CAN 和 CAN FD |
|
SPI 经典 CAN 短帧/长帧 |
|
SPI CAN FD 长帧 |
|
SPI RS485 短帧/长帧 |
|
本地存储并自动执行 CAN/CAN FD/RS485 指令 |