NRF24L01学习笔记要点Word格式文档下载.docx
《NRF24L01学习笔记要点Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《NRF24L01学习笔记要点Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
CE引脚电平
FIFO寄存器状态
接收模式
1
-
发送模式
数据在TXFIFO寄存器中
1→0
停留在发送模式,直至数据发送完
待机模式II
TXFIFO为空
待机模式I
无数据传输
掉电模式
-
PWR_UP和PRIM_RX在配置寄存器(CONFIG)中设置,配置寄存器如下:
配置寄存器:
寄存器地址:
00名称:
CONFIG
CONFIG配置寄存器(配置NRF24L01一些工作方式)
第7位
第6位(MASK_RX_DR)
第5位(MASK_TX_DS)
第4位(MASK_MAX_RT)
第3位(EN_CRC)
第2位(CRCO)
第1位(PWR_UP)
第0位(PRIM_RX)
保留(未用)
(MASK_RX_DR)可屏蔽中断RX_RD。
1:
IRQ引脚不显示RX_RD中断
0:
RX_RD中断产生时IRQ引脚电平为低
(MASK_TX_DS)可屏蔽中断TX_DS。
IRQ引脚不显示TX_DS中断
TX_DS中断产生时IRQ引脚电平为低
(MASK_MAX_
RT)可屏蔽中断MAX_RT。
MAX_RT中断产生时IRQ引脚电平为低
(EN_CRC)CRC使能。
如果EN_AA中任意一位为高则
EN_CRC强迫为高。
(CRCO)CRC模式。
‘0’-8位CRC校验
‘1’-16位CRC校验
(PWR_UP)NRF24L01上电掉电模式设置位。
1:
上电0:
掉电
(PRIM_RX)NRF24L01接收、发射模式设置位。
1:
接收模式0:
发射模式
STATUS状态寄存器(反应nrf24l01当前工作的各种状态)
第6位(RX_DR)
第5位(TX_DS)
第4位
第3位
第2位
第1位
第0位
(RX_DR)接收数据中断位。
当接收到有效数据后置1。
写‘1’清除中断
(TX_DS)数据发送完成中断。
当数据发送完成后产生中断。
如果工作在自动应答模式下,只有当接收到应答信号后此位置1。
写‘1’清除中断。
(MAX_RT)达到最多次重发中断。
写‘1’清除中断。
如果MAX_RT中断产生则必须清除后系统才能进行通讯
(RX_P_NO)即接收数据通道号位。
000-101:
数据通道号、110:
未使用、111:
RXFIFO寄存器为空
(TX_FULL)TXFIFO寄存器满标志。
TXFIFO寄存器满。
0:
TXFIFO寄存器未满,有可用空间。
5.1收发模式
收发模式有EnhancedShockBurstTM收发模式、ShockBurstTM收
发模式和直接收发模式三种,收发模式由器件配置字决定,具体配置
将在器件配置部分详细介绍。
5.1.1EnhancedShockBurstTM收发模式
EnhancedShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。
与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:
尽量节能;
低的系统费用(低速微处理器也能进行高速射频发射);
数据在空中停留时间短,抗干扰性高。
EnhancedShockBurstTM技术同时也减小了整个系统的平均工作电流。
在EnhancedShockBurstTM收发模式下,NRF24L01自动处理字头和CRC校验码。
在接收数据时,自动把字头和CRC校验码移去。
在发送数据时,自动加上字头和CRC校验码,在发送模式下,置CE为高,至少10us,将时发送过程完成后。
5.1.1.1EnhancedShockBurstTM发射流程
A.把接收机的地址和要发送的数据按时序送入NRF24L01;
B.配置CONFIG寄存器,使之进入发送模式。
C.微控制器把CE置高(至少10us),激发NRF24L01进行EnhancedShockBurstTM发射;
D.N24L01的EnhancedShockBurstTM发射
(1)给射频前端供电;
(2)射频数据打包(加字头、CRC校验码);
(3)高速发射数据包;
(4)发射完成,NRF24L01进入空闲状态。
4.1.1.2EnhancedShockBurstTM接收流程
A.配置本机地址和要接收的数据包大小;
B.配置CONFIG寄存器,使之进入接收模式,把CE置高。
C.130us后,NRF24L01进入监视状态,等待数据包的到来;
D.当接收到正确的数据包(正确的地址和CRC校验码),NRF2401自动把字
头、地址和CRC校验位移去;
E.NRF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起微
控制器中断)通知微控制器;
F.微控制器把数据从NewMsg_RF2401读出;
G.所有数据读取完毕后,可以清除STATUS寄存器。
NRF2401可以进入
四种主要的模式之一。
5.1.2ShockBurstTM收发模式
ShockBurstTM收发模式可以与Nrf2401a,02,E1及E2兼容,具体表述前
看本公司的N-RF2401文档。
5.2空闲模式
NRF24L01的空闲模式是为了减小平均工作电流而设计,其最大的优点是,实现节能的同时,缩短芯片的起动时间。
在空闲模式下,部分片内晶振仍在工作,此时的工作电流跟外部晶振的频率有关。
5.4关机模式
在关机模式下,为了得到最小的工作电流,一般此时的工作电流为900nA左右。
关机模式下,配置字的内容也会被保持在NRF2401片内,这是该模式与断电状态最大的区别。
5.5增强型的ShockBurstTM模式
增强型ShockBurstTM典型的双链方式为:
发送方要求终端设备在接收到数据后有应答信号,以便发送方检测有无数据丢失,一旦丢失则重发数据。
重发数据设置在地址为04的数据重发设置寄存器用于设置其重发次数及设置在未收到应答信号后等待重发的时间。
nRF24L01在接收模式下可以接收6路不同通道的数据,见下图。
每一个数据通道使用不同的地址,但
是共用相同的频道。
也就是说6个不同的nRF24L01设置为发送模式后可以与同一个设置为接收模式的
nRF24L01进行通讯,而设置为接收模式的nRF24L01可以对这6个发射端进行识别。
数据通道0是唯一
的一个可以配置为40位自身地址的数据通道。
1~5数据通道都为8位自身地址和32位公用地址。
所有的
数据通道都可以设置为增强型ShockBurst模式。
NRF24L01在确认收到数据后记录地址,并以此地址为目标地址发送应答信号,在发送端,数据通道0被用作接收应答信号,因此属通道0的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号。
当MCU控制NRF24L01发送数据时,NRF24L01就会启动发送数据,发送完后NRF24L01就会转到接收模式并等待终端的应答信号。
如果没有收到应答信号,NRF24L01就会重发数据包,知道收到应答信号,或达到重发次数寄存器设定的最大值为止,如果重发次数超过了设定值则产生MAX_RT(最大重发次数中断)(应该在该中断没有被屏蔽的情况下的时候才会发生)
只要收到确认信号,nRF24L01就认为最后一包数据已经发送成功(接收方已经收到数据),把TXFIFO
中的数据清除掉并产生TX_DS中断(数据发送完中断)(IRQ引脚置高)。
增强型ShockBurstTM发送模式:
1、配置寄存器位PRIM_RX为低
2、当MCU有数据要发送时,接收节点地址(TX_ADDR)和有效数据(TX_PLD)通过SPI接口写入
nRF24L01。
发送数据的长度以字节计数从MCU写入TXFIFO。
当CSN为低时数据被不断的写入。
发送端发送完数据后,将通道0设置为接收模式来接收应答信号,其接收地址(RX_ADDR_P0)与接
收端地址(TX_ADDR)相同。
例:
在上图中数据通道5的发送端(TX5)及接收端(RX)地址设置如下:
TX5:
TX_ADDR=0xB3B4B5B605
RX_ADDR_P0=0xB3B4B5B605
RX:
RX_ADDR_P5=0xB3B4B5B605
3、设置CE为高,启动发射。
CE高电平持续时间最小为10us。
4、nRF24L01ShockBurstTM模式:
无线系统上电
启动内部16MHz时钟
无线发送数据打包(见数据包描述)
高速发送数据(由MCU设定为1Mbps或2Mbps)
5、如果启动了自动应答模式(自动重发计数器不等于0,ENAA_P0=1),无线芯片立即进入接收模式。
如果在有效应答时间范围内收到应答信号,则认为数据成功发送到了接收端,此时状态寄存器的
TX_DS位置高并把数据从TXFIFO中清除掉。
如果在设定时间范围内没有接收到应答信号,则重
新发送数据。
如果自动重发计数器(ARC_CNT)溢出(超过了编程设定的值),则状态寄存器的
MAX_RT位置高。
不清除TXFIFO中的数据。
当MAX_RT或TX_DS为高电平时IRQ引脚产生中
断。
IRQ中断通过写状态寄存器来复位(见中断章节)。
如果重发次数在达到设定的最大重发次数
时还没有收到应答信号的话,在MAX_RX中断清除之前不会重发数据包。
数据包丢失计数器
(PLOS_CNT)在每次产生MAX_RT中断后加一。
也就是说:
重发计数器ARC_CNT计算重发数据
包次数,PLOS_CNT计算在达到最大允许重发次数时仍没有发送成功的数据包个数。
6、如果CE置低,则系统进入待机模式I。
如果不设置CE为低,则系统会发送TXFIFO寄存器中下
一包数据。
如果TXFIFO寄存器为空并且CE为高则系统进入待机模式II.
7、如果系统在待机模式II,当CE置低后系统立即进入待机模式I.
增强型ShockBurstTM接收模式:
1、ShockBurstTM接收模式是通过设置寄存器中PRIM_RX位为高来选择的。
准备接收数据的通道必须
被使能(EN_RXADDR寄存器),所有工作在增强型ShockBurstTM模式下的数据通道的自动应答功
能是由(EN_AA寄存器)来使能的,有效数据宽度是由RX_PW_Px寄存器来设置的。
地址的建立过
程见增强型ShockBurstTM发送章节。
2、接收模式由设置CE为高来启动。
3、130us后nRF24L01开始检测空中信息。
4、接收到有效的数据包后(地址匹配、CRC检验正确),数据存储在RX_FIFO中,同时RX_DR位
置高,并产生中断。
状态寄存器中RX_P_NO位显示数据是由哪个通道接收到的。
5、如果使能自动确认信号,则发送确认信号。
6、MCU设置CE脚为低,进入待机模式I(低功耗模式)。
7、MCU将数据以合适的速率通过SPI口将数据读出。
8、芯片准备好进入发送模式、接收模式或掉电模式。
两种数据双方向的通讯方式:
如果想要数据在双方向上通讯,PRIM_RX寄存器必须紧随芯片工作模式的变化而变化。
处理器必须保证PTX和PRX端的同步性。
在RX_FIFO和TX_FIFO寄存器中可能同时存有数据。
数据通道:
nRF24L01配置为接收模式时可以接收6路不同地址相同频率的数据。
每个数据通道拥有自己的地址
并且可以通过寄存器来进行分别配置。
数据通道是通过寄存器EN_RXADDR来设置的,默认状态下只有数据通道0和数据通道1是开启状
态的。
每一个数据通道的地址是通过寄存器RX_ADDR_Px来配置的。
通常情况下不允许不同的数据通道设
置完全相同的地址。
数据通道0有40位可配置地址。
数据通道1-5的地址为:
32位共用地址+各自的地址(最低字节)。
下图所示的是数据通道1-5的地址设置方法举例。
所有数据通道可以设置为多达40位,但是1-5数据通
道的最低位必须不同。
当从一个数据通道接收到数据,并且此数据通道设置为应答方式的话,则nRF24L01在收到数据后
产生应答信号,此应答信号的目标地址为接收通道地址。
寄存器配置有些是针对所有数据通道的,有些则是针对个别的。
如下设置举例是针对所有数据通道的:
●CRC使能/禁止
●CRC计算
●接收地址宽度
●频道设置
●无线数据通信速率
●LNA增益
●射频输出功率
数据通道1-5的配置方式
六、NRF24L01的SPI配置
SPI指令设置
用于SPI接口的常用命令见下表。
当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN的由高到低的转换开始
表6-1串行接口指令设置
SPI接口指令
指令名称
指令格式
操作
R_REGISTER
000AAAAA
读配置寄存器。
AAAAA指出读操作的寄存器地址
W_REGISTER
001AAAAA
写配置寄存器。
AAAAA指出写操作的寄存器地址只能在掉电模式或待机模式下操作
R_RX_PAYLOAD
01100001
读RX有效数据:
1—32字节。
读操作全部从字节0开始。
当读RX有效数据完成后,FIFO寄存器中有效数据被清除应用于接收模式下
W_RX_PAYLOAD
10100000
写TX有效数据:
1-32字节。
写操作从字节0开始。
应用于发射模式下
FLUSH_TX
11100001
清除TXFIFO寄存器,应用于发生模式下。
FLUSH_RX
11100010
清除RXFIFO寄存器,应用于接收模式下。
在传输应答信号过程中不应执行此指令。
也就是说,若传输应答信号过程中执行此指令的话将使得应答信号不能被完整的传输。
REUSE_TX_PL
11100011
应用于发射端。
重新使用上一包发射的有效数据。
当CE=1时,数据被不断重新发射。
在发射数据包过程中必须禁止数据包重利用功能
NOP
11111111
空操作。
可用来读状态寄存器。
以下是寄存器内容及说明:
(在NRF24L01模块说明书中具体的以后有时间再补)
C语言复合赋值语句:
“a=a+b;
”可写成“a+=b;
”而“a=a*(b+c);
”可写成“a*=b+c;
”
uchar|=MISO;
就是uchar=uchar|MISO;
NRF24L01的接口可以任选在单片机的P1口或P3口,但在本人单片机实验板上(实验板型号是CCDZ-B)P2口上数据传输不出去,或是很少情况下能够传出去具体原因不详。
根据其有一份说明NRF24L01若要接在P0口上要接一个10K的上拉电阻,似乎在单片机四排IO口中数P0的驱动能力和带负载能力最强!
本人猜测这样做是为了保护无线数传模块和单片机!
具体的要翻阅单片机IO口驱动能力,和其最大输出输入电流了!
NRF24L01Rx和Tx初始化配置说明
Tx模式初始化过程
1)写Tx节点的地址TX_ADDR
2)写Rx节点的地址(主要是为了使能AutoAck)RX_ADDR_P0
3)使能AUTOACKEN_AA
4)使能PIPE0EN_RXADDR
5)配置自动重发次数SETUP_RETR
6)选择通信频率RF_CH
7)配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP
8)选择通道0有效数据宽度Rx_Pw_P0
9)配置24L01的基本参数以及切换工作模式CONFIG。
详细说明:
1.写Tx节点的地址TX_ADDRSPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
2.写Rx节点的地址(主要是为了使能AutoAck)RX_ADDR_P0SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
为了应答接收设备,接收通道0地址和发送地址相同
3.使能AUTOACKEN_AASPI_RW_Reg(WRITE_REG+EN_AA,0x01);
该函数为写寄存器函数有两个参数第一个参数是写寄存器指令EN_AA是自动应答功能寄存器地址该寄存器为8位可读写寄存器0-5为ENAA_P0-ENAA_P5数据通道自动应答允许1为允许0为不允许6-7位为保留位未用默认为0第二个参数即是要向寄存器写入的数值此处为0x01即是允许接收通道0自动应答其他的都不能
4.使能PIPE0EN_RXADDR
详细说明:
1.写Tx节点的地址TX_ADDR用函数SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
函数有三个参数第一个是寄存器指令参数给出写寄存器指令并且向TX_ADDR寄存器写入TX_ADDR寄存器是发送地址寄存器四十位寄存器装入发送地址的在增强型ShockBurstTM模式下RX_ADDR_P0与此地址相等。
TX_ADDRESS是一个要写入的发送地址通常设置为一个数组其长度即是地址的长度长度指定又TX_ADR_WIDTH指定通常为40位地址即5个16进制数组成
2.写Rx节点的地址(主要是为了使能AutoAck)RX_ADDR_P0用函数SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
该函数有三个参数第一个WRITE_REG+RX_ADDR_P0是写寄存器命令然后就是频道0接收数据地址(RX_ADDR_P0)
3.使能AUTOACKEN_AA用函数SPI_RW_Reg(WRITE_REG+EN_AA,0x01);
该函数为写寄存器函数有两个参数第一个参数是写寄存器指令EN_AA是自动应答功能寄存器地址该寄存器为8位可读写寄存器0-5为ENAA_P0-ENAA_P5数据通道自动应答允许1为允许0为不允许6-7位为保留位未用默认为0第二个参数即是要向寄存器写入的数值此处为0x01即是允许接收通道0自动应答其他的都不能
4.使能PIPE0EN_RXADDR用函数Write_Reg(WRITE_REG+EN_RXADDR,0x01);
该函数为写寄存器函数EN_RXADDR为接收地址允许寄存器是8位的可读写寄存器0-5为ERX_P0-ERX_P5接收数据通道允许1为允许0为不允许6-7位为保留位未用默认为0复位值0、1通道为1即允许此处为0x01即允许通道0接收地址即允许那个通道接收数据
5.配置自动重发次数SETUP_RETR用函数SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x0a);
主要操作自动重发配置寄存器SETUP_RETR该寄存器为8位寄存器0—3位为自动重发数值设置位自动重发计数‘0000’-禁止自动重发‘0000’-自动重发一次……‘0000’-自动重发15次4—7位为自动重发延时设置位各位逻辑关系如下自动重发延时‘0000’-等待250+86us‘0001’-等待500+86us‘0010’-等待750+86us……‘1111’-等待4000+86us(延时时间是指一包数据发送完成到下一包数据开始发射之间的时间间隔)
6.选择通信频率RF_CH函数Write_Reg(WRITE_REG+RF_CH,40);
RF_CH工作频率设置寄存器8位0--6位可用第八位为保留位7位值可以设置128个频段实际是125个频段从2400MH到2525MH值可以任意设定但是接收发送必须一致
7.配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP函数
Write_Reg(WRITE_REG+RF_SETUP,0x07);
RF_SETUP为发射参数设置寄存器8位