Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

High power consumption of softdevice

Hello!

I am working on firmware for device that has freertos in the base and implements BLE beacon and 1 service with 7 characteristics. Everything works. But power consumption is too high.

After plenty of tests on final HW, I've created playground based on ble_app_hrs_freertos_pca10040_s132 sample project and switched to sparkfun board.

When have just FreeRTOS with no user-defined tasks, consumption is about 1uA.

After I call  ble_stack_init with code below, I got about 500uA. It is without advertising at all.

static void ble_stack_init(void)
{
    ret_code_t err_code;

    err_code = nrf_sdh_enable_request();
    APP_ERROR_CHECK(err_code);

    // Configure the BLE stack using the default settings.
    // Fetch the start address of the application RAM.
    uint32_t ram_start = 0;
    err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);
    APP_ERROR_CHECK(err_code);

    // Enable BLE stack.
    err_code = nrf_sdh_ble_enable(&ram_start);
    APP_ERROR_CHECK(err_code);

    // Register a handler for BLE events.
    NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
}

When beacon is enabled I have cca 650uA.

When GATT and beacon are working I have cca 750uA.

I measure with multimeter.

Results seems fine for me except for those 500uA after stack is initialized. Why is it so high? What can I do to lower it?

  • SDK v 15.0
  • NRF_LOG_ENABLED is 0
  • Using RELEASE configuration.
  • Tried S132 and S140 - result is the same
Parents
  • I had similar issue, but after setting NRF_LOG_ENABLED  and NRF_LOG_UART_BACKEND_ENABLED  to 0 in sdk_config.h, my current consumption dropped exactly by 500ua after full recompilation. Maybe this would help someone. 

    UPD: I found out that running some TASKS_START with some peripherals causes to significantly increase current consumption of softdevice. It's beyond my understanding, but, as an example, executing this: 

    NRF_QDEC ->TASKS_START = 1;
    nrf_delay_ms(1000);
    NRF_QDEC ->TASKS_STOP = 1;

    results in increased power consumption. Also, some other peripherals trigger this behavior, but current increase dosen't stack.

    UPD2: My falut. adding NRF_QDEC -> ENABLE= 1; allows QDEC to stop, but i still cant get QDEC running with less that 500ua

Reply
  • I had similar issue, but after setting NRF_LOG_ENABLED  and NRF_LOG_UART_BACKEND_ENABLED  to 0 in sdk_config.h, my current consumption dropped exactly by 500ua after full recompilation. Maybe this would help someone. 

    UPD: I found out that running some TASKS_START with some peripherals causes to significantly increase current consumption of softdevice. It's beyond my understanding, but, as an example, executing this: 

    NRF_QDEC ->TASKS_START = 1;
    nrf_delay_ms(1000);
    NRF_QDEC ->TASKS_STOP = 1;

    results in increased power consumption. Also, some other peripherals trigger this behavior, but current increase dosen't stack.

    UPD2: My falut. adding NRF_QDEC -> ENABLE= 1; allows QDEC to stop, but i still cant get QDEC running with less that 500ua

Children
Related