# nrf24l01在PRX模式下ACK时机问题验证 **Repository Path**: alicedodo/nrf24l01_prx_130uS_on_arduino ## Basic Information - **Project Name**: nrf24l01在PRX模式下ACK时机问题验证 - **Description**: nrf24l01+官方文档彩蛋测试例程: PRX端到底能不能在RX转TX的130uS时间内立即回复ACK payload给PTX端,以至于PTX在收到TX_DS IRQ时就能立即拿到ACK payload?? - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2020-07-07 - **Last Updated**: 2022-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # nrf24l01 PRX ACK payload与130uS的关系验证 ### 简述: 没什么特别的含义,只是写了一个nrf2401+芯片功能验证的测试代码,丢到这里供感兴趣的人查看。 代码拉下来可以直接放arduino里运行验证。 **想自己验证的先看下面的实验条件。** ### 起因: 许久之前在“arduino”中文社区发了一个nrf24l01入门相关的帖子,后来又网友对其中一个知识点提出质疑,原始回复链接: [https://www.arduino.cn/forum.php?mod=redirect&goto=findpost&ptid=86275&pid=555251]() 这个"PRX ACK payload和130uS关系"的知识点实在太偏僻,而且官方文档语焉不详,相当于彩蛋。 是我自己对文档理解加实验得出的结论,写出来之后当时也没觉得有人会感兴趣。 当时帖子打算就此弃坑(实在太忙^_^)了,不曾想几个月之后,还真有人对这内容感兴趣,见上面链接中的网友。 再后来两个多月后无意中登陆了一次社区账号,才发现了这条回复。 看得出这个回复比较用心,但很遗憾,得出的结论是错误的。 **用心且错误的结论其误导性是最大的**,为了避免后续看帖的人对帖子内容正确性的怀疑,也为了纠正这个网友,我把我的测试代码整理成了这个项目。 ### 实验条件: **arduino uno/nano** X 2 **nrf24l01+模块** X 2 接线图(PTX/PRX均适用): ![](images/connect.png) ### 测试方法:回环测试 1. PTX发一个字符串给PRX 2. PRX收到数据后反转字符串,将反转结果作为ACK payload 3. PRX尽量在130uS时间内将ACK写入TX FIFO 4. PTX侧IRQ触发,检查TX-DS和RX-DR是否同时触发,取出结果 5. 单轮测试结束 ### 测试结论: ![](images/test_result.png) **实测发现,2Mbps下,PRX在RX转TX的间隔(130uS)期间,如果想ACK立即生效,那么能处理的字符串最长不能超过16-18字节,距离理论上限有一定差距。** 总结一下大概的原因(**定性分析,未严格论证**): 一是因为操作接口时序上没专门优化(每次SPI读写至少delay 2uS) 二是nrf24的SPI时钟速度没有用满(最高10M,实际用的8M) 三是MEGA328P性能不高(16M主频的8位机,要什么自行车) ### 最后: 几位爷,都看到这儿了,给个star呗!