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.

CC2543: Confirm the way to do the reset of RF block

Guru 24520 points
Part Number: CC2543
Other Parts Discussed in Thread: CC2544

Hi TI Experts,

Please let me confirm the following question.
[Question]
Is there any way to do the reset to only the RF block on CC2543?

Best regards.
Kaka

  • Hello KaKa,

    The radio (PHY) is reset in miniBlePhyInit() when using the mini BLE broadcaster example. Please note that resetting the radio outside of the SW init sequence may cause unexpected behaviour.

    Best wishes
  • Hi JXS,

    Thank you for your response.
    My customer have used this device in proprietary mode. So, would you please teach me the reset method in case of using this mode?

    And according to your comments of "Please note that resetting the radio outside of the SW init sequence may cause unexpected behaviour.", I understood that they could not do the Radio Phy reset except SW init function. But customer would like to do it when the RF is working. So, in this case, how do they do it? They have only the way to reset the device?

    Best regards.
    Kaka
  • Hi Kaka,

    The same source code can be used to see the actual register sequences.

    Beyond that, what is driving the need to reset the RF when the device is working? What issue are they trying to solve?

    Best wishes
  • Hi JXS,

    Thank you for your response.
    I could understand that customer can use the same register sequence for RF core reset. For your question, some of their systems was hung - up when they have evaluated it. It is very rare so they could not find the cause of this issue. And they could not do the MCU reset in order to keep their system operating. This is why they would like to do the reset the RF core when their system will hung-up.

    Best regards.
    Kaka
  • Hi JSX,

    Thank you for your supports.
    I am waiting for your kind feedback.... Would you please provide your answer by end of today?

    Best regards.
    Kaka
  • Hi KaKa,

    As you know, the RF Core is comprised of multiple components - these are described in the CC254x User Guide. There is no single 'reset the RF Core' option. I suggest you advise them to follow the register sequences that I provided to re-initialize the respective radio elements.
    Additionally, you can reset the LLE in the same manner this is accomplished when going into PM2/3. From halSleepEnterPowerMode:
    // Set LLE in Reset to avoid unknown state on wake-up.
    LLECTRL &= ~LLECTRL_LLE_EN;

    I hope this helps.

    Best wishes
  • Hi JXS,

    Thank you for your advice. I understand that they can use the sleep mode(2 or 3) for RF reset. Right?
    If yes, they can use the following function for reset. Is this correct?
    Note: This code is including the TI sample code of swrc251b.

    /*******************************************************************************
    * @fn halSleepEnterPowerMode
    *
    * @brief Set device into PM0, PM1, PM2 or PM3.
    *
    * @param uint8 powerMode:
    * 0 - Enter PM0
    * 1 - Enter PM1
    * 2 - Enter PM2 (NA on CC2544)
    * 3 - Enter PM3 (NA on CC2544)
    *
    * @return void
    */
    void halSleepEnterPowerMode(uint8 powerMode) {
    #if(chip==2544)
    if(powerMode) {
    powerMode = 1;
    }
    #endif

    // Set power mode.
    SLEEPCMD = ((SLEEPCMD & ~SLEEPCMD_MODE) | powerMode);

    if(powerMode > 1) {
    // Set LLE in Reset to avoid unknown state on wake-up.
    LLECTRL &= ~LLECTRL_LLE_EN;
    }
    else {
    // Going to halt CPU, dividide down system clock to reduce current consumption.
    clockSetMainClkSpeed(CLKCON_CLKSPD_2M);
    }

    /* Enter powermode
    * Sets PCON.IDLE with a 2-byte boundary assembly instruction.
    * NOTE: Cache must be enabled (see CM in FCTL).
    * This method gives the least current consumption. */
    EnterSleepModeProcessInterruptsOnWakeup();

    if(powerMode > 1) {
    // Re-Enable the radio.
    LLECTRL |= LLECTRL_LLE_EN;
    }

    /* Make sure that system clock is 32 MHz without division after wakeup.
    * This function will also wait until the 32 MHz clock is stable */
    clockSetMainSrc(CLOCK_SRC_XOSC);
    }
    ***********************
    Best regards.
    kaka