随着科学技术水平的不断提高,传统的有线通信因自身的局限性已越来越不能满足人们的需要,无线通信技术得到了快速发展。如今出现了种类众多的无线通信技术,目前比较热门的有WiFi、蓝牙、UWB、ZigBee、Nordic nRF以及TI公司的SimpliciTI等。不同无线通信技术在成本、功耗、传输速率、使用频段、功能方面有很大区别,针对不同的需求要选择适合的无线技术。
针对便携式设备的低成本、低功耗要求,蓝牙和WiFi功耗相对较大,UWB规范尚不统一且芯片价格高,Zigbee的传输速率受限仅250 kbit/s,SimpliciTI则受TI公司硬件平台限制。综合考虑各个因素,本系统采用了NordicSemiconductor公司2.4 GHz低成本高性能的nRF24L01无线射频芯片,由低功耗ARM系列STM32L152RD微处理器控制,实现短距离无线数据通信。nRF24L01不仅可以提供一个真正的超低功耗解决方案,而且也拥有优良的共存性,其载波监测功能保证了在WLAN干扰下的可靠通信。高速的频率切换时间减少了与蓝牙等跳频系统出现互相干扰的可能。
1硬件设计
系统的设计思路是在满足高速传输数据的同时尽可能的降低功耗,故在MCU与无线芯片的选型上侧重于性能和功耗的平衡。系统硬件部分采用模块化的设计思想,主要由供电模块,nRF24L01射频模块和微控制器模块组成。其中供电模块根据实际需求方案很多,本文就不详细叙述了。
1.1 nRF24L01射频模块
nRF24L01是由Nordic Semiconductor公司出品的GF-SK单片式收发芯片,工作于2.4~2.5 GHz的世界通用(ISM)频段,传输速率可达2 Mbit/s。芯片包括频率发生器、功率放大器、增强型SchockBurstTM模式控制器、晶振和调制解调器。发射功率和频道选择等工作参数可以通过SPI接口进行设置。增强型ShockBurstTM功能使软件设计更为简单,集成了双向通信所需要的链路层,而通常这些功能需要一个高速的MCU和大空间的存储器和高的电源消耗来实现。nRF24L01及外部接口如图1所示。
1.2微控制器模块
STM32L152RD基于高品质的ARM Cortex-M3内核,融合了高性能和超低功耗的特性,内置高速存储器,工作频率为32 MHz。它采用了优化的节能架构与0.13μm的STMicroelectronics超低漏电生产工艺,此外,为了实现超低功耗,STM32L152RD还划分了6种工作模式,使其在任何设定时间内都能以最低的功耗完成任务。STM32控制器的SPI(串行外设接口)允许芯片与外部设备以全双工或者半双工、同步、串行方式通信,可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠通信。
通常SPI通过4个管脚与外部器件相连。MISO:主设备输入/从设备输出管脚,该管脚在从模式下发送数据,在主模式下接收数据;MOSI:主设备输出/从设备输入管脚,该管脚在主模式下发送数据,在从模式下接收数据;SCK:串口时钟,作为主设备的输出,从设备的输入;NSS:从设备选择。这是一个可选的管脚,用来选择主/从设备。
系统除了使用MCU这4个管脚与无线模块相连,还通过PA0管脚控制nRF24L01的片选端CE,PB0管脚控制中断响应。图2是微控制器模块STM32L152RD与nRF24L01的接口电路原理图。
2软件设计
nRF24L01无线射频芯片内置的链路层使软件设计更为简单,系统进行无线通信无须配置复杂的通信协议,只需编程配置好射频芯片与MCU的SPI通信接口,然后在发送时将有效数据放入TX缓冲区,芯片将把地址信息和TX缓冲区的有效数据与内部自行产生的数据头、标志位和CRC校验码等信息结合起来进行数据打包并发送出去。表1给出增强型的ShockBurstTM模式的数据包。整个系统的软件设计部分分为初始化操作、配置发送模式、配置接收模式、配置中断4部分。
2.1初始化操作
无线射频芯片nRF24L01要进行无线通信,首先要对MCU的时钟,MCU的SPI通信口和nRF24L01进行初始化操作[5]。MCU时钟和SPI接口初始化部分STM32L152RD的芯片资料很详细,在此就不详细叙述了。nRF24L01的初始化主要包括地址、应答方式、工作频率、数据长度、发射速率、中断响应等参数的配置。nRF24L01初始化操作的流程图如图3所示。
2.2配置发送模式
nRF24L01配置为增强型的ShockBurstTM发送模式,当MCU有数据要发送nRF24L01就会启动Shock-BurstTM模式,自动生成数据头、标志位和CRC校验码并发送数据。数据发送完毕后将转到接收模式并等待接收端的ACK应答信号。如果没有收到ACK应答信号,则认为数据丢失,nRF24L01将循环重发数据包,直到收到ACK或重发次数超过重发寄存器中设置的值为止。如果数据重发次数超过了初始设定值,则会产生数据溢出导致IRQ中断。当收到ACK应答信号时,nRF24L01就认为最后一包数据已经发送成功,TX_FIFO寄存器中的数据被清除并产生IRQ中断通知MCU。MCU根据任务需求控制nRF24L01进入发送模式,接收模式或待机模式。发送模式流程如图4所示。
配置发送模式代码如下:
void nRF24L01_TxPacket(unsigned char*tx_buf)
{
NRF24L01_MODE_CE_0();SPI_Write_Buf(WRITE_REG1+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//写入接收地址
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);//写入//要发送的数据
SPI_RW_Reg(WRITE_REG1+CONFIG,0x0e);//IRQ中断,16位CRC
NRF24L01_MODE_CE_1();//CE置1,激发增强型的ShockBurstTM
发送模式
Delay_us(20);//注意延迟值不能太低
}
2.3配置接收模式
在增强型的ShockBurstTM接收模式[9]下,nRF24L01可以接收6路不同地址相同频率的数据,每个数据通道拥有自己的地址,通过寄存器RX_ADDR_PX来配置。nRF24L01CE置高后130μs便自动检测空中信息,当有通道接收到有效的地址和数据时,进行CRC校验,正确则记录地址并以此为目标地址发送应答信号ACK同时自动去除数据头,标志位和校验码并将有效数据写入RX_FIFO寄存器,芯片通过产生IRQ中断通知MCU接收完毕,随后MCU可从RX_FIFO寄存器读出有效数据。如果CRC校验错误则丢弃数据包重新检测空中信息。当成功接收数据时,MCU可根据任务需求控制nRF24L01进入发送模式,接收模式或待机模式。接收模式流程如图5所示。
配置接收模式代码如下:
void nRF24L01_SetRX_Mode(void)
{
NRF24L01_MODE_CE_0();
SPI_RW_Reg(0xe2,0);//清接收FIFO
SPI_RW_Reg(WRITE_REG1+STATUS,0XFF);//清状态寄存器
SPI_RW_Reg(WRITE_REG1+CONFIG,0x0F);//IRQ中断,16位CRC
NRF24L01_MODE_CE_1();
}
2.4配置中断
中断机制是单片机的基础设施之一,它起着通信网络的作用,以协调系统对各种内外部时间的响应和处理。通过配置外部中断,可以判断数据发送和接收的情况,以便对相应事件做出处理。
配置中断代码如下:
void NRF24L01_INT_IRQHandler(void)
{
uint8_t status;status=0;
if(EXTI_GetITStatus(NRF24L01_IRQ_EXTI_LINE)!=RESET)
//判断是否产生了EXTI2中断
{
if(GPIO_ReadInputDataBit(NRF24L01_IRQ_GPIO_PORT,NRF24L01_IRQ_PIN)==0)//判断是否是PA2线变低
status=SPI_Read(READ_REG1+STATUS);//读状态寄器
if(status&0x40)//如果接收到数据
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//将数据从RX缓冲区读出
SPI_RW_Reg(0xe2,0);//清除发送缓冲区
}
else if((status&0x10)》0)//发射达到最大复发次数
SPI_RW_Reg(0xe1,0);//清除发送缓冲区
else if((status&0x20)》0)//发射后收到应答
SPI_RW_Reg(0xe1,0);SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//将数据从RX缓冲区读出
SPI_RW_Reg(WRITE_REG1+STATUS,0xFF);//清除寄存器标志
}
EXTI_ClearITPendingBit(NRF24L01_IRQ_EXTI_LINE);//清除EXTI2上的中断标志
}}
3分析验证
为保证系统准确有效,现将本文方案与目前已有的几种无线通信系统方案进行对比,其中系统综合耗电的计算是通过无线芯片发射电流和接收电流的平均值与8 MHz工作时的MCU电流之和。对比分析如表2所示。
4结束语
提出了一种基于STM32L152RD微控制器和nRF24L01无线射频芯片的超低功耗无线通信系统方案,并搭建了实际硬件系统,实现了超低功耗下的高速近距离无线数据传输。无工作任务时nRF24L01可进入掉电模式,STM32L152RD可进入休眠模式,系统功耗更低,特别满足便携式设备功耗尽可能低的要求。系统硬件电路简单、成本低、传输速率快、可靠性好、具有良好的可扩展性,适用于对功耗有较高要求的便携设备无线通信。