最近再arduino中文社区看到了一篇介绍nrf24l01基本原理的帖子,内容感觉蛮不错的,学习一下,记录一下学习笔记。
大部分内容都是Arduino中文社区的帖子,附上自己的一点点体会。
目录
一、地址
由无线通信的基本原理可知,当nrf2401发送数据给对端模块的时候要发射电磁波,这本质上是一个像四周空间广播的过程。
既然是广播,只要是有效距离范围内的任意一个处于接收状态的nrf2401模块,都能收到这个信号,那我咋知道我收到的这波数据是不是给我的?
于是"地址"这个概念就出现了:
PTX是主发送端,通信过程由PTX主动发起,发送数据的时候,PTX将表示某个地址的数据附带在要发送的这段数据上,而同时,所有的主接收端即PRX,都在其内部预先存好了一个唯一的地址。这个地址的长度是3到5字节,具体长度是可以通过我们的程序来配置的,3/4/5字节3选1。
PTX发送数据的时候会先将目标地址数据发出去,然后再发送实际的数据;
当PRX识别出有效信号时,会首先从这一长串0101中找出表示地址的那段数据,然后将这个地址和自己设定的地址进行比较,如果相符,则认为数据是发给自己的,继续接收数据,如果不相符,则数据不是发给自己的,直接丢掉,继续等待下一波数据。
目标PRX收到数据只是第一步,如果PRX有数据要回传给PTX,那么它会按照同样的方式,将自己的地址(注意是PRX端的地址,不要搞错)附带在数据前面一并发送出去。由于PTX本来就知道这个地址,所以PTX端遵照同样的接收规则接收回应数据,至此就是一个完整的通信过程。即使PRX没有实际数据要发送给PTX,按照约定规则,它也会回复一份不带有效数据的回应给PTX端,这份回应同样附带地址。
不管是作为PTX还是PRX,我们的程序可以通过nrf2401的SPI接口,按照nrf2401规定的方式,随意修改这个"地址"。但关于地址有几个非常重要的细节要说明:
<