通过SPI接口使用AT命令
概述
在 主控控制模式 下,如果有高性能和高吞吐的需求,可以使用SPI外设接口进行数据传输。
主控设备作为SPI Master,AT设备作为SPI Slave。双方通过SPI协议和特定通信格式进行AT命令数据交换。
请参考 主控控制模式配置 设置SPI外设接口。
管脚说明
SPI外设接口需要7个管脚,分别是包括SPI的MOSI、MISO、CLK、CS 4个管脚及2个同步GPIO管脚脚还有GND接地管脚。
SPI的传输均由 master 发起,slave无法主动传输数据,同时master发起传输的时候,需要确保slave已经调用好接收API,做好相关接收准备,否则将可能有数据丢失的情况。
两个同步GPIO管脚即是用来解决上述情况,分别是master_sync_pin和slave_sync_pin,其作用描述如下:
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
代码示例位于: {SDK}component/example/atcmd_host/spi_master/example_spi_master.c
,演示了SPI主机与从机如何进行通信的。
建议在正式开发前运行此代码示例,以验证连接和配置的正确性。此后,参考代码示例将其适配到特定 MCU 平台应用程序中。
在示例代码中,我们添加了一个 UART 任务来接收 AT命令并打印 AT 响应。整体数据流图如下所示:
备注
为了更好的性能优化,每次主控端和AT模组端的数据交互,发送和接收的SPI数据长度都是固定 16384 Bytes,超出有效数据的部分会被忽略。
通信格式
通过SPI AT命令传输数据,需遵循以下格式规范:
Magic Number(2 bytes) |
Data Len(2 bytes) |
Data(Data Len bytes) |
Checksum(4 bytes) |
各字段说明:
- Magic Number:
ASCII码字符
AT
- Data Len:
数据长度,以字节为单位
- Checksum:
全帧数据CRC32校验值
交互流程
SPI AT命令交互主要包含两个过程:
主机发送AT命令:
主机拉低
MASTER SYNC
引脚向从机发起数据传输请求从机通过GPIO中断接收到主机的请求,准备就绪后拉高
SLAVE SYNC
引脚通知主机可以传输数据主机启动SPI数据传输,传输完成后,双方复位同步引脚
从机返回AT响应:
从机通过拉高
SLAVE SYNC
引脚通知主机已准备好发送AT命令响应数据主机启动SPI数据接收,传输完成后,从机复位同步引脚
SPI AT命令交互时序图:

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