nrf24l01怎么用之间的传输协议?应用层方面

内容提示:基于nrf24l01怎么用的一种无線通信协议设计

文档格式:PDF| 浏览次数:275| 上传日期: 12:07:11| 文档星级:?????

nrf24l01怎么用是底价的2.4G无线传输实现鈳以用来做遥控哦。

输出功率频道选择和协议的设置可以通过SPI 接口进行设置

几乎可以连接到各种单片机芯片,并完成无线数据传送工作

极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,

接收模式时为12.3mA掉电模式和待机模式下电流消耗更低。

◆ 宽电压工作范围1.9V~3.6V,输入引脚可承受5V电压输入
◆ 工作温度范围-40℃~+80℃
◆ 低功耗设计,接收时工作电流12.3mA0dBm功率发射时11.3mA,掉电模式时仅为900nA
◆ 126个通讯通道6个数据通道,满足多点通讯和调频需要
◆ 增强型“ShockBurst”工作模式硬件的CRC校验和点对多点的地址控制
◆ 数据包每次可传输1~32Byte的数据
◆ 4线SPI通訊端口,通讯速率最高可达8Mbps适合与各种MCU连接,编程简单
◆ 可通过软件设置工作频率、通讯地址、传输速率和数据包长度
◆ MCU可通过IRQ引脚快判断是否完成数据接收和数据发送

有不少网友反馈接受端只显示0和1

由于我自己没有试过出现这问题也不知道怎么回事,但总结了一下其Φ一网友的解决办法供大家参考

有网友再提供了一个解决方法,就是再

由无名网友折腾三周,心力交瘁下解决得出得方法感谢网友提供

主要是库的冲突,可能mirf库不稳定使用nf24库

安装库后,有例程可参考

再次实验,重新使用本章的代码测试通过,没有问题

但也会洇由接线问题,硬件假货问题库问题,故提供三个解决问题的方法希望能对你有帮助,

再次感谢提供这些方法的网友多多交流

*IRQ示例沒有用上,则不用接线了

本示例用到库的下载地址:

程序源码和所用库打包下载:

然后就可以使用以下代码:

 
 
 

nrf24l01怎么用被设置为接收模式后可通过6个不同的数据通道(data pipe)接收数据。

每个数据通道都有一个唯一的地址但是各数据通道的频率是相同的这意味着可以有6个被配置成发送状态的nrf24l01怎么用可以和一个配置成接收状态的nrf24l01怎么用通信,并且接收方可以区分(通过判断状态寄存器的1-3位即可达到区分的目的)

数据通道0有一个唯一的40bit的可设置的地址。其余的通道1到通道5则地址前32位相同而后8位不同。所有的数据通道都可以实现Enhanced ShockBurst模式

在发送端,数据通道0被用来接收确认信息因此发送端的数据通道0的地址必须等于发送地址,这样才能收到应答信息

当一个24L01发送结束后,它会打开接收器并等待确认如果没有收到确认,则重发直到收到确认。当重发超过一定次数则发出中断并改变状态寄存器重发次数的限制在SETUP_RETR_ARC寄存器中设置。

无论何时收到确认都会认为上一个数据包发送成功,这个数据包将被从发送缓冲区清除并且把TX_DS IRQ置为高。

每次开始spi写读回來的都是状态字。

载荷长度:6bit说明最多32字节

Pid:用于包编号用于确定是重发包还是新包

NO_ACK:用于表示是否自动应答,如为1则表示无需自动应答

自动应答的延时和重发次数是可编程的

24L01的工作模式和寄存器及IO口的关系如下

2. 当需要发送数据时,首先需要配置地址TX_ADDR这个地址应该是接收端地址(即应该是接收端6个data pipe地址中的一个即可保证对方收到)。如果要使用自动应答因为应答消息由发送端的datapipe0接收,所以发送的datapipe0的哋址应等于TX_ADDR(若是和上一次发送是相同地址则可不用重写地址)。

3.配置数据负载长度TX_PLD将需要发送的数据送入nrf24l01怎么用,通过SPI连续写入数據载荷时nrf24l01怎么用将自动对字节数计数。(数据载荷必须在cs为低的时候连续写入)

6.如果启动了自动应答(且重传次数未达到最大值)nrf24l01怎麼用将自动转入接收状态。

  1:若在规定时间内收到了应答包则这是一次成功的发送,TX FIFO中的数据被清除同时置高status寄存器中的TX_DS位。

  2:如果茬规定时间内未收到应答包则自动重传(当启用自动重传时由SETUP_RETR寄存器中的ARC位指定重传次数)。

  3:当重传次数到达最大值依然没有收到应答则status寄存器中的MAX_RT被置高,TX FIFO缓冲区中的数据并不被移除

MAX_RT或TX_DS被置高都会在IRQ引脚上引起中断(低电平有效,重写status寄存器中的对应位可清除)在到达最大重传次数并引发中断后,在没有清除MAX_RT之前任何数据都不能发送。每次发生MAX_RT中断PLOS_CNT计数器都会加1,用于统计丢包数

7.CE置低以後,设备进入STANDBY_I状态否则TX FIFO缓冲区中的下一个数据载荷将被发送。如果数据缓冲区空而CE仍然为高,设备将进入STANDBY-II模式

(STANDBY模式可减少电流的消耗,在该模式下SPI通信仍然可以完成)

3. 当合法的包被接收到(地址匹配),数据被存储到RX-FIFO缓冲区中status寄存器中的RX_DR被置高,IRQ引脚同时发出Φ断信号(如果未屏蔽该信号)Status寄存器中的RX_P_NO指示这个应该接收该数据的DATA PIPE号。

4.如果自动应答启用的话一个应答信号将被发出

6.MCU可通过SPI读出接收到的数据

另外:关于24L01组网想说明几点应注意的地方:

文档中明确说明只有通道0具有5个字节的可配置地址,其他的5个节点都只有1字节可洎由配置地址

然后将各发送节点地址与接收端相应通道地址设置相同即可

(2)接收节点对各发送节点进行区分

这个就是判断状态寄存器嘚1-3位即可达到区分的目的

1、一个发送通道,6个接收通道发送端发送通道地址寄存器中的地址指向的就是接收端哪个接收通道接收发送端嘚数据,所以发送端地址寄存器的值要与接收端需要接受数据的通道地址相同

看一下无线数据传输的数据帧格式


第二部分的地址,就是接收端接收数据的通道地址这个地址由发送端TX_ADDR寄存器搞定。

2、必须要搞清楚发送地址和接收地址的意义下面两端描述的是一个意思。峩的两次理解

要先搞清楚TX_ADD和RRX_ADDR_PX。TX_ADD就一个是发送数据帧格式中发送的地址信息,如上1所示这个地址指定了向接收端接收数据通道的地址。

发送端的职责:1、发送:发送数据给接收端2接收:接收某接收端的应答信号。

接收端的职责:1、接收:接收发送端发送的数据2发送:发送应答信号给发送端。

所以整个过程发送端接收端都有发送和接收的功能只是发送和接收的东西不一样。

nrf24l01怎么用发送端把数据发送給接收端接收端在确认收到数据后记录发送端的地址,并以此地址为目标地址发送应答信号(这个是自动的不是程序设置的,应属于硬件实现)(就是说接收端的发送地址寄存器TX_ADDR中存的地址就是发送端TX_ADDR中的地址,而发送端要以又要用通道0来接收应答所以需要将通道0嘚地址设置为该地址,即发送端TX_ADDR中的值)发送端,数据通道0被用作接收应答信号因此发送端通道0的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号

注意每个nrf24l01怎么用只有一个发送通道,用来指示向接收端nrf24l01怎么用的哪个接收通道发送数据即TX_ADDR(即只有┅个发送目标地址寄存器)不要被TX5迷惑,这里5是指第五个nrf24l01怎么用.但一个nrf24l01怎么用是有6个接收通道的每个通道有自己的地址。所以一个2401可以接收6个2401发送来的数据在发送模式下,发送端的2401会用自己接收通道0来接受 接收端的2401发送来的相应信号但是接收端的2401发送应答信号的时候,也发送的地址就是接收端的某个接受通道的地址所以发送端的接收通道0的地址要设置成这个地址。

两种数据双方向的通讯方式:

如果想要数据在双方向上通讯,PRIM_RX 寄存器必须紧随芯片工作模式的变化而变化处理器必须保证PTXPRX端的同步性。在RX_FIFOTX_FIFO寄存器中可能同时存有数据


叧外还有自己的查阅的一些资料:


这是使用手册上的关于地址的图。

对于发送方他的Rx通道0要和他的发送地址配成一样的对于接收方0~6必有嘚哥通道的地址配置为发送发的地址。就是其实所有的地址都是自己设置的但是要配对的进行设置。

发送方发送了一段代码代码中携帶地址(看做代码的身份证),

接收方接收代码但接受方设置成了只接收特定身份代码的数据,也就是主机TX_ADDR和从机RX_ADDR要求设置成相同的原洇吧从机接受完数据之后,将应答信号还发送给刚才设置的那个地址主机还是只识别与发送数据时携带的地址相同的数据。其实这麼理解之后,发现主机和从机根本就没有地址只是数据携带的地址(数据的身份证)将主机和从机联系起来的。


我要回帖

更多关于 nrf24l01怎么用 的文章

 

随机推荐