RF2401中文资料.docx
- 文档编号:9100966
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:24
- 大小:335.74KB
RF2401中文资料.docx
《RF2401中文资料.docx》由会员分享,可在线阅读,更多相关《RF2401中文资料.docx(24页珍藏版)》请在冰豆网上搜索。
RF2401中文资料
一、模块介绍
NewMsg_RF2401B(尺寸:
34mmX17mm板厚:
1mm)
(1)2.4Ghz全球开放ISM频段免许可证使用
(2)最高工作速率1Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合
(3)125频道,满足多点通信和跳频通信需要
(4)内置硬件CRC检错和点对多点通信地址控制
(5)低功耗1.9-3.6V工作,待机模式下状态仅为1uA
(6)内置2.4Ghz天线,体积小巧34mmX17mm
(7)模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便
(8)内置专门稳压电路,使用各种电源包括DC/DC开关电源均有很好的通信效果
(9)标准DIP间距接口,便于嵌入式应用
(10)RFModule-Quick-DEV快速开发系统,含开发板
(11)与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要。
(12)其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块!
如果是3.3V的,可以直接和RF2401模块的IO口线连接。
比如AVR系列单片机如果是5V的,一般串接2K的电阻。
二、接口电路
说明:
(1)VCC脚接电压范围为1.9V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。
推荐电压3.3V左右。
(2)除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需电平转换。
当然对3V左右的单片机更加适用了。
(3)硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。
(4)6脚,12脚为接地脚,需要和母板的逻辑地连接起来
(5)排针间距为100mil,标准DIP插针,如果需要其他封装接口,比如密脚插针,或者其他形式的接口,可以联系我们定做。
三、模块结构和引脚说明
NewMsg_RF2401模块使用Nordic公司的nRF2401A芯片开发而成。
四、工作方式
NewMsg_RF2401有工作模式有四种:
收发模式
配置模式
空闲模式
关机模式
工作模式由PWR_UP、CE、TX_EN和CS三个引脚决定,详见下表。
4.1 收发模式
收发模式有ShockBurstTM收发模式和直接收发模式两种,收发模式由器件配置字决定,具体配置将在器件配置部分详细介绍。
4.1.1ShockBurstTM收发模式
ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。
与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:
尽量节能;低的系统费用(低速微处理器也能进行高速射频发射);数据在空中停留时间短,抗干扰性高。
ShockBurstTM技术同时也减小了整个系统的平均工作电流。
在ShockBurstTM收发模式下,NewMsg_RF2401自动处理字头和CRC校验码。
在接收数据时,自动把字头和CRC校验码移去。
在发送数据时,自动加上字头和CRC校验码,当发送过程完成后,DR引脚通知微处理器数据发射完毕。
4.1.1.1ShockBurstTM发射流程
需要用到的接口引脚为CE,CLK1,DATA
A. 当微控制器有数据要发送时,其把CE置高,使NewMsg_RF2401工作;
B. 把接收机的地址和要发送的数据按时序送入NewMsg_RF2401;
C. 微控制器把CE置低,激发NewMsg_RF2401进行ShockBurstTM发射;
D. NewMsg_RF2401的ShockBurstTM发射
(1) 给射频前端供电;
(2)射频数据打包(加字头、CRC校验码);
(3) 高速发射数据包;
(4)发射完成,NewMsg_RF2401进入空闲状态。
4.1.1.2ShockBurstTM接收流程
需用到的接口引脚CE、DR1、CLK1和DATA(接收通道1)
A. 配置本机地址和要接收的数据包大小;
B. 进入接收状态,把CE置高;
C. 200us后,NewMsg_RF2401进入监视状态,等待数据包的到来;
D. 当接收到正确的数据包(正确的地址和CRC校验码),NewMsg_RF2401自动把字头、地址和CRC校验位移去;
E. NewMsg_RF2401通过把DR1(这个引脚一般引起微控制器中断)置高通知微控制器;
F. 微控制器把数据从NewMsg_RF2401读出;
G. 所有数据读取完毕后,NewMsg_RF2401把DR1置低,此时,如果CE为高,则等待下一个数据包,如果CE为低,开始其它工作流程。
4.1.2直接收发模式
在直接收发模式下,NewMsg_RF2401如传统的射频收发器一样工作。
4.1.2.1直接发送模式
需要用到的接口引脚为CE、DATA
A. 当微控制器有数据要发送时,把CE置高;
B. NewMsg_RF2401射频前端被激活;
C. 所有的射频协议必须在微控制器程序中进行处理(包括字头、地址和CRC校验码)。
4.1.2.2直接接收模式
需要用到的接口引脚为CE、CLK1和DATA
A. 一旦NewMsg_RF2401被配置为直接接收模式,DATA引脚将根据天线接收到的信号开始高低变化(由于噪声的存在);
B. CLK1引脚也开始工作;
C. 一旦接收到有效的字头,CLK1引脚和DATA引脚将协调工作,把射频数据包以其被发射时的数据从DATA引脚送给微控制器;
D. 字头必须是8位;
E. DR引脚没用上,所有的地址和CRC校验必须在微控制器内部进行。
4.2 配置模式
在配置模式,15字节的配置字被送到NewMsg_RF2401,这通过CS、CLK1和DATA三个引脚完成,具体的配置方法请参考本文的器件配置部分。
4.3 空闲模式
NewMsg_RF2401的空闲模式是为了减小平均工作电流而设计,其最大的优点是,实现节能的同时,缩短芯片的起动时间。
在空闲模式下,部分片内晶振仍在工作,此时的工作电流跟外部晶振的频率有关,如外部晶振为4MHz时工作电流为12uA,外部晶振为16MHz时工作电流为32uA。
在空闲模式下,配置字的内容保持在NewMsg_RF2401片内。
4.4 关机模式
在关机模式下,为了得到最小的工作电流,一般此时的工作电流小于1uA。
关机模式下,配置字的内容也会被保持在NewMsg_RF2401片内,这是该模式与断电状态最大的区别。
五、配置NewMsg_RF2401模块
NewMsg_RF2401的所有配置工作都是通过CS、CLK1和DATA三个引脚完成,把其配置为ShockBurstTM收发模式需要15字节的配置字,而如把其配置为直接收发模式只需要2字节的配置字。
我们推荐NewMsg_RF2401工作于ShockBurstTM收发模式,这种工作模式下,系统的程序编制会更加简单,并且稳定性也会更高,因此,下文着重介绍把NewMsg_RF2401配置为ShockBurstTM收发模式的器件配置方法。
ShockBurstTM的配置字使NewMsg_RF2401能够处理射频协议,在配置完成后,在NewMsg_RF2401工作的过程中,只需改变其最低一个字节中的内容,以实现接收模式和发送模式之间切换。
ShockBurstTM的配置字可以分为以下四个部分:
数据宽度:
声明射频数据包中数据占用的位数。
这使得NewMsg_RF2401能够区分接收数据包中的数据和CRC校验码;
地址宽度:
声明射频数据包中地址占用的位数。
这使得NewMsg_RF2401能够区分地址和数据;
地址:
接收数据的地址,有通道1的地址和通道2的地址;
CRC:
使NewMsg_RF2401能够生成CRC校验码和解码。
当使用NewMsg_RF2401片内的CRC技术时,要确保在配置字中CRC校验被使能,并且发送和接收使用相同的协议。
NewMsg_RF2401配置字的各个位的描述如下表所示。
NewMsg_RF2401配置字描述
在配置模式下,注意保证PWR_UP引脚为高电平,CE引脚为低电平。
配置字从最高位开始,依次送入NewMsg_RF2401。
在CS引脚的下降沿,新送入的配置字开始工作。
六、参考源代码
参考源代码
/*
Email:
wenming_hu2002@
官方网址:
官方论坛:
*/
#include
#defineBYTE_BIT00x01
#defineBYTE_BIT10x02
#defineBYTE_BIT20x04
#defineBYTE_BIT30x08
#defineBYTE_BIT40x10
#defineBYTE_BIT50x20
#defineBYTE_BIT60x40
#defineBYTE_BIT70x80
//
sbitPWR_UP=P1^6;
sbitCE=P1^2;
//sbitDR2=P3^5;//暂时没有用到
//sbitCLK2=P3^4;
//sbitOUT2=P3^3;
sbitCS=P1^1;
sbitDR1=P1^0;
sbitCLK1=P3^7;
sbitDATA=P3^3;
sbitLED0=P3^4;
sbitLED1=P3^5;
sbitKEY0=P3^0;
sbitKEY1=P3^1;
/*
*************************************************************
*nRF2401Configuration*
*保存2401的配置信息*
*************************************************************
*/
/*=====
//芯片测试用,无需修改
#defineTEST_20x8E//MSBD143~D136
#defineTEST_10x08//D135~D128
#defineTEST_00x1C//D127~D120
/*注意:
DATAx_W+ADDRx_W+CRC的值必须小于256!
单个数据包的大小必须小于32字节(256位)*/
#defineDATA2_W0x10//0x10=2字节//频道2发送/接收数据长度(单位:
Bit)
#defineDATA1_W0xE0//0x20=28字节//频道1发送/接收数据长度(单位:
Bit)
/*注意:
2401忽略ADDR中超过ADDR_W设定宽度的那些位,同时地址不能全部设置为0*/
//频道2接收地址<-频道2未启用
#defineADDR2_40x00
#defineADDR2_30x1c
#defineADDR2_20xcc
#defineADDR2_10xcc
#defineADDR2_00xcc
//频道1接收地址(当前模块地址)<-只使用到频道1
#defineADDR1_40x00
#defineADDR1_30xcc
#defineADDR1_20xcc
#defineADDR1_10xcc
#defineADDR1_00xcc
#defineADDR_W0x10//0x10=2字节//发送/接收地址宽度(单位:
Bit)
#defineCRC_L0x1//CRC模式0:
8位1:
16位
#defineCRC_EN0x1//CRC校验0:
禁用1:
启用
#defineRX2_EN0x0//双频道功能0:
禁用1:
启用
#defineCM0x1//0:
Directmode1:
ShockBurstmode
#defineRFDR_SB0x0//传输速率0:
250kbps1:
1Mbps(250kbps比1Mbps传输距离更远)
#defineXO_F0x3//16M//nRF2401晶振频率(具体设置见下图)
#defineRF_PWR0x3//信号发射功率(具体设置见下图)
#defineRF_CH0x2//ChannelRF频率设置
//Channel=2400MHz+RF_CH*1.0MHz
#defineRXEN0x0//0:
Tx1:
Rx
//程序会通过SetTxMode/SetRxMode重新设置此项参数
//<将设置信息组合成每个字节的数据信息,此区域无需修改>
#defineRFConfig_Bit0TEST_2
#defineRFConfig_Bit1TEST_1
#defineRFConfig_Bit2TEST_0
#defineRFConfig_Bit3DATA2_W
#defineRFConfig_Bit4DATA1_W
#defineRFConfig_Bit5ADDR2_4
#defineRFConfig_Bit6ADDR2_3
#defineRFConfig_Bit7ADDR2_2
#defineRFConfig_Bit8ADDR2_1
#defineRFConfig_Bit9ADDR2_0
#defineRFConfig_Bit10ADDR1_4
#defineRFConfig_Bit11ADDR1_3
#defineRFConfig_Bit12ADDR1_2
#defineRFConfig_Bit13ADDR1_1
#defineRFConfig_Bit14ADDR1_0
#defineRFConfig_Bit15(ADDR_W<<2|CRC_L<<1|CRC_EN)
#defineRFConfig_Bit16(RX2_EN<<7|CM<<6|RFDR_SB<<5|XO_F<<2|RF_PWR)
#defineRFConfig_Bit17(RF_CH<<1|RXEN)
//------------------------------------------------------
//通过宏定义将18字节的寄存器参数按照各个功能分解,以便于参数的调整
unsignedcharcodenRF2401_Conf[18]={
RFConfig_Bit0,RFConfig_Bit1,RFConfig_Bit2,RFConfig_Bit3,RFConfig_Bit4,
RFConfig_Bit5,RFConfig_Bit6,RFConfig_Bit7,RFConfig_Bit8,RFConfig_Bit9,
RFConfig_Bit10,RFConfig_Bit11,RFConfig_Bit12,RFConfig_Bit13,RFConfig_Bit14,
RFConfig_Bit15,RFConfig_Bit16,RFConfig_Bit17
};
//------------------------------------------------------------
/*
*************************************************************
*nRF2401Tx/Rxfunctions*
*
*voidDelay100(void);
*voidConfig2401(void);//配置2401,写入初始化设置
*voidSetTxMode(void);//设置为发送模式
*voidSetRxMode(void);//设置为接收模式
*voidnRF2401_TxPacket(unsignedcharTxBuf[]);
*//发送TxBuf[]内的数据长度由DATA1_W决定
*unsignedcharnRF2401_RxPacket(unsignedchar*RxBuf);
*//检查是否有数据需要接受如果有,则保存至RxBuf[]
*//返回值0:
没有接收到数据1:
接收到数据
*************************************************************
*/
//16M晶振600us左右
voidDelay100(void)
{
unsignedinti;
for(i=0;i<100;i++);
}
/*==================================================
nRF2401设置配置寄存器时序
=====================================================*/
bdataunsignedcharDATA_BUF;//用于ByteRead和ByteWrite函数
#defineDATA7((DATA_BUF&BYTE_BIT7)!
=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!
=0)
unsignedcharByteRead(void)
{
unsignedchari;
for(i=0;i<8;i++)
{
DATA_BUF=DATA_BUF<<1;
CLK1=1;
DATA=1;//设置为输入状态
if(DATA)//读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=~BYTE_BIT0;
}
CLK1=0;
}
returnDATA_BUF;
}
voidByteWrite(unsignedcharsend)
{
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if(DATA7)//总是发送最高位
{
DATA=1;
}
else
{
DATA=0;
}
CLK1=1;
DATA_BUF=DATA_BUF<<1;
CLK1=0;
}
}
/*<2401配置寄存器的写入方式>
NOTE.
OnthefallingedgeofCS,thenRF2401Aupdatesthenumberofbitsactuallyshifted
induringthelastconfiguration.
Ex:
IfthenRF2401Aistobeconfiguredfor2channelRXinShockBurst.,atotalof120
bitsmustbeshiftedinduringthefirstconfigurationafterVDDisapplied.
Oncethewantedprotocol,modusandRFchannelareset,onlyonebit(RXEN)is
shiftedintoswitchbetweenRXandTX.
注意:
2401配置寄存器的数据写入通过一移位寄存器完成
*/
voidConfig2401(void)
{
unsignedinti;
unsignedcharvariablel;
CS=0;
CE=0;
PWR_UP=1;//上电
for(i=0;i<10;i++)Delay100();//从上电到进入配置模式需要3ms的延时
CS=1;//使RF2401进入配置方式
for(i=0;i<18;i++)
{
variablel=nRF2401_Conf[i];
ByteWrite(variablel);
}
Delay100();
CS=0;//CS置低使配置有效
Delay100();
}
voidSetTxMode(void)
{
//设置为配置模式
PWR_UP=1;
CE=0;
CS=1;
Delay100();
//配置寄存器0字节RXEN设置为0:
发送模式
DATA=0;
CLK1=1;
CLK1=0;
//设置为Activemodes(Tx)
CS=0;
CE=1;
Delay100();
}
voidSetRxMode(void)
{
//设置为配置模式
PWR_UP=1;
CE=0;
CS=1;
Delay100();
//配置寄存器0字节RXEN设置为1:
接收模式
DATA=1;
CLK1=1;
CLK1=0;
//设置为Activemodes(Rx)
CS=0;
CE=1;
Delay100();
}
//接收方通道硬件地址
unsignedcharTxAddress[]={0xcc,0xcc,0xcc,0xcc};
//nRF2401数据发送函数
voidnRF2401_TxPacket(unsignedcharTxBuf[])
{
inti;
unsignedcharvariable2;
CE=1;
Delay100();
for(i=0;i<(ADDR_W/8);i++)//写入接收地址(按字节对齐)
{
variable2=TxAddress[i];
ByteWrite(variable2);
}
for(i=0;i<(DATA1_W/8);i++)//写入需要发送的数据(按字节对齐)
{
variable2=TxBuf[i];
ByteWrite(variable2);
}
CE=0;//CE置低使发送
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RF2401 中文 资料