主题中讨论的其他器件: 测试2
RSSI 和 LQI 读数是固定的、但 CC1101可以正常通信。
RSSI 和 LQI 寄存器数据总是恒定的、只有在无法接收时才会改变。
我已经尝试直接从相应的寄存器0x33 [0xF3]和0x34 [0xF4]中读取。
我还尝试了启用特定寄存器设置、设置0x07:PKTCTRL1为0x05、然后读取缓冲区后面的两个位。
RSSI 和 LQI 寄存器数据保持不变、使我无法获取 RSSI 和 LQI 值、因此我无法测量天线的质量。
我是否需要在特定时间点(例如收到数据包后)读取 RSSI 和 LQI 值?
我是否需要配置任何特定的寄存器或设置才能正确读取 RSSI 和 LQI?
我的硬件和天线配置是否会影响 RSSI 和 LQI 读数?
是否有任何可能影响 RSSI 和 LQI 读数的特定信号条件或环境因素?
以下是我的设置。
typedef 结构
{
uint8_t iocfg0;// GDO0输出引脚配置
uint8_t fifoTHR;// RX FIFO 和 TX FIFO 阈值
uint8_t sync1;//同步字、高字节
uint8_t sync0;//同步字、低字节
uint8_t pktlen;//数据包长度
uint8_t pktctrl0;//数据包自动化控制
uint8_t fsctrl1;//频率合成器控制
uint8_t freq2;//频率控制字、高字节
uint8_t freq1;//频率控制字、中间字节
uint8_t freq0;//频率控制字、低字节
uint8_t mdmcfg4;//调制解调器配置
uint8_t mdmcfg3;//调制解调器配置
uint8_t mdmcfg2;//调制解调器配置
uint8_t mdmcfg1;//调制解调器配置
uint8_t devatn;//调制解调器偏差设置
uint8_t mcsm0;//主无线电控制状态机配置
uint8_t foccfg;//频率偏移补偿配置
uint8_t agcctrl2;// AGC 控制
uint8_t agcctrl1;// AGC 控制
uint8_t worctrl;//无线电控制唤醒
uint8_t fscal3;//频率合成器校准
uint8_t fscal2;//频率合成器校准
uint8_t fscal1;//频率合成器校准
uint8_t fscal0;//频率合成器校准
uint8_t test2;//各种测试设置
uint8_t test1;//各种测试设置
uint8_t test0;//各种测试设置
} RF_SETTINGS;
静态 RF_SETTINGS E07x_InitSeting ={
0x06、// IOCFG0 GDO0输出引脚配置
0x47、// FIFOTHR RX FIFO 和 TX FIFO 阈值
0x7A、//同步字、高字节
0x0E、// SYNC0同步字、低字节
0x14、// PKTLEN 数据包长度
0x05、// PKTCTRL0数据包自动化控制
0x06、// FSCTRL1频率合成器控制
0x10、// FREQ2频率控制字、高字节
0xB1、// FREQ1频率控制字、中间字节
0x3B、// FREQ0频率控制字、低字节
0xF5、// MDMCFG4调制解调器配置
0x83、// MDMCFG3调制解调器配置
0x13、// MDMCFG2调制解调器配置
0x02、// MDMCFG1调制解调器配置
0x31、// DEVIATN 调制解调器偏差设置
0x18、// MCSM0主无线电控制状态机配置
0x16、// FOCCFG 频率偏移补偿配置
0x43、// AGCCTRL2 AGC 控制
0x49、// AGCCTRL1 AGC 控制
0xFB、//无线控制唤醒
0xE9、// FSCAL3频率合成器校准
0x2A、// FSCAL2频率合成器校准
0x00、// FSCAL1频率合成器校准
0x1F、// FSCAL0频率合成器校准
0x81、// TEST2各种测试设置
0x35、// TEST1各种测试设置
0x09、// TEST0各种测试设置
};
静态 uint8_t E07x_Config (uint32_t frequency、uint32_t data_rate、uint32_t frequency_dev、uint32_t bandwidth、
int8_t output_power、uint16_t prema_size、uint16_t sync_word、uint8_t crc)
{
uint8_t 结果;
uint8_t reg_value;
/*计算:载波频率
*寄存器起始地址0x0D */
结果= E07x_SetFrequency (FREQUENCY);
if (结果!= 0)
返回1;
/*计算:风速
* MDMCFG4 MDMCFG3寄存器地址:0x10 0x11 */
E07x_SetDataRate (DATA_RATE);
/*计算:频率偏差
* DEVIATN 寄存器地址:0x15 */
E07x_SetFrequencyDeviation (FREQUENCY_DEV);
/*计算:接收带宽
* MDMCFG4寄存器地址:0x10 */
E07x_SetChannelBandwidth (bandwidth);
/*计算:输出功率
*寄存器地址: 0x3E */
E07x_SetOutputPower (output_power);
/*调制模式
* MDMCFG2寄存器地址:0x12 */
E07x_SetModulation (1);// GFSK
/*前导码长度
* MDMCFG1寄存器地址:0x13 */
如果(前导码_size > 7)
返回1;//参数检查
e07x_InitSetting.mdmcfg1 &= 0x8F;//清除
e07x_InitSetting.mdmcfg1 |=(前导码大小<< 4);//设置
/*同步字
* SYNC1 SYNC0寄存器地址:0x04 0x05 */
e07x_InitSetting.sync1 =(uint8_t)((sync_word >> 8)和0xFF);//高字节
E07x_InitSetting.sync0 =(uint8_t)(sync_word 和0xFF);//低字节
/* CRC 开关
* PKTCTRL0寄存器地址:0x08 bit 2 */
如果(CRC > 1)
返回1;//参数检查。 只能为0或1
如果(CRC)
{
e07x_InitSetting.pktctrl0 |= 0x04;//开启
}
否则
{
E07x_InitSetting.pktctrl0 &= 0xFB;
}
/*数据包长度:默认为可变长度模式,长度放在数据的第一个字节中
* PKTCTRL0寄存器地址:0x08位[1:0]*/
E07x_InitSetting.pktctrl0 &= 0xFC;//清除
e07x_InitSetting.pktctrl0 |= 0x01;// 0x01模式(可变长度)
/*注意:如果您希望充分使用官方 SmartRF Studio 配置参数、可以注释掉上述修改函数*/
/*将计算出的 E07x_InitSetting 参数表写入模块*/
/// [写入寄存器]
// Discovered:设置 TEST0导致自定义计算频率偏移
//现象:当频率设置为小于411MHz 时,频率锁定在411MHz。 当频率设置为高于411MHz 时、频率切换为正常
//建议:完全使用官方 SmartRF Studio 参数时,取消对 TEST0的注释。 在使用自由参数计算时、请为其添加注释
/*补充:信道编码(可用于跳频)寄存器地址:0x0A */
E07x_SetRegister (0x0A、0);
/*补充:禁用地址过滤寄存器地址:0x07 */
REG_VALUE = E07x_GetRegister (0x07);
REG_VALUE &= 0xFC;//清除
E07x_SetRegister (0x07、reg_value);
/*补充:配置输出功率寄存器地址:0x3E */
E07x_SetRegisters (0x3E、E07x_PaTabel、8);
返回0;
}
#define E07_frequency_start 433000000 // 433 MHz
#define E07_DATA_RATE 1200
#define E07_frequency_exception 14300
#define E07_bandwidth 58000
#define E07_output_power 10
#define E07_preamble_size 4
#define E07_SYNC_WORD 0x2DD4
#define E07_IS_CRC 1
结果= E07x_Config (E07_frequency_start、
E07_DATA_RATE、
E07_frequency_offset、
e07_带宽、
E07_output_power、
e07_preamble_size、
E07_sync_word、
E07_IS_CRC);