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 |
多项式 |
选择 CAN FD 接口
SPI 片选 |
Channel |
发送目标 |
|---|---|---|
第一颗 MCU |
|
CAN-1 |
第一颗 MCU |
|
CAN-2 |
第二颗 MCU |
|
CAN-3 |
第二颗 MCU |
|
CAN-4 |
任意片选 |
|
当前 MCU 的两路 CAN FD |
发送时 1/3 都选择当前 MCU 的第一路,2/4 都选择第二路。回包只使用本地 Channel 1/2。
数据长度编码
编码 |
字节数 |
编码 |
字节数 |
|---|---|---|---|
|
0 |
|
8 |
|
1 |
|
12 |
|
2 |
|
16 |
|
3 |
|
20 |
|
4 |
|
24 |
|
5 |
|
32 |
|
6 |
|
48 |
|
7 |
|
64 |
73 字节报文
扩展帧
字节位置 |
内容 |
|---|---|
0~1 |
固定 |
2 |
Channel |
3~6 |
29 位 CAN ID,高字节在前 |
7 |
数据长度编码 |
8~71 |
固定 64 字节数据区,未使用部分填 |
72 |
前 72 字节的 CRC-8 |
标准帧
字节位置 |
内容 |
|---|---|
0~1 |
固定 |
2 |
Channel |
3~4 |
固定 |
5~6 |
11 位 CAN ID,高字节在前 |
7 |
数据长度编码 |
8~71 |
固定 64 字节数据区,未使用部分填 |
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 字节全零空帧读取后续反馈。
收到非零帧后依次检查:
第 73 字节 CRC 是否等于前 72 字节的计算结果。
帧头是否为
SF或EF。Channel 是否为本地
1/2。长度编码是否合法。
CAN ID 和数据是否符合目标设备协议。
常见问题
现象 |
处理方法 |
|---|---|
收到全 |
当前没有排队反馈;稍后继续发送 73 字节空帧 |
23 字节模式下无响应 |
CAN FD 只能使用 LONG;切换后每次发送 73 字节 |
CRC 错误 |
检查 Mode 0、MSB First、固定长度、SPI 时钟和片选时序 |
CAN FD 设备没有回复 |
检查仲裁段、数据段、BRS、Channel、ID、终端电阻、接线和供电 |
长度编码正确但数据不足 |
64 字节数据区必须完整填充,未使用部分补 |