完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
一.RSSI的概念 RSSI :Received Signal Strength Indication 接收信号强度指示,用来判定链质量,以及是否 增大无线信号发送强度。 RSSI是指接受端芯片内部测量电路所得到的输入信号的平均强度指示。这一测量一般不包括天线增益或者传输系统的损耗。RSSI的实现是在反向通道基带接收滤波器之后进行的。 RSSI:Received Signal Strength Indicator不等同于Rx: Received power 二.cc2530的RSSI 为了获取反向信号的特征,在RSSI中进行如下处理,在104μs进行几代IQ功率积分得到RSSI的瞬时值,在1S内对这8192个瞬时值进行平均值计算,1S内计算方式 RSSI = sum(RSSI)/8192 cc2530芯片有专门读取RSSI的寄存器,当接收到数据包之后,CC2530讲该数据写入寄存器。 RSSI值与接受信号功率的换算关系为 P = RSSI_value + RSSI_OFFSET[dBm] RSSI_OFFSET是经验值一般为-45 三.cc2530获取RSSI值 RSSI值与接受信号功率的换算关系为 P = RSSI_value + RSSI_OFFSET[dBm] 1 RSSI_OFFSET是经验值一般为-45 三.cc2530获取RSSI值 (一)获取函数 1.函数声明 uint8 basicRfReceive(uint8 *pRxData, uint16 len, int16 *pRssi) 1 解释 函数接收len字节数据进入pRxData同时将信号RSSI存入pRssi uint8 basicRfReceive(uint8 *pRxData, uint16 len, int16 *pRssi) { // Accessing shared variables -> this is a critical region // Critical region start halIntOff(); memcpy(pRxData, rxi.pPayload, MIN(rxi.length, len)); if (pRssi != NULL) { if (rxi.rssi < 128) { *pRssi = rxi.rssi - halRfGetRssiOffset(); } else { *pRssi = (rxi.rssi - 256) - halRfGetRssiOffset(); } } rxi.isReady = FALSE; halIntOn(); // Critical region end return MIN(rxi.length, len); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 不同版本的函数不一样 但是只要认准RSSI即可。 (二)函数写入 在前一张基础上 将接受数据打印到串口并且显示RSSI的值 #include "hal_defs.h" #include "hal_cc8051.h" #include "hal_int.h" #include "hal_mcu.h" #include "hal_board.h" #include "hal_led.h" #include "hal_rf.h" #include "basic_rf.h" #include "hal_uart.h" #include #include #include #include "TIMER.h" #include "hal_uart.h" #define MAX_SEND_BUF_LEN 128 #define MAX_RECV_BUF_LEN 128 unsigned char len = 0; //串口数据接收长度 #define MAX_UART_SEND_BUF_LEN 128 #define MAX_UART_RECV_BUF_LEN 128 uint8 uTxData[MAX_UART_SEND_BUF_LEN]; uint8 uRxData[MAX_UART_RECV_BUF_LEN]; //uRxData[0]={'1'}; uint16 uTxlen = 0; uint16 uRxlen = 0; #define RF_CHANNEL 24 #define PAN_ID 0x11 #define MY_ADDR 0x1015 #define SEND_ADDR 0xAC3A static basicRfCfg_t basicRfConfig; // 无线RF初始化 void ConfigRf_Init(void) { basicRfConfig.panId = PAN_ID; //zigbee的ID号设置 basicRfConfig.channel = RF_CHANNEL; //zigbee的频道设置 basicRfConfig.myAddr = MY_ADDR; //设置本机地址 basicRfConfig.ackRequest = TRUE; //应答信号 while(basicRfInit(&basicRfConfig) == FAILED); //检测zigbee的参数是否配置成功 basicRfReceiveOn(); // 打开RF } void Recv_UR_Data() { len = halUartRxLen(); if(len != 0) { len = 0; halUartRead(uTxData, len); basicRfSendPacket(SEND_ADDR, uTxData, len); } } void Recv_RF_Data() { int16 *Rssi = NULL; char *buf = ' |