SANPO SPI 转 FDCAN

SANPO SPI 转 FDCAN 用于通过 Jetson、树莓派或其他主控板收发 CAN FD 标准帧和扩展帧。CAN FD 只能在 SPI LONG 模式下使用,每次传输固定 73 字节。

使用前切换 LONG

出厂默认 SPI SHORT,不能收发 CAN FD。先通过 USB 串口按文本发送:

AT+SPIMODE=LONG

发送结束符选择 CRLF。收到 OK 后等待至少 10 ms,再开始发送 73 字节 SPI 帧。设置会保存到 Flash,重新上电后仍为 LONG;执行 AT+CFGERASE 后会恢复 SHORT。

同时使用以下命令确认 CAN FD 波特率:

AT+SETFDCAN?

出厂默认为仲裁段 1 Mbps、数据段 5 Mbps,CAN FD 固定开启 BRS。数据段可设置为 2、3、4 或 5 Mbps,具体命令见 通信参数配置

SPI 参数

项目

设置

SPI 模式

Mode 0(CPOL=0、CPHA=0)

数据顺序

MSB First

每次传输

72 字节报文区 + 1 字节 CRC,共 73 字节

CRC-8

多项式 0x07,初始值 0x00,无结果异或

选择 CAN FD 接口

SPI 片选

Channel

发送目标

第一颗 MCU

0x01

CAN-1

第一颗 MCU

0x02

CAN-2

第二颗 MCU

0x03

CAN-3

第二颗 MCU

0x04

CAN-4

任意片选

0x00

当前 MCU 的两路 CAN FD

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

数据长度编码

编码

字节数

编码

字节数

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

73 字节报文

扩展帧

字节位置

内容

0~1

固定 45 46,即 EF

2

Channel

3~6

29 位 CAN ID,高字节在前

7

数据长度编码 000F

8~71

固定 64 字节数据区,未使用部分填 00

72

前 72 字节的 CRC-8

标准帧

字节位置

内容

0~1

固定 53 46,即 SF

2

Channel

3~4

固定 00 00

5~6

11 位 CAN ID,高字节在前

7

数据长度编码 000F

8~71

固定 64 字节数据区,未使用部分填 00

72

前 72 字节的 CRC-8

例如,向 Channel 1、扩展帧 ID 0x1F100101 发送 16 字节数据时,前 24 字节为:

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

随后补 48 个 00,最后增加对前 72 字节计算得到的 CRC-8。

CRC 算法与 SANPO SPI 转 CAN相同。

读取 CAN FD 反馈

SPI 为全双工。发送命令时读到的可能是旧反馈或全零;需要继续发送 73 字节全零空帧读取后续反馈。

收到非零帧后依次检查:

  1. 第 73 字节 CRC 是否等于前 72 字节的计算结果。

  2. 帧头是否为 SFEF

  3. Channel 是否为本地 1/2

  4. 长度编码是否合法。

  5. CAN ID 和数据是否符合目标设备协议。

常见问题

现象

处理方法

收到全 00

当前没有排队反馈;稍后继续发送 73 字节空帧

23 字节模式下无响应

CAN FD 只能使用 LONG;切换后每次发送 73 字节

CRC 错误

检查 Mode 0、MSB First、固定长度、SPI 时钟和片选时序

CAN FD 设备没有回复

检查仲裁段、数据段、BRS、Channel、ID、终端电阻、接线和供电

长度编码正确但数据不足

64 字节数据区必须完整填充,未使用部分补 00