找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 81866|回复: 35
收起左侧

nRF24L01单片机通信的总结--看了就会用了

  [复制链接]
ID:70976 发表于 2014-12-26 21:38 | 显示全部楼层 |阅读模式
  1周时间,我从一个没用过STC单片机,不知道什么叫SPI接口的“文盲”,把nRF24L01的整个通信过程弄到完全没有bug.。兴奋之余来小屁一下。给那些正在奋斗着这个牛逼的芯片的小牛们小炫一下。希望有所帮助。屁话少说。正题:

  基本的东西我理解了,那就是:1.用5根线的SPI接口向2401发送数据或指令。2.芯片在每次上电的时候都需要进行一番配置。这些配置数据,就是所谓的指令了。3.配置完成后知道芯片处在哪个模式。并且知道它将要转向哪个模式。4.通讯协议。5.观察现象。

  好了,小牛们一定急切想知道自己的程序问题出在哪里了,再小白一点的一定想急切的知道如何配置才能让它工作。更小白一点的一定想知道这个芯片的各个模式之间是怎么联系的。又是如何进行相互转化的。别急,一个一个说。

  要说什么最重要,你们不会想到其实是4.通讯协议。 

  为什么呢,你们又知道在这里的通讯协议是作什么用的呢。 举个简单的例子,我刚开始设计的时候,一心想让一个作为发送模块,每隔一秒发送一次数据,而另一个则作为接收模块,不间断的检测收到数据没有。 这就是一个简单的通讯协议,它是我们的目标。是我们的方向。当然真正的通讯协议绝对不会这么简单的几句话。它告诉你,你理想中的模块应该充当什么角色。是接收?是发送?还是接收完了马上发送。作为开发阶段,当然是越简单的协议,正确性就越容易验证,废话不说,那就按我说的“通讯协议”来设计吧。

  先说发送模式吧。

  要到发送模式,要经历几个变化。第1,上电,上电完了芯片其实还是在powerDown模式,因为芯片为了省电,它需要通过软件来控制开机或关机。powerDown模式就是所谓的待机模式了。这个模式理所当然是最省电的。它除了省电以外还能干吗呢?配置!对最重要的配置。就是可以通过 SPI口向它发送数据,它是可以接收到的,并且可以正确写入到指定的寄存器中的。一般我们在初始化中一开始就可以配置了,而此时芯片正是处在这个模式。

  第2.我们的目标是要把它配置的能发送出去数据,而且能被目标设备正确接收。所以这中间涉及的寄存器(当然是2401里自带的寄存器区了)有:

     1@发送到的目标地址。 说地址其实是虚的,它就相当于一个钥匙和一把锁一样。当你在接收设备里边规定了一个地址以后,那么接收到的数据只有带了这个地址的包才会被正确接收。所以说这里的发送目标地址就是接收设备里的本机地址。只要设计时两个地址相同,就不会接收不到。

     2@接收到的地址。 这个名字起的不是很好哈,有点误导人。说白了就是一个本机地址了。在纯发射机里,它并不是必要的。因为它从来不接收数据~~~这里写上,是因为:发射模式还有个东西,就是自动应答功能,(当然也是通过配置才能启用的,不配置则不会自动应答,也就不需要知道本机地址了)。

     3@说到自动应答,那就先说它吧。一般我们会想,发送出一帧数据后是不是应该等待另一方回应个数据呀?想法是好的,但我说了,有通讯协议在控制。因为我们这里只想设计成一直发送而不管对方是否收到。所以自动应答可以不去配置,让它开机默认即可。但实际上我们的通讯协议可能很复杂,肯定不会是一直在发送。并且,它发送完一帧后,确实应该转为接收模式来等待对方发送应答数据过来。我们人为的当然可以自己来个模式跳转,但是有自动应答了,也就是说,当你设定开启自动应答了,那么在它发送完一包数据后,芯片会立即转为接收模式了。 《在这里我也仍有一点没理解,就是,当它收到应答后会变成什么模式呢,是自动再回到发送模式还是停留在接收模式。》 

     4@有自动应答了,那么就不能少了自动重发功能了。为什么呢。首先理解为什么会自动重发,就因为它处在自动应答模式时,通过接收数据来判定上次的数据是否有接收者成功接收了,就像我送出了一封信,如果你没有回信我是不是会想你可能没收到信,我需要再发一次。就是这个道理 。自动重发寄存器8位被分成两个4位的小区域,高4位存的是重发间隔时间,也就是说总共可以设定为16种不同的间隔,在这个间隔时间过后仍没有回应才再次重发。低4位好说,就是存一个最大重发次数。则最大可以设为15,即重发15次后仍然没回应那就不理你了,不再重发了。并且还会产生一个中断呢。最后再讲中断部分。 这里应该注意的是,当自动应答功能禁止时,就没有自动重发了,不管你设了重发多少次都不管用了。所以是互相影响的。还有就是重发次数设为0次,则相当于禁自动重发了,这不是显然的么。嘿嘿。

     5@最基本的配置,,频率。这个芯片不光能以2.4Ghz的载波发射呢,它的带宽为2.4G----2.512G呢。这中间有一百多M的频带,可以划分成2M一个的信道。这个寄存器中的值就标明你想工作在哪个信道上啦,只有设置为同频的设备才能接收的到很容易理解吧。比如你设为10信道,则10*2=20M即发送时所用的载波频率就是2400+20=2420MHz。当然也只有设为2420M的接收设备才能接收的到了。

     6@功率,数据速率。这是什么呢?原来2401里边也有自动增益控制部分,我们可以设定一个合适的功率来发射数据,第一可以在能耗上有利,另一方面对通信距离的控制也是很重要的。比如我只想在2米内能够通信,但2401最大的通信距离可以达到上百米,显然需要降发射功率来降低通信距离。可选的功率值有 0Dbm,-6dBm, -12dBm,-18dBm, 显然0在这里是最大的发射功率了。开发时尽可能设为0.如果设为0时,接收者都接收不到数据,那肯定是芯片坏了,就不用考虑降低功耗来通信了。这四档功率,通信距离从远到近,从几十米到几cm.并且在通信过程中还可以动态更改这个功率值,以达到最佳匹配的效果。数据速率是什么呢,刚开始我跟SPI接口的速率搞混了,想着,一个4M的单片机跟芯片通信速率怎么可能到这么高的。其实不是,这个速率就是加在载波上的数据的码率了。有两个可选值,1Mb/s,2Mb/s.也就是说,1秒钟能发送出去多少个高低电平。

     以上这些配置命令之后就可以通过简单的指令转向发送模式了。下面就看一下,配置的伪指令吧:

    1. sendCommand(TxAddress_5) .因为地址是3到5字节可选的,这里选择了5字节的地址

    2. sendCommand(LocalAddress_5),本机地址如果想要开启自动应答则必需与发射地址相同,即LocalAddress==TxAddress..不开启则不需要相等。

    3. sendCommand(EnableAutoAck_0),因为芯片自带了6个通道,可以同时工作同时接收不同的数据,所以这里的自动应答也有相应的6个bit位来分别控制。这里只允许通道0自动应答。

    4. sendCommand(EnableAutoTransmit) .只要上边一句配置开了自动应答,这句就应答生效。即自动重发.

    5.  sendCommand(RF_CH). 这一句设置发射频率。即设定信道。一般默认的就是0信道了,也即2.4G的载波。

    6.sendCommand(RF_Power). 设定发射速率,还有发射功率就设成0dBM吧。





    以上这些是发射模式的必要配置了。如果不涉及接收,那么现在就可以转向发射模式。

    7.sendCommand(Config); 通过 config寄存器中的开机控制位 powerup=1,转向空闲模式,config^0=0.转向发射模式。

    8.sendCommand(TxBuffer);  填充发送数据到缓冲区里边。

    8.CE=1;  这是一个引脚,用来控制从空闲模式向发送或接收模式跳转的.仅将相应位设为发送或接收模式不行,芯片现在只欠东风了,就是CE=1并保持最少10us时间后。就会开始发送数据了。

    一个帧数据发送完成后会产生中断。这些中断是可以屏蔽的,就像单片机的中断允许控制一样。控制位在config寄存器中。

    这里还可能产生另一个中断,就是重发次数达到上限了,你设了重发3次,那么重发3次以后还没收到应答就产生中断了。同样也是可屏蔽的。



 下面说接收模式配置吧。

  待续一下。

回复

使用道具 举报

ID:72886 发表于 2015-1-27 21:04 | 显示全部楼层
还在设计硬件,来看看nrf24l01好调不,看你们写的都脑大了,楼主继续啊,请问你的手册也是英文的吗?求一个中文的手册。。谢谢
回复

使用道具 举报

ID:68369 发表于 2015-2-26 21:45 | 显示全部楼层
楼主,想问一下NRF24L01和5V单片机相连要串电阻吗?串多大?
回复

使用道具 举报

ID:73002 发表于 2015-3-11 13:11 | 显示全部楼层
可以学习下。
回复

使用道具 举报

ID:74852 发表于 2015-3-19 10:50 | 显示全部楼层
liyongbin10 发表于 2015-2-26 21:45
楼主,想问一下NRF24L01和5V单片机相连要串电阻吗?串多大?

nrf最大承受电压只有3.6v,建议还是用一个3.3v的恒压芯片吧,电路也简单,加两个电容就行了
回复

使用道具 举报

ID:73962 发表于 2015-3-19 20:19 | 显示全部楼层
挺深入浅出的科普帖子,赞一个!
不知道为啥,没有续帖了?
期待下文。
回复

使用道具 举报

ID:37003 发表于 2015-3-24 17:01 | 显示全部楼层
很好的总结!
回复

使用道具 举报

ID:72611 发表于 2015-4-4 17:44 | 显示全部楼层
学习了
回复

使用道具 举报

ID:84442 发表于 2015-7-1 09:59 | 显示全部楼层
楼主你好,我用51单片机控制2401,要设置1Mbps,发射功率为4dBm,请问怎么写程序。
回复

使用道具 举报

ID:84485 发表于 2015-7-1 16:51 | 显示全部楼层
非常好
回复

使用道具 举报

ID:84485 发表于 2015-7-1 16:51 | 显示全部楼层
非常好
回复

使用道具 举报

ID:79615 发表于 2015-9-12 00:51 | 显示全部楼层
哇哇。楼主很好,很好的经验!
回复

使用道具 举报

ID:104819 发表于 2016-8-28 10:48 | 显示全部楼层
非常好
回复

使用道具 举报

ID:91274 发表于 2016-9-3 11:09 | 显示全部楼层
学习中
回复

使用道具 举报

ID:91274 发表于 2016-9-3 11:10 | 显示全部楼层
没有其他程序?
回复

使用道具 举报

ID:154544 发表于 2017-2-28 14:50 | 显示全部楼层
楼主好棒
回复

使用道具 举报

ID:169722 发表于 2017-4-11 12:17 | 显示全部楼层
wxfhw 发表于 2015-3-19 20:19
挺深入浅出的科普帖子,赞一个!
不知道为啥,没有续帖了?
期待下文。

请问下文在哪?我找不到
回复

使用道具 举报

ID:188912 发表于 2017-4-12 17:25 | 显示全部楼层
感谢有思路
回复

使用道具 举报

ID:193669 发表于 2017-4-25 23:53 | 显示全部楼层
亲,有没有两个51之间通信的程序
回复

使用道具 举报

ID:220453 发表于 2017-7-18 09:46 | 显示全部楼层
谢谢楼主~
回复

使用道具 举报

ID:219204 发表于 2017-7-24 22:24 | 显示全部楼层
楼主快点更啊,我很需要您这种详细的讲解
回复

使用道具 举报

ID:203249 发表于 2017-9-4 16:39 | 显示全部楼层
讲的很明白,兄弟,上个代码分享就完美了
回复

使用道具 举报

ID:161939 发表于 2017-9-4 21:30 | 显示全部楼层
下一集呢楼主坐等更新啊
回复

使用道具 举报

ID:221300 发表于 2017-10-24 20:58 | 显示全部楼层
学子心 发表于 2015-7-1 09:59
**** 作者被禁止或删除 内容自动屏蔽 ****

24L01最高发射功率只能有0dBm
回复

使用道具 举报

ID:251314 发表于 2017-11-20 09:20 | 显示全部楼层
总结的很好,我还像看看   前导码、同步字这些,怎么就没什么人问呢?
回复

使用道具 举报

ID:134294 发表于 2017-11-21 19:49 | 显示全部楼层
14年的帖子,作者还没续贴!
回复

使用道具 举报

ID:256288 发表于 2017-12-1 21:47 | 显示全部楼层
希望更新
回复

使用道具 举报

ID:266052 发表于 2017-12-24 15:10 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:52816 发表于 2018-7-15 16:45 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:307566 发表于 2018-10-30 22:10 | 显示全部楼层
牛皮啊,6666谢谢楼主
回复

使用道具 举报

ID:478236 发表于 2019-3-14 22:20 | 显示全部楼层
小白表示看不懂,哈哈哈,我是不是没救了
回复

使用道具 举报

ID:443731 发表于 2019-10-28 16:42 | 显示全部楼层
liyongbin10 发表于 2015-2-26 21:45
楼主,想问一下NRF24L01和5V单片机相连要串电阻吗?串多大?

正常是3.3V,自己计算下呗。不难的
回复

使用道具 举报

ID:631965 发表于 2019-10-29 12:05 | 显示全部楼层
安全加密芯片,有意者欢迎咨询
回复

使用道具 举报

ID:51142 发表于 2019-10-30 00:17 | 显示全部楼层
谢谢分享,学习
回复

使用道具 举报

ID:156302 发表于 2020-1-30 11:32 | 显示全部楼层
前来学习一下,谢谢分享。虽然好久的帖子了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表