X210S WiFi 模块的 SPI Slave 接口是使用模块内部的 SDIO 接口的 SPI 传输 模式实现,能够有效的与外围芯片 SPI Master 接口通信,其应用十分广泛。模 块还提供了读 write、read、trans 等 GPIO 信号脚,用于通知 SPI Master 可以 进行数据读写。SPI Master 与模块通信是以数据块的方式进行传输,SPI Master 时钟在 20Mbps 时,SPI 到 WiFi 终端的有效数据传输速率可以达到 4Mbps。本 手册提供了 SPI Slave 接口的描述,和基于 STM32F103C8T6 主芯片的模块
SPI Slave 接口驱动参考代码,实现了基本的数据读写功能,关于模块的其他信 息请参阅 X210s 模块用户手册。
接口定义
引脚序号 | 名称 | 说明 |
| |
1 | VCC33 | 3.3v | 供电 | |
|
|
|
| |
2 | P4 |
| GPIO P4,不用请悬空 | |
|
|
|
|
|
3 | GND |
| 接地 |
|
|
|
| ||
4 | P3/SPIS_WR | SPI Slave Writeable 信号输出 | ||
|
|
|
| |
5 | P1 | / LED STATUS | GPIO P1,缺省为模块 LED 状态指示灯 | |
|
|
|
| |
6 | P2 | / RESET | GPIO P2,缺省为恢复出厂设置,低电平有效 | |
|
|
|
| |
7 | RXD |
| UART 接口,可复用为 GPIO 口 | |
|
|
|
| |
8 | TXD |
| UART 接口,可复用为 GPIO 口 | |
|
|
| ||
9 | P5/SPIS_RD | SPI Slave Readable 信号输出 | ||
|
|
| ||
10 | P6/SPIS_TD | SPI Slave transmit done 信号输出 | ||
|
|
|
| |
11 | P7 |
| GPIO P7不用请悬空 | |
|
|
| ||
12 | SPIS_CS | SPI Slave 片选 | ||
|
|
| ||
13 | SPIS_DI | SPI Slave 数据输入 | ||
|
|
| ||
14 | SPIS_DO | SPI Slave 数据输出 | ||
|
|
|
| |
| 15 |
| SPIS_CLK | SPI Slave 时钟输入 |
|
|
|
|
|
|
|
| 16 |
| P0 | GPIO P0,不用请悬空,此 PIN 如需使用请咨询厂家 |
|
|
|
|
|
|
|
Spi 引脚功能描述:
P3/SPIS_WR:SPI Slave Writeable,当输出高电平时,指示可以向模块写入数 据,使用 BSP_SpiCmd53Write 写入;当输出低电平时,指示模块不能接受数据 写入操作,强行写入可能导致溢出
P5/SPIS_RD: SPI Slave Readable,当输出高电平时,指示模块有有效数据可 以被读取,使用 BSP_SpiCmd53Read 读取;当输出低电平时,指示模块没有 有效可被读取,强行读取的数据不确定
P6/SPIS_TD:SPI Slave transmit done;用于指示一次 SPI 传输的完成的 SPI
Slave 的接口
针对本模块,有下列注意事项:
1) 将 SPI Master 引脚与 模块 SPI Slave 对应的引脚相连:
USER SPI Master |
| X210S SPI Slave | ||
CS | ------------------------- | > | SPIS_CS | |
DO | ------------------------- | > | SPIS_DI | |
DI | <------------------------- |
| SPIS_DO | |
SCLK ------------------------- |
| > | SPIS_CLK | |
GPIO ------------------------- | < |
| P3/Writeable | |
GPIO ------------------------- | < |
| P5/Readable | |
GPIO ------------------------- | < |
| P6/Transdone | |
2) SPI Master 端建议采用 GPIO 模拟 CS 信号,有些 SPI Master 的 CS
信号在一个 SDIO 的命令周期中是不连续的,不符合 SDIO 协议。
3) SPI Master 应采用 motorola 格式,CPHA = 1, CPOL = 1。
4) 模块的 SPI 接口信号脚要上拉 10K 电阻,包括 SPIS_CS、SPIS_DI、 SPIS_DO、SPIS_CLK,否则会影响功能。
5)对模块的 SPI Slave 进行枚举之前,需要 SPI Master 端先发送 1 个 byte
周期的时钟信号(此期间 CS 为无效),用于 模块同步芯片内的时钟域。
数据格式
SPI Master 与模块 SPI Slave 通信是以数据块的方式进行传输,驱动参考代码中 的块结构定义如下:
typedef struct
{
uint16_t DataLength; //user data length 低字节在前
uint8_t | DataType; | //0:DATA package 1:CMD package |
uint8_t | Reseved; | //always 0x00 |
uint8_t
Date[BLOCK_MAX_DATA_LEN]; }BLOCK;
DataLength,指定 Data[ ]中有效用户数据长度;最大为
BLOCK_MAX_DATA_LEN(BLOCK_SIZE-4)
DataType,批示需要传输数据的数据类型,等于 0 表示该数据是透传数据包; 等于 1 表示该数据是配置数据(暂未实现)
Date,需要传输的数据放于 Date[BLOCK_MAX_DATA_LEN]中,有效数据长度 由 DataLength 指定;
编程接口
1、void SpiInit(void)
SPI Master 控制器初始化,用户需要根据自己的 SPI Master 控制器实现
2、uint8_t SPI_ReadWriteByte(uint8_t data)
SPI 读写一个字节,,用户需要根据自己的 SPI Master 控制器实现
3、void BSP_SpiEumSdioSlave(void);
枚举 x210s SPI Slvae,只需初始化时调用一次;
4、void BSP_SpiCmd53Write(uint16_t bytecnt,uint8_t* pBuf);
写数据到 x210s SPI Slvae,bytecnt 始终指定为 BLOCK_SIZE,pBuf 指向 struct
BLOCK 定义的待传输数据 buf
5、void BSP_SpiCmd53Read(uint16_t bytecnt,uint8_t* pBuf);
从 x210s SPI Slvae 读数据,bytecnt 始终指定为 BLOCK_SIZE,pBuf 指向 struct BLOCK 定义的待接收数据 buf