This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

current consumption of the radio Module in sleep mode

Hello,

I am developing an IEEE802.15.4 Beacon with the nRF52840-DK, SDK 16 and the nRF-IEEE-802.15.4-radio-driver. My problem is that the consumes ~400uA of current in sleep mode, deiniting the driver doesn't make a difference. With Radio disabled the DK uses ~10uA with a 400uA spike every 28ms.

Can you please help me with reducing the current consumption?

Thanks

#include "sdk_config.h"
#include "nrf.h"
#include "nrf_pwr_mgmt.h"
#include <nrf_802154.h>

#define PWR_DCDC  1
#define PWR_RADIO 1
#define PWR_SLEEP 1

int main(void) {
#if PWR_DCDC
    NRF_POWER->DCDCEN  = 1;
    NRF_POWER->DCDCEN0 = 1;
#endif
#if PWR_SLEEP
    nrf_pwr_mgmt_init();
#endif
#if PWR_RADIO
        nrf_802154_init();
        nrf_802154_sleep();
        //nrf_802154_deinit();
#endif
    while(1) {
#if PWR_SLEEP
        nrf_pwr_mgmt_run();
#endif
    }
}

  • Hi

    A current consumption of ~400µA typically means that the HF clock is running for some reason, so there is likely a peripheral using the HF clock that is not uninitialized properly. I see that you call nrf_802154_sleep(); before nrf_802154_deinit(); which might be the reason you're not able to go to sleep. Try uninitializing the radio before going to sleep.

    The spikes when the radio is disabled likely means that the HF clock wakes up to check/do something. Do you have a timer running on the LF clock that wakes up the HF clock to do something every now and then?

    Best regards,

    Simon

  • Hi Simon,

    I call nrf_802154_sleep() or nrf_802154_deinit(), but it doesn't make any difference because the seems to initilize into sleep state and neither sleep() nor deinit() stops the timer. I tried stoping the timer with NRF_TIMER0->TASKS_STOP = 1, that worked in the timer example but didn't help here. How do I stop the timer in the radio driver.

    I think the spikes are comming from the DC/DC converter as explained in this thread.

  • Okay, can you show me what these functions actually do, as I have no way of seeing how you go to sleep or deinitialize your radio with the current information?

    Best regards,

    Simon

  • Hi,

    the nrf_802154_...() functions are Nordic radio driver functions (link to github in the first post). I added a .zip with the project including makefile, sdk_config.h and linker script.

    test_firmware.zip

  • Hi

    Sorry, I don't know how I missed that. In any case, it seems that the nrf_802154_sleep() function doesn't actually disable the HF clock in any way, at least as far as I can see. The nrf_802154_deinit() function, however, does disable and uninit the HF clock if it is added to an SDK correctly. It ends up calling the nrf_drv_clock_uninit, which is defined in the nrf_drv_clock.c file in SDK v.16.0.0. Can you check whether that function is actually called (set a breakpoint) when debugging to make sure it is called when you use the deinit function?

    Best regards,

    Simon

Related