检测信道占用的需求场景

在使用nRF24L01模块做一对多或多对一的组网通信中,大家都会担心一个问题就是在发送的时候,希望不要有其他的模块也进行发送,因为这样就会使无线信号发生碰撞,信道被堵塞,造成通信失败。

为了避免这种情况发生,就希望在发送前能知道当前信道是否处于空闲,如果空闲就发送,否则就等待一会,直到空闲下来再执行发送。利用这个机制,可以很大程度上规避碰撞的发生。

在nRF24L01+中怎样知道信道被占用了

在nRF24L01+中有个RSSI寄存器,地址是0x09,该寄存器的0号位是代表当前信道信号强度的。当接收信号强度小于-60dBm时0号位为0,大于-60dBm时为1,该寄存器7-1号位是保留位,固定为0。这样我们通过直接读取该寄存器的值是0还是大于0就知道信道是否被占用了。

下面是该寄存器在一些模块厂家官方例程里的定义:

#define RPD			0x09			//接收功率检测寄存器

#define RSSI		0x09			//接收功率检测寄存器

下面是通过读寄存器函数读取该寄存器的状态值的代码:

StatusRPD = nRF24L01P_Read_Reg(RPD);		//如果定义的是RSSI,那语句中RPD换成RSSI

通过上面语句得到的StatusRPD值,如果大于0则是信道被占用,在逻辑代码中通过这个判断就可以识别信道是否被占用了。也可以在发送前用循环等待这个值的变化,直到为0时进入发送状态。如下面的代码:

while(nRF24L01P_Read_Reg(RPD));

为什么用循环等待,有时候会死循环(一直返回1)

在实际应用中,使用上述方法的确可以得到当前的信道信号强度,达到判断信道是否占用的目的。但是在循环等待的时候,偶尔会出现死循环的现象。也就是读回来的状态值一直是1,但是的确没有模块在发送,已经将其他模块全部断电了,周围也没有强信号干扰,那么问题出在哪里呢?

仔细查看芯片手册,只找到下面这段话:

在接收模式下,可以通过RSSI寄存器检测接收信号功率。当接收到的信号强度大于-60dBm时,RSSI寄存器的RSSI位的值将被设置为1。否则,RSSI=0。。RSSI寄存器的更新方法有两种:当接收到有效的数据包后,RSSI会自动更新,此外,将芯片从RX模式换到Standby模式时RSSI也会自动更新。RSSI的值会随温度的变化而变化,范围在±5dBm以内

经过仔细分析和反复试验,理解了这段话所描述的具体内涵:

1、这个信号强度检测必须在接收模式下进行,在发送模式下是不准确的。

2、并不是无论什么情况下,这个寄存器都会被更新,只有CE由1变为0时才更新一次;或者在接收到有效数据的时候,会自动更为1。

3、当收到有效数据将该寄存器置1后,只有将接收FIFO寄存器的数据读出后,才会变为0,否则你变化几次CE都无效(这是手册没有提到的,多数会踩到这个坑)。

上面的死循环情况一般发生在执行发送的前夕,刚好收到一个有效数据时,RSSI寄存器被置1,而代码正在处理发送,又没有去读出数据,所以就一直保持着1,所以循环条件一直满足,就成了死循环了。

解决办法建议是在检测到为RSSI为1的时候,判断一下是否收到数据,如果收到数据先读出来,至于读出来的数据要不要处理,根据您自己的业务逻辑决定即可。然后操作一次CE引脚,再次更新检测一下是否有信号占用信道。此方法经过实际应用是有效的。

nRF24L01+如何检测信道被占用-RSSI寄存器实战分享的更多相关文章

  1. nRF24L01+组网方式及防撞(防冲突)机制的实战分享

    利用多个nRF24L01+模块组网通信的实现方式 这里讨论的组网方式,不包含使用6个通道实现的多对1通信方式,因其只限于6个发送端,局限性很大,可以附加其他技术实现更好的组网,暂时这里不讨论.这里分享 ...

  2. Java检测端口的占用情况

    突然间想到这个问题,在网上搜了一下 http://blog.csdn.net/danieluk/article/details/18518175 网上有很多文章都是用上面那个方法来解决这个问题的,总感 ...

  3. nRF24L01+启用自动应答ACK及自动重发的实战分享

    ACK模式(自动应答)功能的官方说明 当用W_TX_PAYLOAD命令对发送端TX FIFO写数据时,将数据打包后,数据包中包控制字段NO_ACK 标志位复位.接收端接收到一帧有效数据后, 产生RX_ ...

  4. nRF24L01+不能接收或接收偶尔异常等问题实战分享

    nRF24L01+接收异常问题综述 在调试nRF24L01+无线收发模块的时候,最具标志性的环节就是在接收端可以收到数据.在实际应用调试中,会出现很多意想不到的情况,造成nRF24L01+模块接收端无 ...

  5. 介质访问控制子层-Medium Access Control Sublayer:多路访问协议、以太网、无线局域网

    第四章 介质访问控制子层-Medium Access Control Sub-layer 4.1介质访问控制子层概述 MAC子层不属于之前提到的OSI或TCP/IP架构的任何一层,这也是为什么这一层被 ...

  6. Flex(flash)检测摄像头的3种状态(是否被占用,没安装摄像头,正常)

    在视频程序的编写过程中,我们经常要使用摄像头,在使用摄像头前有必要对摄像头的现有状态做个检测: 1.被占用 2.没安装摄像头 3.正常 camera=Camera.getCamera();       ...

  7. NRF24L01 射频收发 使用方法

    在干啥 这两天在调nrf24l01,最终还是参考正点原子的例程才调通,看芯片手册太难了 还要说啥废话 废话说到这,接下来上代码 SPI协议 spi.c #include "spi.h&quo ...

  8. 【计算机网络】-介质访问子层-(信道划分介质访问控制&随机访问介质访问控制)

    [计算机网络]-介质访问子层-概述 介质访问控制子层功能 解决信道争用的协议,即用于多路访问信道上确定下一个使用者的协议 是数据链路层协议的一部分 介质访问控制子层位置 位于数据链路层的底部! 信道分 ...

  9. 计算机网络之介质访问控制(静态划分信道、FDM、TDM、STDM、WDM、CDM)、(动态划分信道、ALOHA、CSMA、CSMA/CD、CSMA/CA)、令牌传递协议

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/104935912 学习课程:<2019王道考研计算机网络> 学习目的 ...

随机推荐

  1. SpringCloud(一):了解SpringCloud

    一.SpringCloud 简介 首先看看SpringCloud官方的介绍: Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由, ...

  2. 每秒100W请求,12306秒杀业务,架构如何优化?

    如<同样是高并发,QQ/微博/12306的架构难度一样吗?>一文所述,同样是高并发场景,三类业务的架构挑战不一样: QQ类业务,用户主要读写自己的数据,访问基本带有uid属性,数据访问锁冲 ...

  3. 服务器返回的数据将Unicode码转成汉字

    当我们请求接口的时候,服务器会返回一些数据,当我们打印的时候就会发现,打印出来的是unicode码,不是汉字. 这时候需要我们自己手动处理一下,让打印的时候输出汉字的格式. 方法如下: 新增一个分类, ...

  4. mysql5.7 Multiple-Column Indexes 多列索引(二)

    场景一: 复合索引的替代方法,对多列字段拼接做hash,引入一个hashed 字段,对此字段添加索引,可以做到复合索引查询速度快,例: SELECT * FROM tbl_name WHERE has ...

  5. linux shell脚本相关知识

    最近的项目中,有一个编写linux shell脚本的任务.由于之前不是很熟悉,在这个过程中遇到了很多困难,查找了很多资料,也收获了很多.下面是linux shell脚本中常用的知识总结. 1基础语法 ...

  6. 0day2安全——笔记1

    第一章 PE和内存之间的映射 节偏移 文件偏移地址(File Offset Address):数据在PE文件中的地址 装载地址(Image Base):PE装入内存的基地址 虚拟内存地址(Virtua ...

  7. (转)vue-router原理

    转载地址:https://segmentfault.com/a/1190000014822765 随着前端应用的业务功能起来越复杂,用户对于使用体验的要求越来越高,单面(SPA)成为前端应用的主流形式 ...

  8. AcWing 799. 最长连续不重复子序列

    网址  https://www.acwing.com/solution/AcWing/content/2069/ 题目描述给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长 ...

  9. acwing 873. 欧拉函数 模板

    地址 https://www.acwing.com/problem/content/875/ 给定n个正整数ai,请你求出每个数的欧拉函数. 欧拉函数的定义 输入格式 第一行包含整数n. 接下来n行, ...

  10. Regex quick reference

    近段时间,接触正则较多,常规法则如下,网摘内容,方便查阅.