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.

CC1310: How to check RF lock status

Part Number: CC1310


Hi,

With older devices like C1120, after performing manual calibration we could check the RF lock status
to ensure stable RF operation.

Similarly in case of CC1310, the after running [CMD_FS: Frequency Synthesizer Controls Command] ,
it returns the calibration status or errors if any.

But how do we check the RF lock status to ensure RF operation is stable?

Can we assume "RF_cmdFs.status = DONE_OK" means lock status is OK?
In case of RF_getInfo() API we could know RF is ON or OFF but not the lock status.

Best Regards
paddu

  • Hi Paddu

    When the status of the CMF_FS reports DONE_OK, you can assume that the synth is in lock. There is however, a possibility that the synth will fall out of lock in cases where you spend a very long time in RX or TX and where the temperature changes significantly.

    If the synthesizer is programmed and reports loss of lock after having been in lock, the radio CPU raises the Synth_No_Lock interrupt. The synthesizer keeps running, but the system CPU may use this information to stop and restart the radio. The Synth_No_Lock interrupt is not raised more than once for each time the synthesizer is programmed. The interrupt may also occur for commands with implicit frequency
    programming.

    We have seen that the Synth_No_Lock interrupt has been raised falsely just when entering active mode. In these cases the interrupt will not be raised again if you loose lock after staying in active for a while.

    As long as you are not experiencing big temperature changes you should be safe with just checking that the CMD_FS does not fail.

    BR

    Siri

  • Hi Siri,

    "As long as you are not experiencing big temperature changes you should be safe with just checking that the CMD_FS does not fail."

    How much temperatures change is called "big temperature changes"?

    "If the synthesizer is programmed and reports loss of lock after having been in lock, the radio CPU raises the Synth_No_Lock interrupt"

    In the manual (page 1701), it say that "SYNTH_NO_LOCK" has "Interrupt Number = 28"  , but in the interrupt list "RF_EventMask", there is no this event.

    How to register a callback function? Can I use this command "RF_postCmd (..., RF_EventMask bmEvent)",  or I have to use another way.

    #define   RF_EventCmdDone             (1<<0)   ///< A radio operation command in a chain finished.

    ...

    #define   RF_EventRxAborted           (1<<26)  ///< Packet reception stopped before packet was done

    #define   RF_EventRxCollisionDetected (1<<27)  ///< A collision was indicated during packet reception

    #define   RF_EventModulesUnlocked     (1<<29)  ///< As part of the boot process, the CM0 has opened access to RF core modules and memories

    #define   RF_EventMdmSoft             0x0000002000000000  ///< Synchronization word detected (MDMSOFT interrupt flag)

    Best Regards
    loc

  • It should probably change more than 10 degrees, but I cannot give any exact numbers.

    I took the rfPacketRX example and tested the interrupt by using Freeze Spray. I simply added (1 << 28) to the RF_EventMask:

    RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropRx,
                                                       RF_PriorityNormal, &callback,
                                                       (RF_EventRxEntryDone | (1 << 28)));

    BR

    Siri

  • I wrote a program to check the RF lock status. I do not know if my solution is right or not so I want to confirm with you.

    Setting a chain of command for sending data:

    RF_cmdPropCs.status = 0;
    RF_cmdPropCs.pNextOp = (rfc_radioOp_t*) &RF_cmdPropTx;
    RF_cmdPropCs.condition.rule = COND_STOP_ON_TRUE;/* run until channel is busy */
    RF_cmdPropCs.condition.nSkip = 1;
    RF_cmdPropCs.csEndTime = (CS_200US) * 4;

    RF_cmdPropTx.status = 0;
    RF_cmdPropTx.pNextOp = (rfc_radioOp_t*) &RF_cmdPropCs;
    RF_cmdPropTx.condition.rule = COND_STOP_ON_FALSE;/* Run forever */
    RF_cmdPropTx.condition.nSkip = 1;

    Commands begin to transmit signals:

    rx_cmd = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropCs, RF_PriorityNormal, &rf_clbk_TX_Fxn,
                                        RF_EventCmdDone|RF_EventLastCmdDone|RF_EventTxDone|RF_EventTxRetrans|RF_EventTxEntryDone|(1 << 28));/* SYNTH_NO_LOCK*/

    In the callback interrupt handler:

    void rf_clbk_TX_Fxn(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)

    {

    if (e & (1<<28) )/*Loss lock */

    {

    isLossLock = true;

    }

    }

    And when detected "loss lock" will reset the RF

    if (isLossLock)

    {

    /* RF_resetRF */

    RF_flushCmd(rfHandle, rx_cmd, 0);
    RF_pendCmd(rfHandle, rx_cmd, RF_EventLastCmdDone);
    RF_close(rfHandle);


    /* Re-start RF */
    RF_Params rfParams;
    RF_Params_init(&rfParams);
    rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);

    isLossLock = false;

    /*Start sent again */

    rx_cmd = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropCs, RF_PriorityNormal, &rf_clbk_TX_Fxn, 
                                        RF_EventCmdDone|RF_EventLastCmdDone|RF_EventTxDone|RF_EventTxRetrans|RF_EventTxEntryDone|(1 << 28));/* SYNTH_NO_LOCK*/

    }

    What causes the loss lock state, other than "spend a very long time in RX or TX and where the temperature changes significantly", then the other causes? Such as strong bumps can cause loss of lock state or not?

  • There is no need to do a RF_close when the synth falls out of lock or calibration fails. You simply need to cancel the commands you have running and then do a new CMD_FS. I recommend that you test your error handling code by doing the following:

    1) test for initial calibration failure by setting the frequency to 0 (then the calibration will fail).

    2) Test the out-of-lock error handling by using a freeze spray.

    I do not know of other things that can get the synth out of lock.

    BR
    Siri