当前位置: 代码网 > 服务器>网络>网络协议 > 无线收发模块——NRF24L01

无线收发模块——NRF24L01

2024年08月02日 网络协议 我要评论
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。有着极低的电流消耗。nRF24L01与5V单片机的连接通过SPI接口进行通讯,输出功率频道选择和协议的设置可以通过SPI 接口进行设置,几乎可以连接到各种单片机芯片,并完成无线数据传送工作。

1、什么是nrf24l01

nrf24l01是由nordic生产的工作在2.4ghz~2.5ghz的ism 频段的单片无线收发器芯片。有着极低的电流消耗。

nrf24l01与5v单片机的连接通过spi接口进行通讯,输出功率频道选择和协议的设置可以通过spi 接口进行设置,几乎可以连接到各种单片机芯片,并完成无线数据传送工作。

在这里插入图片描述

2、接口电路

在这里插入图片描述
引脚说明

通过以下六个引脚,便可实现模块的所有功能:
(1)mosi:主器件数据输出,从器件数据输入
(2)miso:主器件数据输入,从器件数据输出
(3)sclk:时钟信号,由主器件产生
(4) csn :从器件使能信号(片选线)
(5)ce:芯片使能,使能器件的发送模式或者接收模式。高电平有效,在发送和接收过程中都要将这个引脚拉高,
(6)irq:中断信号线,中断输出。低电平有效,中断时变为低电平,在以下三种情况变低:tx fifo 发完并且收到ack(使能ack情况下)、rx fifo收到数据、达到最大重发次数。
(7)vcc:电压范围1.9v~3.6v,超过3.6v将会烧毁模块。一般电压3.3v左右。除电源vcc和接地端,其余脚都可以直接和普通的5v单片机io口直接相连,无需电平转换。

通过 spi 接口,可激活在数据寄存器 fifo 中的数据,或者通过 spi 命令访问寄存器。
在待机或掉电模式下,单片机通过 spi 接口配置模块;
在发射或接收模式下,单片机通过 spi 接口接收或发射数据。

3、工作模式:

工作模式由 ce 和 pwr_up (config寄存器第1位)、 prim_rx(config寄存器第0位) 两寄存器共同操纵:
在这里插入图片描述
也可以理解为nrf2401有工作模式有四种:
收发模式,配置模式,空闲模式,关机模式

收发模式(三种)
enhanced shockbursttm收发模式
shockbursttm收发模式
直接收发模式
(只有enhanced shockbursttm收发模式支持自动ack和自动重发)

enhanced shockbursttm收发模式(常用)
nrf24l01自动处理字头和crc校验码。在接收数据时,自动把字头和crc校验码移去。在发送数据时,自动加上字头和crc校验码。
shockbursttm收发模式
发送方要求终端设备在接收到数据后有应答信号,以便发送方检测有无数据丢失,一旦丢失则重发数据。
直接收发模式
和传统的射频器件一样。数据必须是在传输频率为1mbps、250kbps 或者低频状态进行设定,以保证接收机能探测到信号。


在接收模式下,最多可以接收6路不同的数据。每一个数据通道使用不同的地址,但是共用相同的频道。也就是说6 个不同的nrf24l01设置为发送模式后可以与同一个设置为接收模式的nrf24l01 进行通讯,而设置为接收模式的nrf24l01可以对这6个发射端进行识别。

数据通道0是唯一的一个可以配置为40位自身地址的数据通道;而数据通道1~5 都为8位自身地址和32位公用地址(由通道1设置)。所有的数据通道都可以设置为enhanced shockburst 模式。

在接收端,确认收到数据后记录地址,并以此地址为目标地址发送应答信号。在发送端,通道0被用作接收应答信号,因此通道0的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号。


配置模式 15 字节的配置字会在配置模式时下载到nrf2401 中,ce为0才能配置。
空闲模式(睡眠/待机模式):用来减小平均电流的损耗,在该模式下,晶体振荡器处于部分工作状态,电流损耗由晶体振荡器频率决定。在待机模式期间,寄存器配置字内容保持不变。
掉电模式:nrf20l01 各功能关闭,保持电流消耗最小。该模式下,nrf24l01 停止工作,当设备达不到最小的电流损耗或最大电量枯竭时,设备就会进入掉电模式。

4、发送

enhanced shockbursttm发送流程
1.把地址和要发送的数据按时序送入nrf24l01;
2.配置config寄存器,使之进入发送模式;
3.微控制器把ce置高(至少10us),激发enhanced shockbursttm发射;
4. 发射完成,nrf24l01进入空闲状态。

初始化nrf24l01到tx模式
1) ce置低
2) 写tx节点的地址
3) 写rx节点的地址,使能自动应答
4) 使能通道x的自动应答
5) 使能通道x的接收地址
6) 设置自动重发间隔时间和最大自动重发次数
7) 设置rf通道
8) 配置tx发射参数(低噪放大器增益、发射功率、无线速率)
9) 配置基本工作模式的参数
10)ce拉高,进入发送模式,注意ce要拉高一段时间才进入发送模式

/**
  * @brief  配置发送模式
  * @param  无
  * @retval 无
  */
void nrf_tx_mode(void)
{  
	nrf_ce_low();		

   spi_nrf_writebuf(nrf_write_reg+tx_addr,tx_address,tx_adr_width);    //写tx节点地址 

   spi_nrf_writebuf(nrf_write_reg+rx_addr_p0,rx_address,rx_adr_width); //设置rx节点地址,主要为了使能ack   

   spi_nrf_writereg(nrf_write_reg+en_aa,0x01);     //使能通道0的自动应答    

   spi_nrf_writereg(nrf_write_reg+en_rxaddr,0x01); //使能通道0的接收地址  

   spi_nrf_writereg(nrf_write_reg+setup_retr,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次

   spi_nrf_writereg(nrf_write_reg+rf_ch,chanal);       //设置rf通道为chanal

   spi_nrf_writereg(nrf_write_reg+rf_setup,0x07);  //设置tx发射参数,0db增益,2mbps,低噪声增益开启   
	
   spi_nrf_writereg(nrf_write_reg+config,0x0e);    //配置基本工作模式的参数;pwr_up,en_crc,16bit_crc,发射模式,开启所有中断

/*ce拉高,进入发送模式*/	
  nrf_ce_high();
    delay(0xffff); //ce要拉高一段时间才进入发送模式
}

5、接收

enhanced shockbursttm接收流程
1.配置接收地址和要接收的数据包大小;
2.配置config寄存器,使之进入接收模式,把ce置高;
3. 130us后,nrf24lo1进入监视状态,等待数据包的到来;
4.当接收到正确的数据包(正确的地址和crc校验码),nrf2401自动把字头、地址和crc校验位移去;
5.nrf24lo1通过把status寄存器的rx_dr置位(status一般引起微控制器中断)通知微控制器;
6.微控制器把数据从fifo读出(0x61指令);
7.所有数据读取完毕后,可以清除status寄存器。进入四种主要的模式之—。

初始化nrf24l01到rx模式
1) ce置低
2)写rx节点地址
3)使能通道x的自动应答
4)使能通道0的接收地址
5)设置rf通信频率
6)选择通道x的有效数据宽度
7)设置tx发射参数
8)配置基本工作模式的参数
9)ce拉高,进入接收模式

/**
  * @brief  配置并进入接收模式
  * @param  无
  * @retval 无
  */
void nrf_rx_mode(void)

{
	nrf_ce_low();	

   spi_nrf_writebuf(nrf_write_reg+rx_addr_p0,rx_address,rx_adr_width);//写rx节点地址

   spi_nrf_writereg(nrf_write_reg+en_aa,0x01);    //使能通道0的自动应答    

   spi_nrf_writereg(nrf_write_reg+en_rxaddr,0x01);//使能通道0的接收地址    

   spi_nrf_writereg(nrf_write_reg+rf_ch,chanal);      //设置rf通信频率    

   spi_nrf_writereg(nrf_write_reg+rx_pw_p0,rx_pload_width);//选择通道0的有效数据宽度      

   spi_nrf_writereg(nrf_write_reg+rf_setup,0x07); //设置tx发射参数,0db增益,2mbps,低噪声增益开启   

   spi_nrf_writereg(nrf_write_reg+config, 0x0f);  //配置基本工作模式的参数;pwr_up,en_crc,16bit_crc,接收模式 

/*ce拉高,进入接收模式*/	
  nrf_ce_high();

}

此外,还应有系统的初始化,主要有gpio初始化,spi初始化,nrf24l01中断初始化。
在gpio初始化中,需要注意各引脚的工作模式:
spi时钟,设置为复用推挽输出
spi输出引脚(somi),设置为复用推挽输出
spi输入引脚(somo),设置为悬浮输入
cs、ce引脚,使用软件控制,所以直接设置成推挽输出


spi指令
所有的 spi 指令均在当 csn 由低到高开始跳变时执行;从 mosi 写命令的同时, miso实时返回 24l01 的状态值; spi 指令由命令字节和数据字节两部分组成。
在这里插入图片描述
在这里插入图片描述

寄存器内容及说明
在写寄存器之前,一定要进入待机模式或掉电模式。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com