这是一个被低估的无线模块!
对很多单片机初学者或者爱好者来说,NRF24L01这个模块应该是比较熟悉了。如果你看过我的51视频就知道,我还在里面粗略的讲过,分享了两个简单的收发程序。
它是由NORDIC公司生产的,工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。就是说,它既能做发送端,也能做接收端。这两种收发方式的切换,是通过SPI接口对该芯片的寄存器进行配置来实现的。
收发数据也有保障,接收端会通过CRC校验判断收到的数据有没有问题,没有问题的话返回接收成功的应答信号。而发送端会通过判断有没有收到接收端的应答信号,确定发送是否成功。价格也很亲民,设计好的模块,在某宝不超过五块钱,如果是大功率的,价格会贵一些。
对通信有一些了解的童鞋都知道,根据设备能否同时收发,通信模式分为:单工,半双工和全双工。
所谓单工,指的是数据只支持一个传输方向。典型代表,收音机!只能由信号塔发送给收音机,收音机无法发数据给信号塔!
所谓半双工,设备可以做为发送端,也可以作为接收端,但是在同一时间,只能发送数据或接收数据。典型代表,对讲机!通常情况下,都是接收端,按下某个按键才能变为发送端,然后才能说话!
所谓全双工,指的是设备在同一时间既能发送数据,又能接收数据。典型代表,手机,手机接听、说话两不耽误。还有就是UART口,串口两条线,一条发送,一条接收,互不影响。
在半双工和全双工之间,其实还有一种工作模式,叫做伪双工。是在半双工的基础上做的优化,即两者通过一些方式可以实现类似全双工的效果。例如,两者可以快速在发送端和接收端的角色中切换!
用过的人都知道,NRF24L01工作时只能处于发送端或者接收端的一种,就是说:同一时间,不能既做发送端,又做接收端。它的应用通常分两种情况:
- 数据单向传输。一发一收,或一发多收。这种情况下,发送端和接收端角色固定,不会发生变化。
- 数据双向传输。这种情况下,假设有两个模块,一般都会设为接收模式。当其中一方有发送需求时,才会切换为发送模式,接着发送数据、确认对方收到、切换回接收模式。有点类似对讲机。我印象里,收发模式之间的切换需要一定的延时,所以快速切换就不要想了~~~
但其实,NRF24L01还有一种比较强大的通信模式,也是本文的重点::EN_ACK_PAY,包含在寄存器-FEATURE里。严格来说,是NRF24L01+这个型号!
即,接收端在返回应答信号的时候,可以让一些数据跟随应答信号一起回到发送端,实现类似全双工的效果。但由于接收端无法主动返回数据,必须先让发送端发来数据,所以这种方式叫做主从式伪双工。
注意,NRF24L01+是NRF24L01的升级版,但其实也没什么需要注意的,因为现在某宝卖的基本都是升级版。如图:
但由于商家大部分不了解技术细节,所以宝贝详情里基本都没提到。
路人甲:这个寄存器我咋没见过?
额,如果你看的是这个数据手册的话,那应该是没见过:
新人估计大部分看的都是这个,这只是某个模块商家为了方便新手入门写的一个模块的使用手册,没有涉及完整的功能。所以这里还是建议大家,数据手册尽量看原厂的~~~
诺,如下:
下面是开启这个功能后我做的一些测试,主控是STM32,使用硬件SPI,使用串口助手打印发送端的一些信息。其中,ACK那一行,表示的就是发送端从应答信号中获得的数据。
- 表示通道0
- 表示收到了5个数据
后面的数字是收到的实际内容
总的来说,还是比较好用的。因为我印象里,发送模式和接收模式虽然可以通过配置来切换,但需要一定的延时。功能上虽然没有问题,但面对一些快速通信的场合,感觉还是有点别扭。
而这种方式恰恰解决了这个问题,省去了收发角色频繁切换的问题。只要定制好通信协议,接收、处理就完了。
最后,两个事。
1、后续会利用这个模块做个玩具,玩具功能基本已经实现,就剩下文字整理的工作了,敬请期待。
2、本文中用到的例程,我放在了公众号后台,有需要的,在公众号(单片机爱好者)后台回复关键字:012 或者 24L01应答,即可获得下载链接。
这个模式确实没注意过,有点意思啊!