This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

2530下 无协议栈 获取RSSI 问题



各位大牛:

        现在在做2530的通信,因为数据量的要求,不运行zstack协议栈,而利用广播的方式,然后转发进行通信。接收端禁止帧过滤。

        自己写一个针对我的应用的简单的协议栈。在最佳路由选取方面,现在需要得到链路质量,即:需要RSSI或者LQI之类的东西。网上的资料都是说协议栈下,收到的消息中封装的有RSSI,然后根据公式得到其他。即: rssi = pkt->rssi;

        2530的数据手册上说,若RSSISTAT不为0的情况下,寄存器RSSI(接收信号强度指示器)中的RSSI_VAL值,即表示信号强度,其数字值为8 位有符号的二进制补码。

       

 网上的一个RF代码:

发射时:

RFD = len + 2;  

for (int i = 0; i < len; i++)
{
    RFD = *pbuf++;
}

接收端:   

rf_rx_len = RFD - 2; // 长度去除两字节附加结朿
rf_rx_len &= 0x7F; 
for (int i = 0; i < rf_rx_len; i++)
{
    RF_RecvBuf[i] = RFD; // 连续读取接收缓冲区内容 }
}
rssi = RFD - 73; // 读取RSSI结果
crc_ok = RFD; // 读取CRC校验结果 BIT7

这里从接收的数据中也得到了一个rssi

做一个测试:发射端周期500ms发射数据,接收端从距离为0,移动到距离50m,即,收不到数据。输出rssi和RSSI,对比:

D0 F8         CF F4         D5 FC         CF FB         C8 F2         CF F7         CD F7         CF F7         CD F6         CE F7         CB F4         C7 F1         C6 F1         C7 FA

C3 F0         C8 F5         C6 F3          C4 F8         C4 F3         C6 F3         C2 F2          BA EE         B8 EE         B2 F2          B5 EF         A4 E7         BC F3         BD F5

BA EF         B2 ED         B7 EB         B4 EC         AE EA        B6 EE         B3 EC         B5 ED         B6 F6          B3 EB         AC E9         B2 F4         A7 E9         AB EA

A5 E8         AF F0          9E E4         AB E9         AB E9         A4 E7          A8 E8          AB E9          A8 E8          A2 E6          A4 E7         A5 E7         A9 EB         9E E9 

9F E4         9E E5 

前一个是rssi,后一个为RSSI

请问,rssi是怎么附加得到的?为什么不同于读寄存器RSSI得到的数据,经过了什么运算?