This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

cc1110 移动状态下射频接收假死的问题

Other Parts Discussed in Thread: SIMPLICITI

最近在用CC1110做无线数据收发距离实验,固定端不断的发送,接收端收到后回发。 接收端从近距离以大约20KM/H的速度远离过程中,就会出现接收端射频假死(CC1110外接的另外一个秒闪LED工作是正常的)的状态(步行不会),需要重新上电后又能正常工作。如果接收端固定在一个点上再打开电源,则工作很稳定,长时间也不会出现射频假死状态。

射频部分使用的是SimpliciTI 的mrfi和bsp驱动。

  • 原理上判断很可能是 AGC 响应的问题。除了重新上电,应该 Reset 和重新 Calibrate 也可行。

  • 多谢解答,目前还发现在接收端从近距离,用步行的速度移动到接收不到无线信号的地方后,再一次回到有信号的地方,也同样会出现接收假死的状态。

    根据您提到的可能原因,除了重启外(实际工作中不允许重启和重新上电。),我在软件里面是否可以做某种处理,避免你提到的情况?

  • 另外补充一下,目前使用的配置,MCSM0=0x18 , 其中的FS_AUTOCAL为01,01 : When going from IDLE to RX or TX (or FSTXON)

  • 附近有干扰吗?换个场地测试也有类似情况吗?比不能收到的地方更远的位置是可以收到吗?你可以检测RSSI吗?

  • 换了场地也会出现,  ,我的软件根据RSSI的大小让一个LED由快到慢闪烁。。是这样,在逐渐远离过程中,进入信号比较弱的地方,有时候就会假死,重新上电后还能继续收到。假死后,返回信号强的地方也不会收到,必须要重新上电。

  • 目前采用了一个笨办法就是定时重新初始化射频部分,就可以解决上面出现的问题。但是不知道原因还是一个隐患。

    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......

    }

  • 假死是处于 Idle 还是 Sleep 状态? WoR(Wake on Radio) Enable 了吗?

  • 由于我的应用不在乎功耗,所以没有启用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();
    }
    }

  • 对 CC1110 来说是 Power Mode Control。MCU 和 Radio 是有共享寄存器的。Power Mode (PM 0-2)

     请参考 DS:12.8.2  Sleep Timer and Power Modes

    所以请查一下是死在哪个 PM 上。如果不在乎功耗,可以调整一下 PM。

  • 目前的程序没有让CC1110进入任何PM,一直是ACTIVE

  • 有没有读一下Errata Notes, 排除 Rx Overflow?

    http://www.ti.com/lit/er/swrz022c/swrz022c.pdf

    2.2 Suggested Work-around
    In applications where the DMA is used to read the RFD register, it is important to configure the DMA in
    accordance with the chosen radio configuration. Please see DN107 for more details on how this
    should be done. If the RFD register is read manually, it is important that the register is read when the
    RFTXRXIF flag in the TCON register has been asserted. If the RFTXRX interrupt is used, it is
    important that this interrupt has a high priority. If a polling scheme is used, one needs to make sure
    that interrupts that are enabled will not prevent the RFD register to be read before a new byte is
    received.

  • 好的,等我再研究一下。这个现象似乎是在信号较弱的情况下,一旦模块的移动造成信号的大幅跌落,AGC来不及响应。推测会不会有可能是一帧数据接收了一半的时候,信号丢失了。造成DMA或者射频死锁了。到底是DMA死锁了,还是radio死锁了,我应该如何判断呢?