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

sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE) no effect on power consumption

Hello,

I am working on a wearable device and need the lowest power consumption possible. The project configuration is:

  • S132 7.2.0
  • SDK 17.0.2

The board is powered with a bench power supply which displayed current to mA resolution. I am not seeing any difference in power consumption when the DC/DC regulator is enabled. In previous projects there was a significant difference when this feature was enabled. It does not matter if it is before or after enabling the soft device/BLE.

Parents
  • Hi,

    • What voltage level is the board powered by? The DCDC regulator will affect the current consumption less if the supply voltage is closer to the minimum supply voltage of 1.7 V.
    • What is the measured current consumption? The DCDC regulator will be automatically controlled by the chip, depending on the current draw. It will only be enabled when the current draw is high enough for the DCDC regulator to be more efficient than LDO.
    • I assume that the board is populated with the required components for the DCDC regulator?

    Best regards,
    Jørgen

  • Jorgen,

    First I need to verify that you used SDK 17.0.2 and S132 7.2.0 for your tests below? That code snippet could not be your main.c, is it?

    Note: I discovered that the nRF52832 consumes 3.25mA *more* when running in debug mode. The following graphs are under debug control so we can see each step in the process.

    I want back to the original code base which was SDK 15.2 and S132 6.0. This operation is very different.

    In the old SDK and soft device there is a significant drop in current when nrf_pwr_mgmt_init() is called.

    Note: The current after the program is loaded and the debugger is at main is around 14mA. The same as I see with the new SDK and soft device. However you do not get the significant drop in current in the new code.

    This is the old code from power on, no debugger attachment. The average current is around 7.25mA.

    About 26 seconds after power on the consumption drops to 1.3mA and stays at that level.

    The code using the new SDK and soft device has been stripped down to the following.

    int main(void)
    {
        ret_code_t ret_code;
    
        // Initialize nrf_log module
        // Do not use Deferred processing since the string to be logged must be available when processed
        APP_ERROR_CHECK(NRF_LOG_INIT(get_timestamp_ticks));
        NRF_LOG_DEFAULT_BACKENDS_INIT();
    
        // Initialize app_timer module
        APP_ERROR_CHECK(app_timer_init());
        APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE);
    
        // Initialize BLE operation
        ret_code = nrf_pwr_mgmt_init();
        APP_ERROR_CHECK(ret_code);
    
        ret_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(ret_code);
    
        // NOTE: This is not the same order as Konrad's project. Enabling DCDC befoe enabling the soft
        // device will return an error.
        ret_code = sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
        APP_ERROR_CHECK(ret_code);
    
        while (true) {
        
            // Execute the scheduler upon waking up from an event or interrupt.
            nrf_pwr_mgmt_run();
    
            // Polled execution of services
            nrf_cli_process(&m_cli_rtt);
            app_sched_execute();
        }
    
        return 0;
    }
    

    This code doesn't even initialize the bluetooth stack and this consumes 10.72mA with no debugger attached.

    I would be happy to share my sdk_config.h, main.c and SES project if you think it would help. I believe my only option at this time is to revert to the old SDK and soft device.

    Thanks

Reply
  • Jorgen,

    First I need to verify that you used SDK 17.0.2 and S132 7.2.0 for your tests below? That code snippet could not be your main.c, is it?

    Note: I discovered that the nRF52832 consumes 3.25mA *more* when running in debug mode. The following graphs are under debug control so we can see each step in the process.

    I want back to the original code base which was SDK 15.2 and S132 6.0. This operation is very different.

    In the old SDK and soft device there is a significant drop in current when nrf_pwr_mgmt_init() is called.

    Note: The current after the program is loaded and the debugger is at main is around 14mA. The same as I see with the new SDK and soft device. However you do not get the significant drop in current in the new code.

    This is the old code from power on, no debugger attachment. The average current is around 7.25mA.

    About 26 seconds after power on the consumption drops to 1.3mA and stays at that level.

    The code using the new SDK and soft device has been stripped down to the following.

    int main(void)
    {
        ret_code_t ret_code;
    
        // Initialize nrf_log module
        // Do not use Deferred processing since the string to be logged must be available when processed
        APP_ERROR_CHECK(NRF_LOG_INIT(get_timestamp_ticks));
        NRF_LOG_DEFAULT_BACKENDS_INIT();
    
        // Initialize app_timer module
        APP_ERROR_CHECK(app_timer_init());
        APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE);
    
        // Initialize BLE operation
        ret_code = nrf_pwr_mgmt_init();
        APP_ERROR_CHECK(ret_code);
    
        ret_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(ret_code);
    
        // NOTE: This is not the same order as Konrad's project. Enabling DCDC befoe enabling the soft
        // device will return an error.
        ret_code = sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
        APP_ERROR_CHECK(ret_code);
    
        while (true) {
        
            // Execute the scheduler upon waking up from an event or interrupt.
            nrf_pwr_mgmt_run();
    
            // Polled execution of services
            nrf_cli_process(&m_cli_rtt);
            app_sched_execute();
        }
    
        return 0;
    }
    

    This code doesn't even initialize the bluetooth stack and this consumes 10.72mA with no debugger attached.

    I would be happy to share my sdk_config.h, main.c and SES project if you think it would help. I believe my only option at this time is to revert to the old SDK and soft device.

    Thanks

Children
No Data
Related