转http://blog.csdn.net/wangshenzhen123/article/details/47207837
1、一个发送通道,6个接收通道。发送端发送通道地址寄存器中的地址指向的就是接收端哪个接收通道接收发送端的数据,所以发送端地址寄存器的值要与接收端需要接受数据的通道地址相同。
看一下无线数据传输的数据帧格式
第二部分的地址,就是接收端接收数据的通道地址,这个地址由发送端TX_ADDR寄存器搞定。
2、必须要搞清楚发送地址和接收地址的意义。下面两端描述的是一个意思。我的两次理解。
要先搞清楚TX_ADD和RRX_ADDR_PX。TX_ADD就一个,是发送数据帧格式中发送的地址信息,如上1所示,这个地址指定了向接收端接收数据通道的地址。
发送端的职责:1、发送:发送数据给接收端。2接收:接收某接收端的应答信号。
在发送完数据后NRF24L01转到接收模式并等待终端的应答信号
接收端的职责: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的地址要设置成这个地址。
例子:
TX5:TX_ADDR=0xB3B4B5B605
TX5:RX_ADDR_P0=0xB3B4B5B605
RX:RX_ADDR_P5=0xB3B4B5B605
IRQ 引脚会在以下三种情况变低:
Tx FIFO 发完并且收到ACK(使能ACK 情况下)
Rx FIFO 收到数据
达到最大重发次数
将 IRQ 接到外部中断输入引脚,通过中断程序进行处理。
3 Tx 与Rx 的配置过程
3、
两种数据双方向的通讯方式:
如果想要数据在双方向上通讯,PRIM_RX 寄存器必须紧随芯片工作模式的变化而变化。处理器必须保证PTX和PRX端的同步性。在RX_FIFO和TX_FIFO寄存器中可能同时存有数据。
另外还有自己的查阅的一些资料:
这是使用手册上的关于地址的图。
对于发送方他的Rx通道0要和他的发送地址配成一样的。对于接收方0~6必有的哥通道的地址配置为发送发的地址。就是其实所有的地址都是自己设置的,但是要配对的进行设置。
也有人这样理解:
发送方发送了一段代码,代码中携带地址(看做代码的身份证),
接收方接收代码,但接受方设置成了只接收特定身份代码的数据,也就是主机TX_ADDR和从机RX_ADDR要求设置成相同的原因吧。
从机接受完数据之后,将应答信号还发送给刚才设置的那个地址,
主机还是只识别与发送数据时携带的地址相同的数据。
其实,这么理解之后,发现主机和从机根本就没有地址,只是数据携带的地址(数据的身份证)将主机和从机联系起来的。