si4463如何读取RSSI

si4463可以读取接收信号强度(RSSI),可以做载波侦听用,在发送数据之前,检测信道上是否有其他模块在发送数据,如果有就采取一定的退避算法,延迟一段时间后,再次检测是否信道空闲,如果空闲则发送数据。


在项目中,我参照silabs官方提供的ezmacpro协议,实现了载波侦听功能。


读取RSSI的方法有两种

1.GET_MODEM_STATUS命令来获取CURR_RSSI和LATCH_RSSI

2.直接读取Fast Response Register A ,这种方式速率比较快.

 void si446x_get_modem_status( u8 MODEM_CLR_PEND )
{  
    u16 temp ;
    
    Pro2Cmd[0] = SI446X_CMD_ID_GET_MODEM_STATUS;
    Pro2Cmd[1] = MODEM_CLR_PEND;

    radio_comm_SendCmdGetResp( SI446X_CMD_ARG_COUNT_GET_MODEM_STATUS,
                              Pro2Cmd,
                              SI446X_CMD_REPLY_COUNT_GET_MODEM_STATUS,
                              Pro2Cmd );

    Si446xCmd.GET_MODEM_STATUS.MODEM_PEND   = Pro2Cmd[0];
    Si446xCmd.GET_MODEM_STATUS.MODEM_STATUS = Pro2Cmd[1];
    Si446xCmd.GET_MODEM_STATUS.CURR_RSSI    = Pro2Cmd[2];
    RISSData = Pro2Cmd[2] ;
    Si446xCmd.GET_MODEM_STATUS.LATCH_RSSI   = Pro2Cmd[3];     
    Si446xCmd.GET_MODEM_STATUS.ANT1_RSSI    = Pro2Cmd[4];
    Si446xCmd.GET_MODEM_STATUS.ANT2_RSSI    = Pro2Cmd[5];
    temp = Pro2Cmd[6] ;
    temp = ( temp<<8 )+ Pro2Cmd[7] ;
    Si446xCmd.GET_MODEM_STATUS.AFC_FREQ_OFFSET = temp ;
}

斗破苍穷 2014-6-4 09:25:51

RSSI 如果要读取准确的话! 检测到有效前导就读 ? 什么意思啊?
09:26:00
斗破苍穷 2014-6-4 09:26:00

在什么时候来读取啦?

★龙行天下★ 2014-6-4 09:26:13

你发射数据不带前导吗

★龙行天下★ 2014-6-4 09:26:15

01010101

斗破苍穷 2014-6-4 09:26:23

带啊

斗破苍穷 2014-6-4 09:26:54

我的意思是,是需要开启检测到前导中断,在中断中来读取吗?

★龙行天下★ 2014-6-4 09:26:53



★龙行天下★ 2014-6-4 09:27:08


si4463如何读取RSSI_第1张图片
★龙行天下★ 2014-6-4 09:27:14

这个中断打开

★龙行天下★ 2014-6-4 09:27:20



★龙行天下★ 2014-6-4 09:27:48

因为这个时候数据是一直发射的

★龙行天下★ 2014-6-4 09:27:55

这个时候RSSI才准确
09:28:10
★龙行天下★ 2014-6-4 09:28:10

也不用平均
09:37:07
斗破苍穷 2014-6-4 09:37:07

是在中断里面来读吗? 中断里面读取来得及吗?

★龙行天下★ 2014-6-4 09:37:24

很快的











你可能感兴趣的:(si4463)