当前文档版本为 v0.7.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

RSSI应用参考

1 功能介绍

PAN3029读取RSSI功能是指在芯片接收到数据时,读取当前数据包的信号强度值的功能。在收到RX_IRQ信号之后,直接读取寄存器获取RSSI值。

2 软件设计参考

2.1 软件设计流程

1、芯片初始化;

2、配置相关参数;

3、芯片进入接收模式;

4、芯片接收数据,并读取RSSI值。

2.2 软件设计验证

参照SDK Rx Demo。

2.2.1 SDK示例

参考代码:

ret = rf_init();												//初始化
if(ret != OK)
{
    printf("  RF Init Fail");
    while(1);
}
rf_set_default_para();											//配置参数
rf_enter_continous_rx();										//进入连续接收模式
while (1)
{ 
    rf_irq_process();		//3029中断处理
    key_scan();
    key_event_process();
    process_rf_events();		//事件处理
}			

示例代码配置了连续接收模式,并在接收到数据后,将接收到的数据内容及SNR、RSSI值打印出来。

void rf_irq_process(void)
{
    if(pan3029_irq_trigged_flag == true)
    {
        pan3029_irq_trigged_flag = false;	
        uint8_t irq = rf_get_irq();
        printf("irq:%x\r\n",irq);
        if(irq & REG_IRQ_RX_PLHD_DONE)
        {
            RxDoneParams.PlhdSize = rf_get_plhd_len();
            rf_set_recv_flag(RADIO_FLAG_PLHDRXDONE);
            RxDoneParams.PlhdSize = rf_plhd_receive(RxDoneParams.PlhdPayload, RxDoneParams.PlhdSize);
        }
        if(irq & REG_IRQ_RX_DONE)
        {
            RxDoneParams.Snr = rf_get_snr();
            RxDoneParams.Rssi = rf_get_rssi();
            rf_set_recv_flag(RADIO_FLAG_RXDONE);
            RxDoneParams.Size = rf_receive(RxDoneParams.Payload);
        }		
        if(irq & REG_IRQ_CRC_ERR)
        {
            rf_set_recv_flag(RADIO_FLAG_RXERR);
            rf_clr_irq();
        }		
        if(irq & REG_IRQ_RX_TIMEOUT)
        {
            rf_set_refresh();
            rf_set_recv_flag(RADIO_FLAG_RXTIMEOUT);
            rf_clr_irq();
        }
        if(irq & REG_IRQ_TX_DONE)
        {
            rf_set_transmit_flag(RADIO_FLAG_TXDONE);
            rf_clr_irq();
        }
    }
}

3029中断处理函数中,当芯片接收到数据,产生REG_IRQ_RX_DONE(RX_IRQ)中断时,通过PAN3029_get_rssi接口函数读取当前数据包的信号强度值。

2.2.2 验证结果

串口助手显示结果为:

wps18

图 2-1 串口助手显示结果

3 注意事项

3.1 关于RSSI

RSSI功能读取信号强度值需要在接收到数据包的时候读取,且在清除rxdone中断之前。如果清除中断,这个值就会失效。RSSI的测量范围是-10到-125,不同参数(SF、BW)模式下,测量范围略有不同。