最近在用CC1110做无线数据收发距离实验,固定端不断的发送,接收端收到后回发。 接收端从近距离以大约20KM/H的速度远离过程中,就会出现接收端射频假死(CC1110外接的另外一个秒闪LED工作是正常的)的状态(步行不会),需要重新上电后又能正常工作。如果接收端固定在一个点上再打开电源,则工作很稳定,长时间也不会出现射频假死状态。
射频部分使用的是SimpliciTI 的mrfi和bsp驱动。
Nutcracker:
原理上判断很可能是 AGC 响应的问题。除了重新上电,应该 Reset 和重新 Calibrate 也可行。
jacky jacky:
回复 Nutcracker:
多谢解答,目前还发现在接收端从近距离,用步行的速度移动到接收不到无线信号的地方后,再一次回到有信号的地方,也同样会出现接收假死的状态。
根据您提到的可能原因,除了重启外(实际工作中不允许重启和重新上电。),我在软件里面是否可以做某种处理,避免你提到的情况?
jacky jacky:
回复 Nutcracker:
另外补充一下,目前使用的配置,MCSM0=0x18 , 其中的FS_AUTOCAL为01,01 : When going from IDLE to RX or TX (or FSTXON)
Nutcracker:
回复 jacky jacky:
附近有干扰吗?换个场地测试也有类似情况吗?比不能收到的地方更远的位置是可以收到吗?你可以检测RSSI吗?
jacky jacky:
回复 Nutcracker:
换了场地也会出现, ,我的软件根据RSSI的大小让一个LED由快到慢闪烁。。是这样,在逐渐远离过程中,进入信号比较弱的地方,有时候就会假死,重新上电后还能继续收到。假死后,返回信号强的地方也不会收到,必须要重新上电。
jacky jacky:
回复 Nutcracker:
目前采用了一个笨办法就是定时重新初始化射频部分,就可以解决上面出现的问题。但是不知道原因还是一个隐患。
while(1) { if(i++>60000) { MRFI_Init(); Set_RF_bandrate(); MRFI_SetLogicalChannel(get_RF_ch()); MRFI_SetRFPwr(HIGH_POWER); Open_Radio(); i=0; }
ohter task……
}
Nutcracker:
回复 Nutcracker:
假死是处于 Idle 还是 Sleep 状态? WoR(Wake on Radio) Enable 了吗?
jacky jacky:
回复 Nutcracker:
由于我的应用不在乎功耗,所以没有启用WOR,而是初始化完成MRFI后,最后是调用MRFI_RxOn()后就一直等待MRFI的中断。所以常态应该是一直处于RX状态
CC1110好像没有专门的WOR enable吧?
void MRFI_RxOn(void){ /* radio must be awake before we can move it to RX state */ MRFI_ASSERT( mrfiRadioState != MRFI_RADIO_STATE_OFF );
/* Put the radio in RX state, if not already */ if(mrfiRadioState != MRFI_RADIO_STATE_RX) { mrfiRadioState = MRFI_RADIO_STATE_RX; Mrfi_RxModeOn(); }}
Nutcracker:
回复 jacky jacky:
对 CC1110 来说是 Power Mode Control。MCU 和 Radio 是有共享寄存器的。Power Mode (PM 0-2)
请参考 DS:12.8.2 Sleep Timer and Power Modes
所以请查一下是死在哪个 PM 上。如果不在乎功耗,可以调整一下 PM。
jacky jacky:
回复 Nutcracker:
目前的程序没有让CC1110进入任何PM,一直是ACTIVE