无线收发模块——NRF24L01

article/2025/9/21 2:31:18

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通道为CHANALSPI_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 指令由命令字节和数据字节两部分组成。
在这里插入图片描述
在这里插入图片描述

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


http://chatgpt.dhexx.cn/article/yeIiKMtP.shtml

相关文章

分布式集群脑裂问题

Zookeeper集群"脑裂"问题 - 运维总结 在分布式集群的脑裂问题中,zookeeper脑裂是一个经典的例子。 在zookeeper集群中,有一个leader和多个follower(observer不参与选举,可以忽略),leader通过周…

分布式脑裂问题

"脑裂"定义 脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤…

Redis常见问题——脑裂问题

文章目录 背景一、脑裂问题产生二、选举完成三、总结四、解决方法 背景 脑裂问题:有三台服务器一台主服务器,两台从服务器,还有一个哨兵(哨兵就相当于一个代码段,不参与实际业务) 一、脑裂问题产生 解释一…

Redis脑裂现象

Redis脑裂现象 什么是Redis的脑裂现象 当Redis主从集群环境出现两个主节点为客户端提供服务,这时客户端请求命令可能会发生数据丢失的情况。 脑裂出现的场景 场景一 主从哨兵集群中如果当发生主从集群切换时,那么一定是超过预设quorum数量的哨兵和主…

redis集群(主从)脑裂及解决方案

什么是redis的集群脑裂? redis的集群脑裂是指因为网络问题,导致redis master节点跟redis slave节点和sentinel集群处于不同的网络分区,此时因为sentinel集群无法感知到master的存在,所以将slave节点提升为master节点。此时存在两个…

redis脑裂

脑裂:在主从集群中,同时有两个主节点他们都能接收写请求。而脑裂最直接影响的就是客户端不知道往哪个主节点写入数据,结果就是不同的客户端往不同的主节点写入数据。而且严重的会导致数据丢失。 为什么会发生脑裂? 1.确认是不是数…

【集群】脑裂是什么?Zookeeper是如何解决的?

文章目录 什么是脑裂Zookeeper集群中的脑裂场景过半机制 什么是脑裂 脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么…

PXC脑裂问题分析与解决

前言 在使用PXC架构做mysql集群时,线上出现过一次PXC脑裂的故障,通过问题排查,分析与定位,最终针对这个问题以及解决方法做一次记录 脑裂现象表现 1、产品访问MySQL,出现数据不一致的情况(脑裂后一个集群分裂成两个独立的集群,如PXC前置是通过LVS架构访问,当VIP发生…

keepalived脑裂现象

Keepealived最常见的问题是会出现脑裂现象: Master一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到master主机发送过来的心跳消息(也就是vrrp报文),backup这时候会立即抢占mas…

zookeeper的脑裂问题

关于集群中的"脑裂"问题,不清楚的可以看这里(https://www.cnblogs.com/kevingrace/p/7205846.html),下面重点说下 Zookeeper 脑裂问题的处理办法。ZooKeeper 是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核&…

什么是脑裂问题

所谓脑裂问题就是在多机热备的高可用系统中,当两个结点心跳突然断开,纠纷列为两个独立的个体,由于互相失去联系,都认为对方出现了故障,因此都会争抢对方的资源,这就是脑裂问题 当从节点们发现和主节点连接不…

集群脑裂问题分析

1.什么是集群脑裂 集群的脑裂通常是发生在集群中部分节点之间不可达而引起的(或者因为节点请求压力较大,导致其他节点与该节点的心跳检测不可用)。当上述情况发生时,不同分裂的小集群会自主的选择出master节点,造成原…

Redis中的常见问题(穿透、雪崩、脑裂)

文章目录 1.Redis的缓存穿透2.Redis缓存雪崩的问题3.Redis的脑裂问题 1.Redis的缓存穿透 2.Redis缓存雪崩的问题 3.Redis的脑裂问题 客户端向主服务器写入了数据 但是主服务器还没有来得及同步的情况下 主服务器死了 那么这个时候就会选举新的主服务器 原来的主服务器在一段时间…

脑裂是什么,zk是如何解决脑裂问题的

什么是脑裂 脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。 脑裂…

堆叠脑裂

堆叠脑裂 一、什么是堆叠脑裂二、堆叠脑裂的危害三、如何解决堆叠脑裂四、DAD是如何工作的五、DAD恢复机制:六、DAD检测方式:1、 业务口直连检测方式2、Eth-Trunk口代理检测方式3、管理网口检测方式4、堆叠端口检测方式 一、什么是堆叠脑裂 堆叠建立后&…

Redis 的脑裂现象和解决方案

Redis 中的脑裂是什么? 从名字分析,脑裂现象就是大脑裂开了,一个人如果有两个大脑,就出现了两个决策者,此时身体就不知道该听谁的了,势必会造成混乱。 对应到 Redis 上,就是指在主从集群中&am…

Redis脑裂现象及解决方案

Redis脑裂现象及解决方案 什么是Redis的脑裂现象 当Redis主从集群环境出现两个主节点为客户端提供服务,这时客户端请求命令可能会发生数据丢失的情况。 脑裂出现的场景 场景一 主从哨兵集群中如果当发生主从集群切换时,那么一定是超过预设quorum数量…

分布式系统的“脑裂”到底是个什么玩意?

目前大多数项目都在往分布式上发展,一旦系统采用分布式系统,便会引入更多复杂场景和解决方案。比如,当你在系统中使用了Elasticsearch、ZooKeeper集群时,你是否了解过集群的“脑裂”现象?又是否知道它们是如何解决脑裂…

JDBC编程--jdbc基本操作步骤

JDBC即java数据库互连,是java语言和数据库之间独立于数据库的连接标准API,JDBC从根本上来说是一种规范,具体的实现需要依赖于具体数据库生产商提供jar包【驱动】,提供了统一的接口用于访问不同的底层数据库,允许使用ja…

【Java】JDBC连接数据库详细步骤(面试必备)

系列文章目录 本文旨在详细讲解使用JDBC连接数据库的六个步骤 其中第一步注册驱动的讲解链接:JDBC—MySQL以类加载的方式注册驱动(反射)_m0_56164356的博客-CSDN博客 // 1、注册驱动// 2、获取连接// 3、获取数据库操作对象// 4、执行sql语句…