您的位置:首页 > 其它

CC2530显示终端信号强度 RSSI LQI

2016-04-17 02:14 316 查看
转载
http://bbs.feibit.com/thread-8836-1-1.html
(出处: 飞比ZigBee智能家居及照明(物联网方案与教育平台专家))

一、什么是RSSI LQI

摘自葵花宝典3.2.4(OUTMAN):

3.2.4 连接质量指示――LQI

还记得电脑的WIFI指示吧,我也不了解WIFI协议,但我想这应该是相同的东西吧。在802.15.4中,有两种检测连接质量的方法,一个是检测“接收信号强度”――RSS,另外一个是检测“信噪比”――SNR。RSS值是通过检测接收到的信号的全部能量情况来判断的。

  又有人举手了?这位同学有什么问题?――什么,这是怎么做到的?

  呃、、、这个我真不懂,不过我知道肯定有个寄存器来读的。至于这个值是怎么来的,你还是问下做IC的人,或者你找个不是那么忙的教授,说不定他知道~~~不过这位小同学啊,看你问这个问题,我得多说你几句了。你这么“叫真”不好,倒不是打击你,我知道你说不定能成个人物,不过,学习是要讲“深度”和“广度”并举的,如果什么事情都一头钻进去,你会迷路的。。。

  我们继续,那“信噪比”SNR,顾名思义,就是信号除以噪声的比率了。当然,值越大表示信号质量越好。

  每一个接收到的数据包都会做一个LQI的测量,它至少有八个等级。这个测量是物理层很重要的一个任务,因为这个值不但他的直属领导-MAC层要用到,他的上几层领导-网络层和应用层都用得到。比如说网络层(NWK)在选择路由的时候,LQI就是一个很重要的指标,LQI值高的路径当然要优先考虑,当然,这也只是一个因素,比如说这个LQI高的路径里的设备都是电池供电的,那么在频繁选择这个路径的同时,必然会导致这些设备电池寿命缩短。所以,一定要多方面权衡――这就体现了“领导”的作用。。。

二、如何实现?

其实很简单,我们收到每个数据包的时候,RSSI和LQI已经打包好,我们只需要读出来就行了!

typedef struct

{

osal_event_hdr_t hdr; /* OSAL Message header */

uint16 groupId; /* Message's group ID - 0 if not set */

uint16 clusterId; /* Message's cluster ID */

afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,

it's an InterPAN message */

uint16 macDestAddr; /* MAC header destination short address */

uint8 endPoint; /* destination endpoint */

uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */

uint8 LinkQuality; /* The link quality of the received data frame */

uint8 correlation; /* The raw correlation value of the received data frame */

int8 rssi; /* The received RF power in units dBm */

uint8 SecurityUse; /* deprecated */

uint32 timestamp; /* receipt timestamp from MAC */

afMSGCommandFormat_t cmd; /* Application Data */

} afIncomingMSGPacket_t;

这里我把程序贴出来,大家可以试验看一下



gEnableRssi是一个全局变量,默认是0,不打印RSSI,我们可以通过串口控制它:



收到RSSI和LQI后,可以用公式算一下,我试验的结果是基本相近:

串口收到:00 01 BC 24

网络地址:0x0001

RSSI: BC转换十进制是188, 188-255= -67dBm

LQI:24转换十进制 是36

RSSI=-(81-(LQI*91)/255) = -68.153dBm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: