nRF24L01 是一款工作在 2.4~2.5GHz 世界通用 ISM 频段的低功耗单片无线收发器芯片。无线收发器包括:频率发生器、增强型 SchockBurstTM 模式控制器、功率放大器、晶体振荡器、调制器、解调器。输出功率、频道选择和协议的设置可以通过 SPI 接口进行设置。

目录

  • 一、NRF24L01功能特性
  • 二、怎么控制(读写)NRF24L01?
  • 三、总体了解NRF24L01工作模式
  • 四、怎样实现一个NRF24L01发送,另一个就能收到呢?
  • 五、自动应答和自动重发需要注意什么呢?
  • 六、一对一通信比较简单、多对一呢?

一、NRF24L01功能特性

  • 自动应答以及自动重发功能
  • 地址以及CRC检验功能
  • 无线速率:1Mbps/2Mbps
  • SPI接口速率:0~8Mbps
  • 125个可选工作频道

二、怎么控制(读写)NRF24L01?

  1. NRF24L01是通过SPI接口与其通信,通过SPI访问(读/写)内部寄存器达到控制NRF24L01的效果。
  2. NRF24L01的SPI接口最大传输速率10Mbps
  3. 如果想通过SPI读写NRF24L01内部寄存器,那需要符合NRF24L01的指令格式,NRF24L01才能识别发送的指令,指令格式如下:

例如:配置通信信道为40
通信信道寄存器为0x05,所以向NRF24L01的0x05地址写入40,则先发送0x25到NRF24L01,再发送40到NRF24L01即可(0x25 是由 0x20|0x05得到)

注意:写指令前先拉低CSN,写一条指令后拉高CSN。每写一次指令都必须经历”拉低CSN”、”写入指令”、“拉高CSN”三个步骤。

三、总体了解NRF24L01工作模式

NRF24L01是分不同的模式的,比如发送模式、接收模式、待机模式II、待机模式I、掉电模式,特定的模式做特定的事情,且不同模式下功耗也不同。怎么配置NRF24L01的模式呢?通过寄存器和外部引脚配合使其在不同模式下转换,如下图:

掉电模式:在掉电模式下,NRF24L01各功能关闭。功耗最小。

各个模式状态转换图:

四、怎样实现一个NRF24L01发送,另一个就能收到呢?

可以这样理解,有两个NRF24L01模块A和B,模块A发送,模块B来接收:

  1. 首先,模块A和模块B需要在同一信道(频道)
  2. 也需要配置模块A发送数据长度和模块B接收数据长度相等
  3. 然后给模块B配置一个接收地址ADDR_B
  4. 再配置模块A的发送地址(发给谁,就配成谁的接收地址)也为ADDR_B,这样模块A发送数据,模块B就能收到。

实际上模块B配置的接收地址ADDR_B只是它其中的一个接收数据通道的地址,一个模块有6个接收通道,模块B可以同时接收6个模块发来的数据(当然,应该不能同时发送,因为在同一信道(频道)同时发送会有干扰)。
以上就是两个模块通信的简单介绍,这里还可以继续深入了解,NRF24L01在收发数据时,硬件会将要发送的数据按照一定的格式封装成数据包,包括包头、包内容、校验等,这个格式可以不用具体关注,因为只要两个通信的NRF24L01配置相同即可,比如都开启CRC校验。

数据手册中也常提到ShockBurstTM模式和增强型ShockBurstTM模式,要知道这两种模式是说的数据包的处理方式。ShockBurstTM模式可以与Nrf2401/nRF24E1等通信兼容。两种模式的主要区别如下(不是全部区别)

ShockBurstTM 增强型ShockBurstTM
接收数据中断
CRC校验
自动应答 ×
自动重发 ×
可以看到增强型ShockBurstTM可以接收成功时自动应答和发送失败时自动重发,这样会极大的减少MCU工作量。

五、自动应答和自动重发需要注意什么呢?

上面说的,一个模块有6个接收数据通道,分别为通道0、通道1……通道5,当开启自动应答和自动重发时,举例:还是模块A发送数据,模块B接收(他们都开启了自动应答和自动重发功能)

  1. 配置模块B的接收地址为ADDR_B
  2. 配置模块A的发送地址也为ADDR_B
  3. 假设模块A发送数据,模块B接收到了,这时模块B会回复A一个ACK,A就知道发送成功了(若发送完成中断开启,这时会触发中断)。

注意:A是发送模块,应该处于上面讲的工作模式中的发送模式。所以这里有个细节就是当A开启自动应答和自动重传功能时,发送数据完成后会自动切换到接收模式等待接收端回复的ACK。

再注意:模块B回复ACK给模块A,那模块A的哪个接收数据通道接收呢?是数据通道0,所以要想数据通道0接收到ACK,模块A必须在发送数据前,就配置好接收数据通道0的地址,用来接收ACK,那这个地址配置成多少呢?这里NRF24L01就规定,接收端接收到数据后,会以“发送端发送地址”回复ACK,而发送端的发送地址就是接收端的接收地址ADDR_B,所以这几个地址都配置成ADDR_B就可以了,如下:

模块A 模块B
发送地址:ADDR_B 接收地址(某个通道):ADDR_B
数据通道0:ADDR_B

为什么讲要注意NRF24L01发送数据时,数据发送完后会“硬件自动”切换为接收模式呢?
是因为,如果NRF24L01想配合RFX2401C芯片使用的话,RFX2401C是需要TXEN和RXEN两个引脚控制其处于 “发送-功率放大器”还是“接收-低噪声放大器”两个模式,如果将TXEN和RXEN两个管脚接到MCU控制就不太好了,因为MCU只知道配置了NRF24L01为发送模式,但是实际NRF24L01自己会自动切换为接收模式来接收ACK!所以MCU没办法正确控制RFX2401C,只能将它的TXEN和RXEN根据其逻辑接到NRF24L01的引脚上,让NRF24L01自动控制RFX2401C。
通过原理图可看到,TXEN没接到MCU而是接到了NRF24L01的VDD_PA引脚,因为VDD_PA引脚在NRF24L01发送数据时会为高电平,接收数据时为低电平(通过示波器观察)。符合上图的RFX2401C的控制逻辑。

  1. 假设模块A发送数据,模块B没有收到,这时模块A收不到ACK并等待超时,就是重新发送数据,直到超过配置的重发次数。达到最多重发次数后,如果“达到最大重发次数”中断开启了,就会触发中断。(至于怎么开启自动重发、配置哪个寄存器等,在数据手册上可以查到)

六、一对一通信比较简单、多对一呢?

实际应用中,多对一通信的场景也是很多的,但是NRF24L01通过6个接收数据通道来实现1对6,往往不能满足我们的们求,比如我想1对100该怎么实现?
其实一对多或多对一就是想多个模块通信,又不发生干扰,查资料知道可用“跳频”、“设置不同收发地址”、“分时访问”等方法,等测试后再总结。

NRF24L01入门总结相关推荐

  1. NRF24L01P(nrf24l01+)从入门到使用

    目录 NRF24L01+硬件资源 工作模式 接收地址与发送地址的理解 一对一模式(一收一发) 多对一模式(六发一收) 使用ACK自动回复带数据功能 NRF24L01+硬件资源 运行条件: 电压:最小值 ...

  2. STC89C52 STC89LE52 NRF24L01无线 教程 (二)

    原帖地址:http://www.dowellbbs.com/forum.php?mod=viewthread&tid=570&extra=page%3D1 程序下载地址:http:// ...

  3. 基于Arduino单片机的nRF24L01+无线遥控装置设计(爆肝制作)

    目录 前言 一.总体思路 二.硬件介绍 (一)主机 (二)从机 三.电路设计 (一)主机 (二)从机 四.程序代码 (一)主机 (二)从机 五.总结及改进 六.所用到的文献链接 前言 此文章只涉及单片 ...

  4. AD入门学习—原理图的绘制3

    目录 2.4 CAN&24C02及DS18B20温度传感单元的绘制 2.5 USB单元的绘制 2.6 SD卡及TFT单元的绘制 2.7 NRF24L01单元的绘制 2.8 COM口及PS/2接 ...

  5. PCB入门学习—原理图的绘制2

    目录 2.2 TEA5767音频模块的绘制 2.3 ENC28J60以太网模块的绘制 学习目录: 2.2 TEA5767音频模块的绘制 首先有个问题:为什么这个电容放在原理图上怎么移动也对不齐?? 解 ...

  6. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  7. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  8. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  9. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  10. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

最新文章

  1. python 练习题-去重排序与字符串分割
  2. np.meshgrid
  3. 13.7.深入理解jstack日志
  4. entity framework学习笔记
  5. 2021牛客暑期多校训练营7 xay loves trees dfs序 + 主席树
  6. potainer 日志_日志系统落地:制定日志规范
  7. JavaScript字符串方法——持续补充
  8. gels imagej 图片处理_如何用ImageJ分析运动细胞?
  9. jquery操作CSS样式全记录
  10. 5、WPF实现简单计算器-非常适合初学者练习
  11. 清华姚班毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...
  12. Google Data Studio:漂亮,免费,易于使用的数据可视化工具
  13. IO和IO设备和IO指令和IO通道 以及 IO的分类(只要涉及 IO,这4个就绑定在一起都会使用到)
  14. JS,CSS是前端,JAVA PHP ASP是后端,数据库是后端的处理对象,非代表前后底
  15. ES5, ES2015 和 TypeScript 的区别
  16. 理解LINQ预编译查询(Compiled LINQ)
  17. 几大搜索引擎搜索结果页大小的比较
  18. openCv4Android之fitLine中各算法总结
  19. SAS学习——SAS逻辑库
  20. 一元回归及多元回归模型

热门文章

  1. redies集群方案
  2. 怎么把OFD文件转换成PDF文件?
  3. 【电脑使用】如何快速给PDF添加书签
  4. 2022年 接口测试高频面试题及答案
  5. 为什么材料专业要劝退?材料专业就找不到好工作吗?
  6. 选型宝访谈:如何用好移动报销云平台,解放全员工作效率?
  7. JupyterNotebook中更新pip以及使用pip install安装lightgbm
  8. 带你啃透深度学习必学“圣经”花书!(附带论文代码精读讲解)
  9. ubuntu18.04安装CH340和CH341驱动
  10. 自编译 极路由2 大麦DW22D/DW203D/DW204D openwrt路由器固件分享