nRF2401无线模块使用指南wx.pdf
NRF24L01开发指南 NRF24L01开发指南 V3.0 V3.0 无线无线应用应用,无限,无限精彩!精彩!2009年10月08日 2009年10月08日 维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 一、模块介绍 一、模块介绍 基于NRF24L01的无线模块分为两个型号:RF24L01B和RF24L01SE RF24L01B(PCB板载天线)(尺寸:37mm*17mm*1.6mm)RF24L01SE(外置天线)(尺寸:31mm*17mm*1.6mm)RF24L01特点:RF24L01特点:(1)2.4Ghz 全球开放ISM 频段免许可证使用 (2)最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合 (3)126 频道,满足多点通信和跳频通信需要 (4)内置硬件CRC 检错和点对多点通信地址控制 (5)低功耗1.9-3.6V 工作,待机模式下状态为22uA;掉电模式下为900nA (6)模块可软件设地址,只有收到本机地址时才会输出数据(提维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 供中断指示),可直接接各种单片机使用,软件编程非常方便 (7)内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很好的通信效果 (8)标准 5*2 DIP间距接口,便于嵌入式应用 (9)工 作 于 Enhanced ShockBurst 具 有 Automatic packet handling,Auto packet transaction handling,具有可选的内置包应答机制,极大的降低丢包率。(10)RF24L01SE配外置天线空旷地传输距离可达100米,RF24L01B空旷地传输距离约30-50米,由于2.4GHz的无线传输容易受到外界干扰,传输的可靠性或传输距离会受到一定的影响。(11)配套基于51AVRMSP430等的无线开发系统,含丰富实例源程序,欢迎选购,以帮助工程师更好地进行无线应用开发。(12)与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要。(13)其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块!如果是3.3V的,可以直接和RF2401模块的IO口线连接。比如AVR系列单片机如果是5V的,一般串接2K的电阻。二、接口电路 二、接口电路 维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 说明:(1)VCC脚接电压范围为 1.9V3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。(2)除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用了。(3)硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。(4)9脚接地脚,需要和母板的逻辑地连接起来;2脚和9脚悬空。(5)排针间距为100mil,标准DIP插针,如果需要其他封装接口,比如密脚插针,或者其他形式的接口,可以联系我们定做。三、模块结构和引脚说明 三、模块结构和引脚说明 RF24L01模块使用Nordic公司的nRF24L01芯片开发而成。维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 四、工作方式 四、工作方式 RF24L01有工作模式有四种:收发模式 配置模式 维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 空闲模式 关机模式 工作模式由PWR_UP register、PRIM_RX register和CE决定,详见下表。4.1 收发模式 收发模式有Enhanced ShockBurstTM收发模式、ShockBurstTM收发模式和直接收发模式三种,收发模式由器件配置字决定,具体配置将在器件配置部分详细介绍。4.1.1 Enhanced ShockBurstTM收发模式 Enhanced ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:尽量节能;低的系统费用(低速微处理器也能进行高速射频发射);数据在空中停留时间短,抗干扰性高。Enhanced ShockBurstTM技术同时也减小了整个系统的平均工作电流。在Enhanced ShockBurstTM收发模式下,RF24L01自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,在发送模式下,置CE为高,至少10us,将时发送过程完成后。4.1.1.1 Enhanced ShockBurstTM发射流程 A.把接收机的地址和要发送的数据按时序送入RF24L01;B.配置CONFIG寄存器,使之进入发送模式。C.微控制器把CE置高(至少10us),激发RF24L01进行Enhanced ShockBurstTM发射;D.RF24L01的Enhanced ShockBurstTM发射 (1)给射维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 频前端供电;(2)射频数据打包(加字头、CRC校验码);(3)高速发射数据包;(4)发射完成,RF24L01进入空闲状态。4.1.1.2 Enhanced ShockBurstTM接收流程 A.配置本机地址和要接收的数据包大小;B.配置CONFIG寄存器,使之进入接收模式,把CE置高。C.130us后,RF24L01进入监视状态,等待数据包的到来;D.当接收到正确的数据包(正确的地址和CRC校验码),RF2401自动把字头、地址和CRC校验位移去;E.RF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起微控制器中断)通知微控制器;F.微控制器把数据从RF2401读出;G.所有数据读取完毕后,可以清除STATUS寄存器。RF2401可以进入四种主要的模式之一。4.1.2 ShockBurstTM收发模式 ShockBurstTM收发模式可以与Nrf2401a,02,E1及E2兼容,具体表述前看本公司的-RF2401文档。4.2 空闲模式 RF24L01的空闲模式是为了减小平均工作电流而设计,其最大的优点是,实现节能的同时,缩短芯片的起动时间。在空闲模式下,部分片内晶振仍在工作,此时的工作电流跟外部晶振的频率有关。4.4 关机模式 在关机模式下,为了得到最小的工作电流,一般此时的工作电流为900nA左右。关机模式下,配置字的内容也会被保持在RF2401片内,这是该模式与断电状态最大的区别。五、配置RF24L01模块 五、配置RF24L01模块 RF2401的所有配置工作都是通过SPI完成,共有30字节的配置字。我们推荐RF24L01工作于Enhanced ShockBurstTM 收发模维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 式,这种工作模式下,系统的程序编制会更加简单,并且稳定性也会更高,因此,下文着重介绍把RF24L01配置为Enhanced ShockBurstTM收发模式的器件配置方法。ShockBurstTM的配置字使RF24L01能够处理射频协议,在配置完成后,在RF24L01工作的过程中,只需改变其最低一个字节中的内容,以实现接收模式和发送模式之间切换。ShockBurstTM的配置字可以分为以下四个部分:数据宽度:声明射频数据包中数据占用的位数。这使得RF24L01能够区分接收数据包中的数据和CRC校验码;地址宽度:声明射频数据包中地址占用的位数。这使得RF24L01能够区分地址和数据;地址:接收数据的地址,有通道0到通道5的地址;CRC:使RF24L01能够生成CRC校验码和解码。当使用RF24L01片内的CRC技术时,要确保在配置字(CONFIG的EN_CRC)中CRC校验被使能,并且发送和接收使用相同的协议。RF24L01配置字的CONFIG寄存器的位描述如下表所示。RF24L01 CONFIG配置字描述 维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m 六、参考源代码 六、参考源代码#include /sbit MISO=P13;sbit MOSI=P14;sbit SCK =P15;sbit CE =P16;sbit CSN =P37;sbit IRQ =P12;sbit LED2 =P35;sbit LED1 =P34;sbit KEY1 =P30;sbit KEY2 =P31;/SPI(nRF24L01)commands#define READ_REG 0 x00 /Define read command to register#define WRITE_REG 0 x20 /Define write command to register#define RD_RX_PLOAD 0 x61 /Define RX payload register address#define WR_TX_PLOAD 0 xA0 /Define TX payload register address#define FLUSH_TX 0 xE1 /Define flush TX register command#define FLUSH_RX 0 xE2 /Define flush RX register command#define REUSE_TX_PL 0 xE3 /Define reuse TX payload register command#define NOP 0 xFF /Define No Operation,might be used to read status register /*/SPI(nRF24L01)registers(addresses)#define CONFIG 0 x00 /Config register address#define EN_AA 0 x01 /Enable Auto Acknowledgment register address#define EN_RXADDR 0 x02 /Enabled RX addresses register address#define SETUP_AW 0 x03 /Setup address width register address#define SETUP_RETR 0 x04 /Setup Auto.Retrans register address#define RF_CH 0 x05 /RF channel register address#define RF_SETUP 0 x06 /RF setup register address#define STATUS 0 x07 /Status register address#define OBSERVE_TX 0 x08 /Observe TX register address#define CD 0 x09 /Carrier Detect register address#define RX_ADDR_P0 0 x0A /RX address pipe0 register address#define RX_ADDR_P1 0 x0B /RX address pipe1 register address#define RX_ADDR_P2 0 x0C /RX address pipe2 register address#define RX_ADDR_P3 0 x0D /RX address pipe3 register address#define RX_ADDR_P4 0 x0E /RX address pipe4 register address#define RX_ADDR_P5 0 x0F /RX address pipe5 register address#define TX_ADDR 0 x10 /TX address register address#define RX_PW_P0 0 x11 /RX payload width,pipe0 register address#define RX_PW_P1 0 x12 /RX payload width,pipe1 register address#define RX_PW_P2 0 x13 /RX payload width,pipe2 register address#define RX_PW_P3 0 x14 /RX payload width,pipe3 register address#define RX_PW_P4 0 x15 /RX payload width,pipe4 register address#define RX_PW_P5 0 x16 /RX payload width,pipe5 register address#define FIFO_STATUS 0 x17 /FIFO Status Register register address/-/写一个字节到24L01,同时读出一个字节 uchar SPI_RW(uchar byte)uchar bit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+)/output 8-bit MOSI=(byte&0 x80);/output byte,MSB to MOSI byte=(byte 1);/shift next bit into MSB.SCK=1;/Set SCK high.byte|=MISO;/capture current MISO bit SCK=0;/.then set SCK low again return(byte);/return read byte /向寄存器reg写一个字节,同时返回状态字节 uchar SPI_RW_Reg(BYTE reg,BYTE value)uchar status;CSN=0;/CSN low,init SPI transaction status=SPI_RW(reg);/select register SPI_RW(value);/.and write value to it.CSN=1;/CSN high again return(status);/return nRF24L01 status byte /读出bytes字节的数据 uchar SPI_Read_Buf(BYTE reg,BYTE*pBuf,BYTE bytes)uchar status,byte_ctr;CSN=0;/Set CSN low,init SPI tranaction status=SPI_RW(reg);/Select register to write to and read status byte for(byte_ctr=0;byte_ctrbytes;byte_ctr+)pBufbyte_ctr=SPI_RW(0);/CSN=1;维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m return(status);/return nRF24L01 status byte /写入bytes字节的数据 uchar SPI_Write_Buf(BYTE reg,BYTE*pBuf,BYTE bytes)uchar status,byte_ctr;CSN=0;status=SPI_RW(reg);for(byte_ctr=0;byte_ctrbytes;byte_ctr+)/SPI_RW(*pBuf+);CSN=1;/Set CSN high again return(status);/接收函数,返回1表示有数据收到,否则没有数据接受到 unsigned char nRF24L01_RxPacket(unsigned char*rx_buf)unsigned char revale=0;/set in RX mode SPI_RW_Reg(WRITE_REG+CONFIG,0 x0f);/Set PWR_UP bit,enable CRC(2 bytes)&Prim:RX.RX_DR enabled.CE=1;/Set CE pin high to enable RX device dalay130us();sta=SPI_Read(STATUS);/read register STATUSs value if(RX_DR)/if receive data ready(RX_DR)interrupt CE=0;/stand by mode SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/read receive payload from RX_FIFO buffer revale=1;SPI_RW_Reg(WRITE_REG+STATUS,sta);/clear RX_DR or TX_DS or MAX_RT interrupt flag return revale;/发送函数 void nRF24L01_TxPacket(unsigned char*tx_buf)CE=0;/SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);/Writes TX_Address to nRF24L01 /SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);/RX_Addr0 same as TX_Adr for Auto.Ack SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);/Writes data to TX payload SPI_RW_Reg(WRITE_REG+CONFIG,0 x0e);/Set PWR_UP bit,enable CRC(2 bytes)&Prim:TX.MAX_RT&TX_DS enabled.CE=1;dalay10us();CE=0;/配置函数 void nRF24L01_Config(void)/initial io CE=0;/chip enable CSN=1;/Spi disable SCK=0;/Spi clock line init high CE=0;SPI_RW_Reg(WRITE_REG+CONFIG,0 x0f);/Set PWR_UP bit,enable CRC(2 bytes)&Prim:RX.RX_DR enabled.SPI_RW_Reg(WRITE_REG+EN_AA,0 x01);SPI_RW_Reg(WRITE_REG+EN_RXADDR,0 x01);/Enable Pipe0 SPI_RW_Reg(WRITE_REG+SETUP_AW,0 x02);/Setup address width=5 bytes SPI_RW_Reg(WRITE_REG+SETUP_RETR,0 x1a);/500us+86us,10 retrans.SPI_RW_Reg(WRITE_REG+RF_CH,0);SPI_RW_Reg(WRITE_REG+RF_SETUP,0 x07);/TX_PWR:0dBm,Datarate:1Mbps,LNA:HCURR SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);CE=1;/维信科技 电子大楼三楼西-2 3 T E L/F A X:0 2 9-8 5 2 5 6 6 2 6 1 3 1 5 2 0 9 9 9 2 6 w x s t v 1 2 6.c o m