各位大牛:
现在在做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得到的数据,经过了什么运算?