SPI接口WIFI模块.docx
- 文档编号:9619507
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:43
- 大小:19.61KB
SPI接口WIFI模块.docx
《SPI接口WIFI模块.docx》由会员分享,可在线阅读,更多相关《SPI接口WIFI模块.docx(43页珍藏版)》请在冰点文库上搜索。
SPI接口WIFI模块
SPI接口WIFI模块
XLW002V XLW002X XLW002S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
1
WiFi 无线物联网应用技术方案
HongKong Seanywell Co., Ltd
2011-06
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
2
概述
WM001S WiFi 模块是一个完全独立的嵌入式无线局域网接入装置。
该模块带有
板载TCP/IP 协议栈和应用程序,只需要4 根引脚就可以把模块设计进用户的系
统。
通过简单的配置,模块可以自动地访问Wi-Fi 网络。
模块内置的SPI 控制器
提供了一个标准的全双工、同步的高速硬件SPI 串行接口。
SPI 接口可以根据用
户的需求灵活的配置成SPI 主机或SPI 从机。
本文档描述SPI 从机接口(外部主
控制器作为SPI 主机)。
产品主要特性
● 可配置为SPI 主机和SPI 从机(默认)
● SPI 从机接口支持最高50Mbps 时钟频率
● 支持MODE 0 和MODE 3(默认)传输
● 支持MSB 先传输
● 提供简单读写命令,编程简单
● 智能电源管理,可编程唤醒
应用领域
● 串口(RS232 /RS485)转WiFi , SPI 转WiFi
● WiFi 远程控制/监控、TCP/IP 和 Wi-Fi 协处理器;
● WiFi 遥控飞机、车等玩具领域;
● WiFi 网络收音机、摄像头、数码相框;
● 医疗仪器、数据采集、手持设备;
● WiFi 脂肪称、智能卡终端;家居智能化;
● 仪器仪表、设备参数监测、无线POS 机;
● 现代农业、军事领域等其他无线相关二次开发应用。
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
3
接口定义
引脚 输入/输出 描述
SS0 输入 片选,低电平有效
MOSI 输入 串行数据输入
MISO 输出 串行数据输出
SCLK 输入 串行时钟
SINT/
Xwkup
输出/输入
中断输出,低电平有效。
三态输出,需要外接上拉电阻。
可编程禁止/使
能SINT 输出;当外部输入上升没信号时,唤醒模块退出PMM/STOP
下图是一个典型的把模块SPI 接口配置为SPI 从机时与主控制器(SPI 主机)连接
的示意图。
接口时序
模块的SPI 从机接口支持MODE 0(CPOL = 0 & CPHA = 0)和MODE 3(CPOL =
1 & CPHA = 1)传输,模块默认工作于MODE 3。
他们的时序图分别如下:
1、MODE 0(CPOL = 0 & CPHA = 0)
注意:
此模式下SCLK 引脚需要外部下拉电阻,SS0 需要外部上拉电阻
SPI 工作在模式0 下时序图
主控制器
SCLK
MOSI
MISO
SS0
模块
SCLK
MOSI
MISO
SS0
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
4
2、MODE 3(CPOL = 1 & CPHA = 1)
注意:
此模式下SCLK 引脚需要外部上拉电阻,SS0 需要外部上拉电阻
SPI 工作在MODE 3(CPOL = 1 & CPHA = 1)下时序图
命令定义
WM001S SPI2WIFI 模块提供了一个标准的硬件SPI 接口与外部主控制器通
信。
SPI 从机接口预定义了各种命令给外部控制器使用,向模块写入数据发送到
网络,或者从模块读取来自网络上的数据,或者读写模块内部的状态寄存器等。
命令帧格式如下:
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
5
注意:
发送命令后SS0 应继续保持低电平,直到数据接收/发送完成
RSR 命令 读状态寄存器(op-code=0x00)
向SPI 从机发送RSR 命令(0x00),可以从SPI 从机读取一个字节的模块状态值,
状态值的各个位定义如下:
Bit 7 6 5 4 3 2 1 0
Name RST PSM SRFE STFDR SRTFE SRBRF STDR SSBR
Bit0(SSBR)
命令确认模块此时是否能响应命令
1:
允许主机读写从机特殊功能寄存存器
0:
禁止主机读写从机特殊功能寄存存器
Bit1(STDR)
SPI TX Buffer Ring Data Ready
1:
模块的发送缓冲内有数据,并允许用户读取数据
如果CMDR 中IE=1,SPI 从机将输出SINT
0:
模块的发送缓冲区内没有数据
Bit2(SFBRF)
SPI RX Buffer Ring Full
1:
模块的接收缓冲满,禁止用户继续发送数据
如果CMDR 中IE=1,SPI 从机将输出SINT
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
6
0:
模块的接收缓冲非满
Bit3(SRTFE)
SPI RX/TX FIFO Error
1:
模块接收缓冲发生错误或者主机频率高于模块接收频率导致模块发送错
误
如果CMDR 中IE=1,SPI 从机将输出SINT
0:
没有错误事件发生
Bit4(STFRD)
SPI Tx FIFO Date Ready
1:
模块Tx FIFO 中的数据达到上限水平
0:
模块Tx FIFO 中的数据达到下限水平
Bit5(SRFE)
SPI Rx FIFO Empty
1:
模块的Rx FIFO 为空,允许接收数据
0:
模块的Rx FIFO 满
Bit6(PSM)
Power Saving Mode Status
1:
模块进入STOP 状态或PMM 状态
如果CMDR 中IE=1,SPI 从机将输出SINT
0:
模块非处于STOP 状态或PMM 状态
Bit7(RST)
1:
模块处于系统复位阶段或者软件复位阶段
0:
模块复位完成
如果CMDR 中IE=1,SPI 从机将输出SINT,当状态变改变时SPI 从机将
输出SINT
CMDR 命令 写命令寄存器(op-code=0x80)
CMDR 命令用于主机向SPI 从机发送请求。
发送命令时先发命令码(0x80),紧接
着发送一字节的请求数据,数据将会写入CMDR 寄存器。
命令寄存器中各个位
的定义如下:
Bit 7 6 5 4 3 2 1 0
Name RSTR STOPR PMMR WKUPR SRTBR
R
CSI IE Reserve
d
Bit0 保留
Bit1(IE)
Interrupt Enable
1:
当发生发以下条件中的一个或一个以上时,允许SPI 从机输出SINT
中断
-Tx Buffer 非空
-模块正在进入或离开PMM/STOP 模式
-Rx Buffer 满
-Rx/Tx FIFO 错误
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
7
-RESET 状态发生改变
0:
禁止SPI 从机输出SINT 中断
Bit2(CSI)
Clear SINT
1:
清除SINT 中断
当SPI 主机接收到SINT 中断后,可以发送RSR 命令获取SPI 从机
的
状态,然后发CMDR 清除SINT 中断
当SPI 从机进入PMM 模式时引发SINT 时,发CMDR 后应该再次
发
送RSR 确认状态
0:
对此位写0 无影响
Bit3(SRTBRR)
SPI Rx/Tx Buffer Ring Reset Request
1:
请求模块的Rx/Tx Buffer 复位到最初状态
当主机检测SPI 从机RX/TX FIFO 错误时,应该发送此请求
0:
对此位写0 无影响
Bit4(WKUPR)
wake up request
1:
请求模块退出PMM/STOP 模式
当主机发送此请求后,应该发送RSR 命令确认SPI 从机是否退出
PMM/STOP
0:
对此位写0 无影响
Bit5(PMMR)
power management mode request
1:
设置模块进入PMM 模式
当主机发送此请求后,应该发送RSR 命令确认SPI 从机是否进入
PMM
0:
对此位写0 无影响
Bit6(STOPR)
stop mode request
1:
设置模块进入STOP 模式
当主机发送此请求后,应该发送RSR 命令确认SPI 从机是否进入
STOP
0:
对此位写0 无影响
Bit7(RSTR)
reset request
1:
请求模块复位
0:
对此位写0 无影响
RBRS 命令 读Tx/Rx Buffer 状态(op-code=0x40)
向模块发送RBRS 命令(0x40),可以从SPI 从机读取VC 值和RC 值。
当外部主
机向模块发送READ,WRITE 或RW 命令之前,应选先发送RBRS 命令确认模
块的Buffer 状态
VC(Vacancy Counter)值表明当前模块的Rx Buffer 空闲区域大小。
为了防止数
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
8
据覆盖,需要发送RBRS 命令确认模块当前是否有足够空间来接收用户将要写
入的数据,VC 占用两个字节大小,高字节先传。
例如VC=0x0064 表示 100bytes
空闲,VC=0x1000 表示当前有4096bytes 空闲
RC(Read Conuter)值表明模块当前Tx Buffer 中可供主机读取的数据计数
RC 占用两个字节大小,高字节先传。
例如RC=0x0000 表示当前没有数据供用
户读取,RC=0x0064 表示模块当前有100 字节的数据可供主机读取
READ 命令 读Tx Buffer 中数据 (op-code=0x50)
当外部主机要从SPI 从机读取数据时,应先发送READ 命令,然后主机可以开
始接收数据,当前模块有效可读数据可以通过发送RBRS 命令获取。
如果RBRS
命令返回的RC=0,仍然发送READ 命令,主机读取的数据都为0x00,并且RSR
命令中的SRTFE 位会置1。
WRITE 命令 写数据到Rx Buffer (op-code=0xD0)
当外部主机要向SPI 从机写入数据时,应先发送WRITE 命令,接着主机可以发
送数据。
在发送WRITE 命令前,应先发送RBRS 命令获取模块当前Rx Buffer 的
空闲空间VC
RW 命令 读写Tx/Rx Buffer (op-code=0xC0)
RW 命令用于同时向SPI 从机发送数据和读取数据(如果主机支持此功能)。
该命
令相当于READ 加WRITE 命令同时进行。
同样的,在发送RW 先,应先发送
RBRS 命令确保模块当前有足够的空间接收用户数据和模块有数据供主机读取。
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
9
电源管理
WM001S SPI2WiFi 模块有2 种电源管理模式:
PMM 模式和STOP 模式 。
PMM
模式下模块的工作频率为全速运行时的1/100.,此时WiFi 信号依然存在,但依然
不能正常接收数据。
STOP 模式下模块工作频率将完全停止,功耗最低。
进入和退出PMM/STOP 模
式可以通过发送CMDR 命令请求,详见CMDR 命令说明
简单编程流程参考
1、外部主机从模块读取4 字节数据:
注意:
此例读取4 字节,并不是要求SPI 主机每次只能向模块读取4 字节数据,实际一次性最大可读字节
数在RBRS 命令返回的RC 参数确定。
模块的发送缓冲区大小为0x4000 Bytes,因此RC 可能的最大值为
0x3fff
RC>=4
发送8*4 个CLK,接收4 字节数据
发送READ 命令(0x50)
发送RBSR 命令(0x40)
接收4 字节数据(VC 和RC)
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
10
2、外部主机向模块写入16 字节数据:
注意:
此例写入16 字节,并不是要求SPI 主机每次只能向模块写入字节数据,实际一次性最大可写入字
节数在RBRS 命令返回的VC 参数确定。
模块的接送缓冲区大小 0x4000 Bytes,因此VC 可能的最大值为
0x3fff
VC>=16
发发送送WWRRIITTEE命命令令( +03xbDy0te)s
发送16*8 个CLK,发送16bytes
接收返回值VC 和RC
发送RBSR 命令(0x40)
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
11
示例程序
/*
* ----------------------------------------------------------------------------------------------------------------
* Function:
SPI master send the RBRS command to get the SPI slave buffer status.
* This function will disable SPI master interrupt during transferring
* RBRS command to SPI slave.
*
* Params :
*ptVc:
point at a word variable can record the slave vacancy count.
* *ptRc:
point at a word variable can record the slave read count.
* ---------------------------------------------------------------------------------------------------------------
*/
void Rbrs(U8_T *ptVc, U8_T *ptRc)
{
U8_T Status;
U8_T Rx[4];
/*send CMD_RBRS , keep the CS pin asserted after CMD_RBRS */
SPIDR = 0x40;/* CMD_RBRS */
SPICIR = 0x04;
SPIDR = 0xc7;
SPICIR = 0x0A;
do
{/* Check the transfer complete */
SPICIR = 0x0D;
Status = SPIDR;
} while (!
(Status & 0x01));
SPIDR =0x9F;/*start recevie 4bytes*/
SPICIR = 0x0A;
do
{/* Check the transfer complete */
SPICIR = 0x0D;
Status = SPIDR;
} while (!
(Status & 0x01));
SPICIR=0x00;/*copy rx buf */
Rx[0]=SPIDR;
Rx[1]=SPIDR;
Rx[2]=SPIDR;
Rx[3]=SPIDR;
/* vacancy counter */
*(ptVc + 0) = Rx[2];
*(ptVc + 1) = Rx[3];
/* read counter */
*(ptRc + 0) = Rx[0];
*(ptRc + 1) = Rx[1];
}
/*
* ---------------------------------------------------------------------------------------------------------------
* Function:
read 4 bytes from SPI Slave and print
* ---------------------------------------------------------------------------------------------------------------
*/
void Demo_Read(void)
{
U8_T Status;
U8_T Rx[4];
U8_T i=0;
U16_T vcLen, rcLen;
/*RBRS*/
Rbrs((U8_T *)&vcLen, (U8_T *)&rcLen);
if (rcLen < 4)
WM001S V3.0
新力维高速SPI 转WIFI 模块SPI 接口
12
{
printf("Read failed:
rc<4!
nr");<>
return;
}
/* send CMD_READ keep the CS pin asserted after CMD_READ */
SPIDR = 0x50;/* CMD_READ */
SPICIR = 0x04;
SPIDR = 0xC7;
SPICIR = 0x0A;
do{
SPICIR = 0x0D;
Status = SPIDR;
}while (!
(Status & 0x01));
SPIDR = 0x9F;/*start recevie 4 bytes*/
SPICIR = 0x0A;
do{
SPICIR = 0x0D;
Status = SPIDR;
}while (!
(Status & 0x01));
SPICIR = 0x00;/*copy rx buf */
Rx[3]=SPIDR;
Rx[2]=SPIDR;
Rx[1]=SPIDR;
Rx[0]=SPIDR;
printf("Read OK!
nr");
printf("Rx:
%bx %bx %bx %bxnr", R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SPI 接口 WIFI 模块