通过 SPI 接口使用 AT 命令
概述
在 主控控制模式 下,为满足高性能和高吞吐量需求,可以使用 SPI 外设接口进行数据传输。
主控设备作为 SPI Master,AT 设备作为 SPI Slave,双方通过 SPI 协议和特定通信格式进行 AT 命令交互。
请参考 主控控制模式配置 设置 SPI 接口。
引脚说明
SPI 接口需要 7 个引脚,分别是:
四个 SPI 通信引脚:MOSI、MISO、CLK、CS
两个 GPIO 同步信号引脚
GND 接地引脚
SPI 的传输均由 Master 发起,Slave 无法主动传输数据。同时,Master 发起传输的时候,需要确保 Slave 做好接收准备,否则可能丢失数据。
两个同步 GPIO 引脚即是用来解决上述问题的,其作用描述如下:
master_sync_pin
: 用于主控在发送数据之前,通过拉低该引脚通知 AT 设备开始准备接收。slave_sync_pin
: 用于 AT 设备在已经准备好接收数据或者有 AT 消息需要主动发送给主控时,拉低该引脚,通知主控可以进行数据收发。
请参考 AT 配置修改 配置对应引脚。
主控参考示例
代码仓库:https://github.com/Ameba-AIoT/ameba-rtos/tree/master/component/example/atcmd_host/atcmd_spi_master
其中, example_atcmd_spi_master.c
演示了 SPI 主机如何与从机进行通信的。建议在正式开发前运行此代码示例,以验证连接和配置的正确性。之后,参考代码示例将其适配到特定 MCU 平台应用程序中。
在示例代码中,添加了一个 UART 任务用来接收 AT 命令并打印 AT 响应。整体数据流如下图所示:
备注
为了更好的性能优化,每次主控端和 AT 设备的数据交互,发送和接收的 SPI 数据长度都是固定的(16384 字节),超出有效数据的部分会被忽略。
通信格式
通过 SPI AT 命令传输数据,需遵循以下格式规范:
Magic Number(2 字节) |
Data Len(2 字节) |
Data(Data Len 字节) |
Checksum(4 字节) |
字段说明:
- Magic Number:
ASCII 码字符
AT
- Data Len:
数据长度,以字节为单位
- Checksum:
全帧数据 CRC32 校验值
交互流程
SPI AT 命令交互主要包含两个过程:
主机发送 AT 命令
从机返回 AT 响应
主机发送 AT 命令
主机拉低
master_sync_pin
引脚向从机发起数据传输请求从机通过 GPIO 中断接收到主机的请求,准备就绪后拉高
slave_sync_pin
引脚通知主机可以传输数据主机启动 SPI 数据传输,传输完成后,双方复位同步引脚
从机返回 AT 响应
从机通过拉高
slave_sync_pin
引脚通知主机已准备好发送 AT 命令响应数据主机启动 SPI 数据接收,传输完成后,从机复位同步引脚
交互时序
SPI AT 命令交互时序如下图所示:

通信速率
SPI 链路速率测试,请参考 AT+TEST 命令。
备注
当 SPI 的时钟频率较高时,可以通过扩大每笔数据包的固定长度,提高全链路吞吐量。