振南的 NRF24L01无线射频通信模块(带高增益鞭状天线)自动应模式测试实验
【基于51与STM32平台】
关于NRF24L01无线射频,在振南的ZN-X开发板上一直都有。但是振南只是对它进行了简单的测试,并没有深入地去研究。我一直认识NRF24L01是一种比较低端的无线射频方案,它的数据带宽和数据准确性都不高。但是现在我发现,其实它比较强大。集成的自动应答模式可以实现高准确率的数据通信,省去了我在应用层上设计传输协议和重传机制。它的最大数据带宽比较小,只有2Mbps,即256KBps(每秒可传输256K字节的数据量)。这样的数据带宽,传输一般的音频、控制信号或小尺寸的视频数据等应该是可以的。所以有些人使用它来作对讲机。振南后面会发布实用项目的实现方案和测试(比如对讲机、无线数传、遥控等)。
NRF24L01基本的通信方式有两种,1是普通方式,无自动应答,不能保证数据收发一定可靠;2是自动应答方式,发方发射,收方应答,失败重发,直到成功,它可以保证数据收发的可靠性,但是它限制了通信距离和速率(有应答重发机制,必然要牺牲一部分性能)。
此实验对自动应答方式进行测试。
实验方案很简单:发方发射32个字节(0~31),收方接收后判断数据是否正确,如果正确则将数据从串口打印输出。
实验基于振南的ZN-X开发板,当然此实验需要两块开发板,一发一收。
实验效果如下图:
自动应答模式可以作到:只要收到数据,就一定是正确的。发射方在成功发出数据之后,会立即自动转为接收模式,等待接收方的回应。如果在规定的时间内没有收到回应,则认为此次发射失败。将启动重发,一直到收到回应为止。除非重发次数到达了设定的最大重发次数,此时NRF24L01会将状态寄存器的MAX_TX位置为1。CPU通过它可以知道发射是否成功,进而决定是继续发送同一包数据,还是放弃。而当数据被成功发射,即发方成功接收到收方的回应后,NRF24L01则会将状态寄存器的TX_OK位置为1。
振南还对NRF24L01的通信速率进行了初步的测试:
测试时长 | | | | |
| | | | 基于振南ZN-X 51平台,采用IO模拟SPI,SPI时钟频率约500KHz |
| | | | 基于振南ZN-X 51平台,采用硬件SPI,SPI时钟频率约5MHz |
| | | | 基于振南ZN-X STM32平台,采用IO模拟SPI |
| | | | |
注:未整理,后期补充
可以看到NRF24L01的数据通信速率与SPI时钟频率有较大关系。实验基于STC51芯片(振南ZN-X上的STC15L2K60S2芯片),它的晶振使用22.1184MHz,SPI最快为Fosc/4,即大约5MHz。在这种情况下,NRF24L01的数据通信速率达到330Kbps。甚至超过了NRF24L01的标称速率。经过振南核查,收发数据也没有问题。(发方发送32字节,0~31,收方接到后,判断是否为0~31。发方发送成功后,向串口打印输出一个“.”,收方接收并确认数据无误之后,也向串口打印一个“.”,如果发送失败或接收数据有误,则向串口打印输出“X”。经过长时间的测试,振南没有看到一个“X”。这也许归功于高增益鞭状天线,因为我有意将天线取下,数据收发便表现不稳定了。)
结论:NRF24L01实际数据通信速率可能会比2Mbps要高,但这是不稳定的。
振南在程序中,在两次数据通信之间并没有留出一定延时,但实际上,可能加上一些延时会更可靠一些。NORDIC官方所发布的2Mbps,应该是一个保守值。
另外,振南还发现,无线通信与有线通信在通信速率上的配置并不一样。振南测试了发方设置通信速率为250K,而将收方通信速率设置为2M或1M,它们之间仍然可以成功进行通信。只不过通信和应答的过程被拉长了。它并不像有线通信,比如串口一样,必须保证收发双方严格的通信速率的一致(所谓的波特率)。
振南通过此实验发现,NRF24L01无线射频通信,数据通信质量和稳定性比较好,速度上也能够了达到预定要求。但只是在收发双方相距较近的情况下,振南需要进一步测试它们相隔较远时表现如何。通信质量和距离有怎样的关系。这是振南后面要作的实验,到时整理发布。
如果把自动应答方式关掉,使用普通方式进行通信,效果又会如何!?