nrf905资料中文.docx
- 文档编号:17900421
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:18
- 大小:21.58KB
nrf905资料中文.docx
《nrf905资料中文.docx》由会员分享,可在线阅读,更多相关《nrf905资料中文.docx(18页珍藏版)》请在冰点文库上搜索。
nrf905资料中文
拆分词条nRF905单片无线收发器
nRF905单片无线收发器是挪威Nordic公司推出的单片射频发射器芯片,工作电压为1.9-3.6V,32引脚QFN封装(5mm×5mm),工作于433/868/915MHz3个ISM频道(可以免费使用)。
目录
nRF905概述
特点工作模式器件配置接口外围的RF信息NRF905无线传输c程序附加资料nRF905概述特点工作模式器件配置接口外围的RF信息NRF905无线传输c程序
附加资料
RF905概述
nRF905可以自动完成处理字头和CRC(循环冗余码校验)的工作,可由片内硬件自动完成曼彻斯特编码/解码,使用SPI接口与微控制器通信,配置非常方便,其功耗非常低,以-10dBm的输出功率发射时电流只有11mA,在接收模式时电流为12.5mA。
nRF905单片无线收发器工作由一个完全集成的频率调制器,一个带解调器的接收器,一个功率放大器,一个晶体震荡器和一个调节器组成。
ShockBurst工作模式的特点是自动产生前导码和CRC,可以很容易通过SPI接口进行编程配置。
特点
真正的单片
低功耗ShockBurst工作模式 工作电源电压范围1.9—3.6V 多通道工作—ETSI/FCC兼容 通道切换时间 <650us极少的材料消耗 无需外部 SAW滤波器输出功率可调至10dBm 传输前监听的载波检测协议 当正确的数据包被接收或发送时有数据准备就绪信号输出 侦测接收的数据包当地址正确输出地址匹配信号应用:
无线数据通讯 家庭自动化 无线遥控 报警及 安全系统监测 汽车 遥感勘测 无线门禁 玩具 工作模式
nRF905采用Nordic公司的VLSIShockBurst技术。
ShockBurst技术使nRF905能够提供高速的数据传输,而不需要昂贵的高速MCU来进行数据处理/时钟覆盖。
通过将与RF协议有关的高速信号处理放到芯片内,nRF905提供给应用的微控制器一个SPI接口,速率由微控制器自己设定的接口速度决定。
nRF905通过ShockBurst工作模式在RF以最大速率进行连接时降低数字应用部分的速度来降低在应用中的平均电流消耗。
在ShockBurstRX模式中,地址匹配AM和数据准备就绪DR信号通知MCU一个有效的地址和数据包已经各自接收完成。
在ShockBurstTX模式中,nRF905自动产生前导码和CRC校验码,数据准备就绪DR信号通知MCU数据传输已经完成。
总之,这意味着降低MCU的存储器需求也就是说降低MCU成本,又同时缩短软件开发时间。
1)、典型ShockBurstTX模式:
①、当应用MCU有遥控数据节点时,接收节点的地址TX-address和有效数据TX-payload通过SPI接口传送给nRF905应用协议或MCU设置接口速度;
②、MCU设置TRX_CE、TX_EN为高来激活nRF905ShockBurst传输;
③、nRF905ShockBurst:
无线系统自动上电
数据包完成(加前导码和CRC校验码)
数据包发送(100kbps,GFSK,曼 切斯特编码)
④、如果AUTO_RETRAN被设置为高nRF905将连续地发送数据包直到TRX_CE被设置为低;
⑤、当TRX_CE被设置为低时,nRF905结束数据传输并自动进入standby模式。
2)、典型ShockBurstRX模式
①、通过设置TRX_CE高,TX_EN低来选择ShockBurst模式;
②、650us以后,nRF905监测空中的信息;
③、当nRF905发现和接收频率相同的载波时,载波检测CD被置高;
④、当nRF905接收到有效的地址时,地址匹配AM被置高;
⑤、当nRF905接收到有效的数据包(CRC校验正确)时,nRF905去掉前导码、地址和CRC位,数据准备就绪(DR)被置高;
⑥、MCU设置TRX_CE低,进入standby模式低电流模式;
⑦、MCU可以以合适的速率通过SPI接口读出有效数据;
⑧、当所有的有效数据被读出后,nRF905将AM和DR置低;
⑨、nRF905将准备进入ShockBurstRX、ShockBurstTX或Powerdown模式。
3)、掉电模式
在掉电模式中,nRF905被禁止,电流消耗最小,典型值低于2.5uA。
当进入这种模式时,nRF905是不活动的状态。
这时候平均电流消耗最小,电池使用寿命最长。
在掉电模式中,配置字的内容保持不变。
4)、STANDBY模式
Standby模式在保持电流消耗最小的同时保证最短的ShockBurstRX、ShockBurstTX的启动时间。
当进入这种模式时,一部分晶体振荡器是活动的。
电流消耗取决于晶体振荡器频率,如:
当频率为4MHZ时,IDD=12uA;当频率为20MHZ时,IDD=46uA。
如果uPCLK(Pin3)被使能,电流消耗将增加。
并且取决于负载电容和频率。
在此模式中,配置字的内容保持不变。
器件配置
nRF905的所有配置都通过SPI接口进行。
SPI接口由5个寄存器组成,一条SPI指令用来决定进行什么操作。
SPI接口只有在掉电模式和Standby模式是激活的。
1)、状态寄存器(Status-Register)
寄存器包含数据就绪DR和地址匹配AM状态。
2)、RF配置寄存器(RF-ConfigurationRegister)
寄存器包含收发器的频率、输出功率等配置信息。
3)、发送地址(TX-Address)
寄存器包含目标器件地址,字节长度由配置寄存器设置。
4)、发送有效数据(TX-Payload)
寄存器包含发送的有效ShockBurst数据包数据,字节长度由配置寄存器设置。
5)、接收有效数据(RX-Payload)
寄存器包含接收到的有效ShockBurst数据包数据,字节长度由配置寄存器设置。
在寄存器中的有效数据由数据准备就绪DR指示。
接口
1)、模式控制接口:
该接口由PWR、TRX_CE、TX_EN组成控制由nRF905组成的高频头的四种工作模式:
掉电和SPI编程模式;待机和SPI编程模式;发射模式;接收模式。
2)、SPI接口:
SPI接口由CSN、SCK、MOSI以及MISO组成。
在配置模式下单片机通过SPI接口配置高频头的工作参数;在发射/接收模式下单片机SPI接口发送和接收数据。
3)、状态输出接口:
提供载波检测输出CD,地址匹配输出AM,数据就绪输出DR。
围的RF信息
1)、晶体规格
为了实现晶体振荡器低功耗和快速启动时间的解决方案,推荐使用低值晶体负载电容。
指定CL=12pF是可以接受的。
但是,也可能增大到16pF。
指定一个晶体并行相等电容,Co=1.5pF也是很好的,但这样一来会增加晶体自身成本。
典型的设定晶体电容Co=1.5pF,指定Co_max=7.0pF。
2)、外部参考时钟
一个外部参考时钟如MCU时钟,可以用来代替晶体震荡器。
这个时钟信号应该直接连接到XC1引脚,XC2引脚为高阻态。
当使用外部时钟代替晶体时钟工作时,始终必须工作在Standby模式以降低电流消耗。
如果器件被设置成Standby模式而没有使用外部时钟或晶体时钟,则电流消耗最大可达1mA。
3)、微处理器输出时钟
在默认情况下,微处理器提供输出时钟。
在Standby模式下提供输出时钟将增加电流消耗。
在Standby模式电流消耗取决于频率和外部晶体负载、输出时钟的频率和提供输出时钟的电容负载。
4)、天线输出
ANT1和ANT2输出脚给天线提供稳定的RF输出。
这两个脚必须有连接到VDD_PA的直流通路,通过RF扼流圈,或者通过天线双极的中心点。
在ANT1和ANT2之间的负载阻抗应该在200-700Ω范围内,通过简单的匹配网络或RF变压器(不平衡变压器)可以获得较低的阻抗(例如50Ω)。
NRF905无线传输c程序
发送部分
/****************************
//写发射数据命令:
20H
//读发射数据命令:
21H
//写发射地址命令:
22H
//读发射地址命令:
23H//读接收数据命令:
24H
******************************/
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitTXEN=P2^7;//配置口定义5`6`7//
sbitTRX_CE=P2^6;
sbitPWR=P2^5;
sbitMISO=P2^2;//SPI口定义0`1`2`3//
sbitMOSI=P2^3;
sbitSCK=P2^1;
sbitCSN=P2^0;
sbitDR=P2^4;//状态输出口4//
sbitled=P1^0;
/************//*RF寄存器配置*//*************
//0x00,//配置命令//
//0x6C,//CH_NO,配置频段在433.2MHZ
//0x0E,//输出功率为10db,不重发,节电为正常模式
//0x44,//地址宽度设置,为4字节
//0x03,0x03,//接收发送有效数据长度为3字节
//0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率
//0xDE,//CRC充许
//******************************/
/*ucharcodeRFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03,
0xe7,0xe7,0xe7,0xe7,0xde};
*/
ucharRFConf[11]=
{
0x00,//配置命令//
0x4c,//CH_NO,配置频段在423MHZ
0x0C,//输出功率为10db,不重发,节电为正常模式
0x44,//地址宽度设置,为4字节
0x02,0x02,//接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC,//接收地址
0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidSpiWrite(uchardate)//用SPI口写数据至NRF905内//
{
uchari;
for(i=0;i<8;i++)
{
delay
(1);
SCK=0;
MOSI=(date&0x80);
date<<=1;
delay
(1);
SCK=1;
delay
(1);
SCK=0;
}
SCK=0;
}
voidTxPacket(void)
{
//TXEN=1;
CSN=0;
SpiWrite(0x22);//写发送地址,后面跟4字节地址//
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
CSN=1;
delay
(1);
CSN=0;
SpiWrite(0x20);//写发送数据命令,后面跟三字节数据//
SpiWrite(0x01);
SpiWrite(0x02);
//SpiWrite(0x04);
CSN=1;
delay
(1);
TRX_CE=1;//使能发射模式//
delay
(1);//等带发送完成//
led=~led;
//while(!
DR);//在非屏蔽状态下,只能发射一次
TRX_CE=0;
//led=~led;//加上led后,对接收产生了一定的影响,
//while(!
DR);//有时多接收一次的数据
}
voidIni_System(void)
{//初始化配置寄存器//
uchari;
//delay
(1);
CSN=1;
SCK=0;
DR=0;
PWR=1;//进入掉电模式
TRX_CE=0;
TXEN=0;
delay
(1);
CSN=0;//进入SIP模式
for(i=0;i<11;i++)
{
SpiWrite(RFConf[i]);//设置配置寄存器
}
CSN=1;//关闭SPI,进入发射状态
//PWR=1;
TRX_CE=1;//CE,EN同时为1,为发送模式
TXEN=1;
}
voidmain(void)
{
led=1;
Ini_System();//设置配置,并进入发射模式
//PWR=1;//进入掉电模式
while
(1)
{
TxPacket();//发送数据
led=~led;
DR=0;
}
}
接收部分
#include
#defineuintunsignedint
#defineucharunsignedchar
bitlcdbit;
sbitTXEN=P2^7;//配置口定义7`6`5//
sbitTRX_CE=P2^6;
sbitPWR=P2^5;
sbitMISO=P2^2;//SPI口定义0`1`2`3//
sbitMOSI=P2^3;
sbitSCK=P2^1;
sbitCSN=P2^0;
sbitDR=P2^4;//状态输出口4//
sbitled=P1^0;
/************//*RF寄存器配置*//*************
//0x00,//配置命令//
//0x6C,//CH_NO,配置频段在433.2MHZ
//0x0E,//输出功率为10db,不重发,节电为正常模式
//0x44,//地址宽度设置,为4字节
//0x03,0x03,//接收发送有效数据长度为3字节
//0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率
//0xDE,//CRC充许
//******************************/
/*ucharcodeRFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03,
0xe7,0xe7,0xe7,0xe7,0xde};
*/
ucharRFConf[11]={//配置命令//
0x00,0x4c,0x0c,0x44,0x02,0x02,
0xcc,0xcc,0xcc,0xcc,0x58//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
ucharTxRxBuffer[2];
uchardate;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidSpiWrite(unsignedchardate)//用SPI口写数据至NRF905内//
{
uchari;
for(i=0;i<8;i++)
{
delay
(1);
SCK=0;
MOSI=(date&0x80);
date<<=1;
delay
(1);
SCK=1;
delay
(1);
SCK=0;
}
SCK=0;
}
unsignedcharSpiRead(void)//from905readdata//
{
uchari;
for(i=0;i<8;i++)
{
date<<=1;
SCK=0;
delay
(1);
date|=MISO;
SCK=1;
delay
(1);
}
SCK=0;
return(date);
}
voidRxPacket(void)//接收数据包//
{
uchari;
//while(DR)
for(i=0;i<2;i++)
{
//led=~led;
TxRxBuffer[i]=SpiRead();
//i++;
}
}
voidWait_Rec_Packet(void)//等待接收数据包//
{
//uchartemp;
//PWR=1;
TXEN=0;//接收模式
TRX_CE=1;
delay
(2);
while(!
DR)
{delay(10);
//if(DR)//数据接收成功
{
led=~led;
TRX_CE=0;//如果数据准备好,则进入待机模式,以便SPI口操作
CSN=0;
delay
(1);
SpiWrite(0x24);//读nRF905所接受到的数据
RxPacket();//保存数据
CSN=1;
delay(10);
TRX_CE=1;
/*temp=TxRxBuffer[0]+TxRxBuffer[1]+TxRxBuffer[2];
if(temp==0x07)
{
lcdbit=!
lcdbit;//lcdbit=0
}*/
break;
}
}
}
voidIni_System(void)//初始化配置寄存器//
{
uchari;
//lcdbit=1;
CSN=1;
SCK=0;
DR=0;
PWR=1;//进入掉电模式
TRX_CE=0;
TXEN=0;
delay
(1);
CSN=0;//进入SIP模式
for(i=0;i<11;i++)
{
SpiWrite(RFConf[i]);//设置配置寄存器
}
CSN=1;//关闭SPI,进入接收状态
PWR=1;
//TRX_CE=1;
//TXEN=0;
}
voidmain(void)
{
P0=0x00;
led=1;
Ini_System();//设置配置,并进入接收模式(收)
PWR=1;//进入掉电模式
while
(1)
{
Wait_Rec_Packet();//等待接收完成,保存完接收数据(保存数据+地址)
//CSN=0;
P0=TxRxBuffer[0];
delay(600);
P0=TxRxBuffer[1];
delay(600);
P0=TxRxBuffer[2];
delay(600);
//CSN=1;
}
}
程序经本人测试后没太大问题,如要深入研究,本人附加详细资料,希望对您有所帮助。
附加资料
基于nRF905模块的AT89S单片机无线收发系统设计
管脚名称管脚功能说明
1VCC电源电源+3.3~3.6VDC
2TX_EN数字输入工作模式选择
3TRX_CE数字输入使能芯片发射或接收
4PWR_UP数字输入芯片上电
5uCLK时钟输出(未使用)
6CD数字输出载波检测
7AM数字输出地址匹配
8DR数字输出接收或发射数据完成
9MISOSPI接口SPI输出
10MOSISPI接口SPI输入
11SCKSPI时钟SPI时钟
12CSNSPI使能SPI使能
13、14GND地接地
下面为典型的nRF905模块数据发送流程[3]:
(1)当微控制器要发送数据时,将接收机的地址和发
送数据通过SPI接口传输给nRF905模块;
(2)微控制器设置TRX_CE和TX_EN管脚同时置为
高电平,启动发送端的nRF905模块为发送模式;
(3)发送端的nRF905模块发送过程处理:
a)射频寄存器开启;
b)数据打包(加字头和CRC校验码);
c)数据包发送;
d)当数据包发送结束,将数据发送完成管脚(DR管脚)
置为高电平;
(4)如果AUTO_RETRAN被设置为高,nRF905模块
将连续地发送数据包,直到TRX_CE被设置为低;
(5)TRX_CE被设置为低时,nRF905模块数据包发送
过程结束并回到待机模式。
AT89S单片机控制nRF905模块数据发送流程图如图3
所示。
下面为典型的nRF905模块数据接收流程[4]:
(1)微控制器控制TRX_CE为高电平、TX_EN为低电
平,nRF905模块进入接收模式;
(2)650us后,nRF905模块监测空中的信息,等待接
收数据;
(3)当nRF905模块检测到与接收频率相同的载波时,
设置载波检测管脚(CD管脚)为高电平;
(4)当nRF905模块接收到有效的地址时,设置地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nrf905 资料 中文