NRF54L15-DK : How to configured fully Radio Off/Disable ?

Hello Nordic Team,

Currently, we are performing power consumption testing using the Nordic nRF54L15-DK development kit.

As part of this, I aim to fully disable the Radio/RF module to evaluate baseline power usage.

To achieve this, I use the smoke_co example, which includes Matter functionality.

To disable the RF module, I attempted the following changes in the code:

/ Fully disable the nRF54L15-DK radio
void disable_radio()
{
    // Stop all radio tasks
    NRF_RADIO->TASKS_DISABLE = 1;

    // Wait until the radio is fully disabled
    while (NRF_RADIO->STATE != RADIO_STATE_STATE_Disabled)
    {
        k_msleep(1); // Wait for the radio to transition to the disabled state
    }

    // Stop the high-frequency clock
    //NRF_CLOCK->TASKS_LFCLKSTOP = 1;

    // Disable radio interrupts
    //NVIC_DisableIRQ(RADIO_1_IRQn);

	if(NRF_RADIO->EVENTS_DISABLED==1)
	{
		printk("Radio fully disabled.\n");
	}
}

void verify_radio_disabled()
{
    if (NRF_RADIO->STATE == RADIO_STATE_STATE_Disabled && NRF_RADIO->EVENTS_DISABLED == 1)
    {
        printk("Radio is fully disabled.\n");
    }
    else
    {
        printk("Radio is not fully disabled. STATE: %d, EVENTS_DISABLED: %d\n",
               NRF_RADIO->STATE, NRF_RADIO->EVENTS_DISABLED);
    }
}

in Overlay file,

&radio {
    status = "disabled";
};

Based on the code above, after calling disable_radio(), we observed the "Radio is fully disabled" message printed from the verify_radio_disabled() function.

After applying these changes, we attempted to pair the nRF device with the Matter OTBR. The device was successfully commissioned using the chip-tool.

After commissioning, we executed the descriptor read client-list 0x2233 0 command.
Received Matter stack-specific logs on the nRF console.

Kindly suggest how we can fully disable the RF/RADIO and how to enable it again.

Thanks & Regards,
Pratik Panchal

Parents
  • Hello,

    After disabling the radio using NRF_RADIO->TASKS_DISABLE = 1; and confirming RADIO interrupts are cleared after the radio is no longer active (what you have done in your code), you can try to disable the radio INTENCLR00 and INTENCLR01 interrupts  https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/radio.html#ariaid-title98 .

    void disable_radio()
    {
        // Stop all radio tasks
        NRF_RADIO->TASKS_DISABLE = 1;
    
        // Wait until the radio is fully disabled
        while (NRF_RADIO->STATE != RADIO_STATE_STATE_Disabled)
        {
            k_msleep(1); // Wait for the radio to transition to the disabled state
        }
    
        // Disable all radio interrupts
        NRF_RADIO->INTENCLR00 = 0xFFFFFFFF;
        NRF_RADIO->INTENCLR10 = 0xFFFFFFFF;
    
        // Optionally, disable the NVIC interrupt as well
        // NVIC_DisableIRQ(RADIO_1_IRQn);
    
        if (NRF_RADIO->EVENTS_DISABLED == 1)
        {
            printk("Radio fully disabled.\n");
        }
    }

Reply
  • Hello,

    After disabling the radio using NRF_RADIO->TASKS_DISABLE = 1; and confirming RADIO interrupts are cleared after the radio is no longer active (what you have done in your code), you can try to disable the radio INTENCLR00 and INTENCLR01 interrupts  https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/radio.html#ariaid-title98 .

    void disable_radio()
    {
        // Stop all radio tasks
        NRF_RADIO->TASKS_DISABLE = 1;
    
        // Wait until the radio is fully disabled
        while (NRF_RADIO->STATE != RADIO_STATE_STATE_Disabled)
        {
            k_msleep(1); // Wait for the radio to transition to the disabled state
        }
    
        // Disable all radio interrupts
        NRF_RADIO->INTENCLR00 = 0xFFFFFFFF;
        NRF_RADIO->INTENCLR10 = 0xFFFFFFFF;
    
        // Optionally, disable the NVIC interrupt as well
        // NVIC_DisableIRQ(RADIO_1_IRQn);
    
        if (NRF_RADIO->EVENTS_DISABLED == 1)
        {
            printk("Radio fully disabled.\n");
        }
    }

Children
Related