从本节开始,关于nrf24l01使用,我只会讲和【Enhanced ShockBurst(
增强型短时猝发工作模式
)】有关的内容
【Enhanced ShockBurst】就是前面屡次提到的【自动回复】工作模式的官方称呼。
所以那种使用PTX/PRX身份互换而实现双向通信的方式就不会做太多涉及了,因为这两种模式对模块的使用差别非常大,交叉写的话可能会对初学的同学造成困扰,对期待这部分内容的同学表示抱歉。
而其实,对于PTX/PRX身份互换双向通信的方式,当你对通信可靠性(丢包/确认/超时/重发)有很高要求时,仔细考虑一下,你会豁然发现,这些要求不早就在【Enhanced ShockBurst】中得到满足了嘛!
上一节在描述状态迁移条件时,简单提过nrf24l01内部数据缓冲区的问题,这节正式讲解一下:
上面这个图就是缓冲区的框图。
可以看到,nrf24l01既有 发送缓冲区 TX FIFO ,也有 接收缓冲区 RX FIFO 。
FIFO意思是先入先出队列,一个数据结构的概念,不多说,不了解的可以搜索引擎之。
首先需要说明的是:
仅就数据无线传输这个功能来说,数据缓冲区并不是必要的,这个东西仅仅是为了缓解SPI接口和射频模块之间数据传输速度差距巨大的问题而存在的。
仅就数据无线传输这个功能来说,数据缓冲区并不是必要的,这个东西仅仅是为了缓解SPI接口和射频模块之间数据传输速度差距巨大的问题而存在的。
就算不给nrf24l01设计这两组缓冲区,无线传输照样可以实现。
实际上,我相信绝大多数人在使用nrf24l01进行双向通信的时候,根本没把【 数据缓冲 】的这个功能利用上:
发一包 --> 收一包 --> 再发一包 --> 再收一包 【你中枪了没?】
不管是发数据还是收数据,我们的程序其实只和T
X/RX FIFO
打交道:
发送数据时,程序通过SPI指令将数据写入TX FIFO,启动发送后,nrf24l01再从TX FIFO中取出数据发送出去;
接收数据时,nrf24l01先将收
发送数据时,程序通过SPI指令将数据写入TX FIFO,启动发送后,nrf24l01再从TX FIFO中取出数据发送出去;
接收数据时,nrf24l01先将收