NRF24L01通道之我见及基于NRF24L01的无线组网方案的几点看法

       说起NRF24L01,想必大家都会知道:通信速率快,使用方便,价格低廉,开发简单……尤其是玩单片机的孩子,这个是必不可少的。

       在使用上,两点通信自然不用说,也就是配置个接收地址,配置个发射地址,然后对传就完了,网上例程很多,不赘述。不过小菜有一天突发奇想,用这个玩意来做个无线传感器网络怎么样?这么低廉的价格(做好的模块便宜的只要4~5块)应该是没有其他的可以比了,如能做成也是件功德无量的事了!于是乎就拿起datasheet细看了起来,然后就遇到这个数据通道的问题了……

       按datasheet上的说法,一个NRF模块可接收6个不同数据通道的数据,那通道是什么意思呢?研究了一下,发现还有个前提,那就是不同的通道还要有相同的频率!如此说来,通道应该不是物理层上的区别(发射频率、调制方式……)了;再看,“每个通道需要有一个地址,而且不允许不同通道使用相同的地址” ,自觉这是最坑爹的一句话!而这些地址是在初始化的时候写入NRF24L01模块的,在实际使用过程中,我们发送数据和接收数据都不会再用到发送或接收地址了(增强型ShockBurst 模式下发送地址默认为接收通道地址0),再看看它的空中数据包的格式:

前导码           

地址 3~5 字节

9 位 标志位

数据 1~32 字节

CRC 校验   0/1/2 字节 

其实我们在后来操作的仅仅就是它的最大32字节的数据区!也就是说,通道实际就是你初始化时写到这些地址寄存器的地址值!从网络的角度来理解,也就是MAC地址!NRF模块自带了MAC层协议栈,可以实现自动的对数据包的识别,减去了用户在开发时的数据链路层的麻烦,让你不用担心地址问题和数据丢失重传的问题,但是,它的限制也正是在此!它在运行过程中可以识别的数据包的MAC地址值只有六个,其它的数据包模块都会将其丢弃,因此它就让你的网络节点数限制在了六个(不同MAC地址)!  这对较大规模组网来说, 无疑是一个噩耗!

       那么如果还想继续使用这个无线模块组网,一种解决办法就是,多个节点使用相同的发送通道和接收通道,这样不同模块间的数据都能够相互接收到,然后,再在这32个数据字节中选一个或两个作为网络地址位,通过这个网络地址来识别不同的模块,只要在网络密度及数据量不是特别大的情况下,基本就可以完成任务了。

       但是,还有个新的问题来了!大家在进行数据收发的时候,可能都会考虑到数据的可靠性问题,而使用增强型ShockBurst 模式时,模块会自动进行应答(用户是不知道的),根据上面的方法,所有模块的通道(MAC地址)都设为相同,当一个模块发送数据时,其它所有在其无线覆盖范围内的模块都能够接受到这个数据,根据其MAC协议栈特性,所有的接受模块都会给发送模块以应答信号,那么,对发送模块而言,就无法知道到底是哪个接受模块发送来的数据了,也无法知道想要发送的数据已经准确到达,因此,这个基于MAC层的自动应答是完全没有用的!不仅如此,它还增大了空中数据碰撞的几率,反而降低了这个网络的可靠性!

       这样,我们还是回归其原始的ShockBurst 发送模式,在这种模式下,去除了基于MAC层的自动应答,因此其空中数据包的体积也有所减小,如下:

前导码  

地址 3~5 字节

数据 1~32 字节

CRC 校验   0/1/2 字节

那么,如果这个时候还想要继续保证数据传输的可靠性,就需要用户自己来定义新的应答方法了,根据数据包中的网络地址信息,实现新的应答,一种较好的方法是,在数据包字节中定义地址数据包类型,然后接收模块就可以根据这个数据包类型决定是否需要进一步处理了,通过完善相应的协议机制,就可以基本实现一个小型的无线传感器网络了。

       再回到通道的理念,单从无线传感器网络的角度来说,弄出这么一个东西,真的是多此一举,不仅限制了用户的扩展,还增加了一些无用的数据发射。但是,任何事情都是有利有弊的,通过通道机制,却又能防止其它非相同通道的数据被接收,其三到五个字节的可变地址值,大大增加了网络的安全性,使得不法分子失去了可趁之机;另一方面,利用通道原理,还可以实现对不同类别的设备的区别,例如,一个无线网内的温度采集节点、亮度采集节点等,这样,这个看似累赘的东西反而能使整个网络变得更清晰明了了。

       除此之外,小菜还想了个非主流的方法,用通道实现一个六枝树(自创词,欢迎吐槽)的网络,也就是,每个父节点可以连接最多六个的不同通道的子节点,而每个子节点也可以连接最多六个的不同通道的孙子节点,这样,依次往下,也可以实现一个互不干扰的子网,不过,如何实现通道地址的设定就是一个新问题了,就留给感兴趣的大家去慢慢想吧!

      

 

 

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值