RF2401中文资料.docx

上传人:b****6 文档编号:9100966 上传时间:2023-02-03 格式:DOCX 页数:24 大小:335.74KB
下载 相关 举报
RF2401中文资料.docx_第1页
第1页 / 共24页
RF2401中文资料.docx_第2页
第2页 / 共24页
RF2401中文资料.docx_第3页
第3页 / 共24页
RF2401中文资料.docx_第4页
第4页 / 共24页
RF2401中文资料.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

RF2401中文资料.docx

《RF2401中文资料.docx》由会员分享,可在线阅读,更多相关《RF2401中文资料.docx(24页珍藏版)》请在冰豆网上搜索。

RF2401中文资料.docx

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置低使发送

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1