APP下载

基于nRF24L01和STM32L152RD超低功耗无线通信系统

2013-01-31胡文东徐文涛

电视技术 2013年17期
关键词:管脚低功耗功耗

丛 林,杨 凯,胡文东,徐文涛,黄 烨

(1.空军工程大学 航空航天工程学院,陕西 西安710038;2.第四军医大学航 空航天医学系,陕西 西安710032)

随着科学技术水平的不断提高,传统的有线通信因自身的局限性已越来越不能满足人们的需要,无线通信技术得到了快速发展。如今出现了种类众多的无线通信技术,目前比较热门的有WiFi、蓝牙、UWB、ZigBee、Nordic nRF以及TI公司的SimpliciTI等。不同无线通信技术在成本、功耗、传输速率、使用频段、功能方面有很大区别,针对不同的需求要选择适合的无线技术。

针对便携式设备的低成本、低功耗要求,蓝牙和WiFi功耗相对较大,UWB规范尚不统一且芯片价格高,Zigbee的传输速率受限仅250 kbit/s,SimpliciTI则受TI公司硬件平台限制。综合考虑各个因素,本系统采用了Nordic Semiconductor公司2.4 GHz低成本高性能的nRF24L01无线射频芯片,由低功耗ARM系列STM32L152RD微处理器控制,实现短距离无线数据通信。nRF24L01不仅可以提供一个真正的超低功耗解决方案,而且也拥有优良的共存性,其载波监测功能保证了在WLAN干扰下的可靠通信。高速的频率切换时间减少了与蓝牙等跳频系统出现互相干扰的可能。

1 硬件设计

系统的设计思路是在满足高速传输数据的同时尽可能的降低功耗,故在MCU与无线芯片的选型上侧重于性能和功耗的平衡。系统硬件部分采用模块化的设计思想,主要由供电模块,nRF24L01射频模块和微控制器模块组成。其中供电模块根据实际需求方案很多,本文就不详细叙述了。

1.1 nRF24L01射频模块

nRF24L01是由Nordic Semiconductor公司出品的GFSK单片式收发芯片[1],工作于2.4~2.5 GHz的世界通用(ISM)频段,传输速率可达2 Mbit/s。芯片包括频率发生器、功率放大器、增强型SchockBurstTM模式控制器、晶振和调制解调器。发射功率和频道选择等工作参数可以通过SPI接口进行设置。增强型ShockBurstTM功能使软件设计更为简单,集成了双向通信所需要的链路层,而通常这些功能需要一个高速的MCU和大空间的存储器和高的电源消耗来实现。nRF24L01及外部接口如图1所示。

图1 nRF24L01及外部接口

1.2 微控制器模块

STM32L152RD基于高品质的ARM Cortex-M3内核,融合了高性能和超低功耗的特性,内置高速存储器,工作频率为32 MHz。它采用了优化的节能架构与0.13μm的STMicroelectronics超低漏电生产工艺,此外,为了实现超低功耗,STM32L152RD还划分了6种工作模式,使其在任何设定时间内都能以最低的功耗完成任务。STM32控制器的SPI[2](串行外设接口)允许芯片与外部设备以全双工或者半双工、同步、串行方式通信,可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠通信。

通常SPI通过4个管脚与外部器件相连。MISO:主设备输入/从设备输出管脚,该管脚在从模式下发送数据,在主模式下接收数据;MOSI:主设备输出/从设备输入管脚,该管脚在主模式下发送数据,在从模式下接收数据;SCK:串口时钟,作为主设备的输出,从设备的输入;NSS:从设备选择。这是一个可选的管脚,用来选择主/从设备[3]。

系统除了使用MCU这4个管脚与无线模块相连,还通过PA0管脚控制nRF24L01的片选端CE,PB0管脚控制中断响应。图2是微控制器模块STM32L152RD与nRF24L01的接口电路原理图。

图2 接口电路原理图

2 软件设计

nRF24L01无线射频芯片内置的链路层使软件设计更为简单,系统进行无线通信无须配置复杂的通信协议,只需编程配置好射频芯片与MCU的SPI通信接口,然后在发送时将有效数据放入TX缓冲区,芯片将把地址信息和TX缓冲区的有效数据与内部自行产生的数据头、标志位和CRC校验码等信息结合起来进行数据打包并发送出去。表1给出增强型的ShockBurstTM模式的数据包[4]。整个系统的软件设计部分分为初始化操作、配置发送模式、配置接收模式、配置中断4部分。

表1 增强型的ShockBurstTM模式的数据包 byte

2.1 初始化操作

无线射频芯片nRF24L01要进行无线通信,首先要对MCU的时钟,MCU的SPI通信口和nRF24L01进行初始化操作[5]。MCU时钟和SPI接口初始化部分STM32L152RD的芯片资料[6]很详细,在此就不详细叙述了。nRF24L01的初始化主要包括地址、应答方式、工作频率、数据长度、发射速率、中断响应等参数的配置。nRF24L01初始化操作[7]的流程图如图3所示。

图3 nRF24L01初始化操作流程图

2.2 配置发送模式

nRF24L01配置为增强型的ShockBurstTM发送模式[8],当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发送模式

图4 发送模式流程图

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();

}

图5 接收模式流程图

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 分析验证

为保证系统准确有效,现将本文方案与目前已有的几种无线通信系统方案进行对比[9-10],其中系统综合耗电的计算是通过无线芯片发射电流和接收电流的平均值与8 MHz工作时的MCU电流之和。对比分析如表2所示。

表2 几种无线方案对比分析

表中系统综合耗电的数据直观地显示出本文设计的系统功耗明显低于其他的无线方案,更满足便携设备低功耗的需求。

4 结束语

提出了一种基于STM32L152RD微控制器和nRF24L01无线射频芯片的超低功耗无线通信系统方案,并搭建了实际硬件系统,实现了超低功耗下的高速近距离无线数据传输。无工作任务时nRF24L01可进入掉电模式,STM32L152RD可进入休眠模式,系统功耗更低,特别满足便携式设备功耗尽可能低的要求。系统硬件电路简单、成本低、传输速率快、可靠性好、具有良好的可扩展性,适用于对功耗有较高要求的便携设备无线通信。

[1]Nordic Semiconductor ASA.nRF24L01_Product_Specification_v2.0[EB/OL].[2013-01-01].http://www.nordicsemi.no.

[2]潘勇.短距离无线数据网络的应用研究无线数据网络[D].天津:天津大学,2010.

[3]徐广伟.RFID在煤矿系统中的应用[D].成都:成都理工大学,2010.

[4]肖林荣,应时彦,马跃坤,等.2.4 GHz射频收发芯片nRF24LE1及其应用[J].信息技术,2009(12):13-16.

[5]徐爱钧,彭秀华.单片机高级语言C51Windows环境编程与应用[M].北京:电子工业出版社,2008.

[6]STMicroelectronics.STM32L152RD Datasheet[EB/OL].[2013-01-01].http://www.st.com.

[7]隋绍勇,郑维广,张振邦.基于STM32F103和nRF24L01的近程无线数传系统设计[J].电子元器件应用,2010(12):15-17.

[8]张金昌,李博,冯小琴.nRF24L01在智能电子导游系统中的应用[J].数字通信,2012(4):88-90.

[9]朱慧彦,林林.基于MCU和nRF24L01的无线通信系统设计[J].电子科技,2012(4):81-83.

[10]时志云,王代华,张志杰.基于nRF24L01和PICl6F877的无线数据传输系统设计[J].电子测量,2008(1):60-63.

猜你喜欢

管脚低功耗功耗
基于任务映射的暗硅芯片功耗预算方法
一种高速低功耗比较器设计
一种异步FIFO的Read/Write Data Flow Through功能测试方法∗
一种用于6LoWPAN的低功耗路由协议
低功耗技术在驾驶行为管理模块中的应用
揭开GPU功耗的面纱
基于图像处理的异型电子元器件管脚偏移误差检测方法研究
数字电路功耗的分析及优化
CMOS数字IC管脚电容的估算与测量
一种面向星载计算机的功能级功耗估计方法