首页 > 编程知识 正文

nrf24l01一对多通信(NRF24L01入门总结)

时间:2023-05-03 06:08:39 阅读:121562 作者:1312

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

目录一、NRF24L01的功能特性二、如何控制(读写) NRF24L01? 三、NRF24L01的工作模式四、一个NRF24L01发送如何实现,另一个能接收? 五、自动应答和自动重发需要注意什么? 六、一对一通信比较简单,多对一吗?

另一方面,NRF24L01功能特性自动应答及自动重发功能地址及CRC校验功能无线速率:1Mbps/2MbpsSPI接口速率:0~8Mbps125个可选工作信道2、NRF24L01的控制(读写)方法? NRF24L01具有通过SPI接口进行通信并通过SPI访问(读取/写入)内部寄存器来控制NRF24L01的效果。 NRF24L01的SPI接口最大传输速率10MbpsNRF24L01内部寄存器要用SPI读写,必须符合NRF24L01的指令格式。 NRF24l01为了识别发送的指令,指令格式如下。

例如:配置通信信道为40

因为通信信道寄存器是0x05,所以在将40写入到NRF24L01的0x05地址时,首先从0x25发送到NRF24L01,接着从40发送到NRF24L01即可。 (0x25来自0x20|0x05。 )

注意:写命令前降低CSN,写一个命令后提高CSN。 每次写命令,都必须经过“降低CSN”、“写入命令”、“提高CSN”三个步骤。

三、NRF24L01的工作模式NRF24L01可以分为不同的模式,例如发送模式、接收模式、待机模式II、待机模式I、断电模式,知道特定模式是特定的,并且功耗也根据模式而不同如何配置NRF24L01的模式? 使寄存器和外部端子联动,按如下图所示的不同模式进行转换。

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

各模式的状态转移图:

四、如何实现一个NRF24L01发送,另一个可以接收呢? 这样,可以理解,NRF24L01模块a和b有两个,模块a发送,模块b接收。

首先,即使在相同的信道(信道)上,模块a和模块b的接收数据长度也需要布置为使得模块a的发送数据长度与模块b的接收数据长度相等。 然后,在模块b中配置接收地址ADDR_B,将模块a的发送地址(发送给谁就成为谁的接收地址)也配置为ADDR_B。 由此,如果模块a发送数据,则模块b可以接收。 实际上,模块b放置的接收地址ADDR_B只是其中一个接收数据通道的地址。 一个模块有六个接收通道,模块b可以同时接收来自六个模块的数据。 当然,在同一信道(信道)上同时发送会干扰,所以应该不能同时发送)。

以上是两个模块通信的简要介绍,在这里也可以继续深入理解。 NRF24L01在收发数据时,硬件将发送的数据按一定的格式封装在数据包中,包括包头、数据包内容、校验等。 这个形式可以不特别关注。 这是因为,如果两个通信的NRF24L01的结构相同,则例如开启CRC检查。

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

ShockBurstTM扩展ShockBurstTM接收数据中断CRC校验自动响应自动重发扩展ShockBurstTM可以看到接收成功时的自动响应和发送失败时的自动重发,大大减少了MCU的工作量。

五、自动应答和自动重发需要注意什么? 如上所述,在一个模块中有6个接收数据信道,分别是信道0、信道1……信道5。 打开自动应答和自动重传时,例如:还是模块a发送数据,模块b接收。 他们都打开了自动应答和自动重发功能)

假设配置模块b的接收地址是ADDR_B配置模块a的发送地址,也是ADDR_B模块a发送数据,模块b向a返回ACK,a发送成功注意:A是发送模块,应该处于上述操作模式中的发送模式。 这里的细节是,a打开自动响应和自动重发功能后,发送数据完成后自动切换到接收模式,等待接收方响应的ACK。

再注意:模块b向模块a返回ACK,但是模块a的哪个接收数据通道接收? 因为是数据通道0,所以为了让数据通道0接收ACK,模块a必须先配置接收数据通道0的地址,然后才能发送数据,然后才能接收ACK,那么这个地址配置了多少? 这里,NRF24L01规定接收方接收到数据后,用“发送方发送地址”回复ACK,但由于发送方的发送地址是接收方的接收地址ADDR_B,所以这些地址都配置在ADDR_B中即可

模块a模块b目标地址: ADDR_B目标地址(某个通道) ADDR_B数据通道0 )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的控制逻辑。

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。