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

The current peak of 334uA during system on Low power mode

I observed a peak of 334 ua during system-on low-power mode during idle time which is periodic around 4 sec. I am using ble with RC clock option.

1.is it waking for calibration of the clock source?

2.how much current will be drawn for calibration of the clock?

3.how to stop calibration for a time period where ble is not used?

Parents
  • Hi

    What does the APP_ERROR_CHECK return when you call ble_stack_stop()? Are you able to confirm that the SoftDevice is disabled as intended by this call? It might be that the SoftDevice isn't disabled successfully, and in order to see how, we need to see what values the ble_stack_stop() and nrf_sdh_disable_request() functions return.

    Seeing as you seemingly have made some changes to your example, can you confirm that the nrf_sdh_disable_request() is identical to the default function found in nrf_sdh.c (see below), and that you haven't made any changes to the disable request?

    ret_code_t nrf_sdh_disable_request(void)
    {
        ret_code_t ret_code;
    
        if (!m_nrf_sdh_enabled)
        {
            return NRF_ERROR_INVALID_STATE;
        }
    
        m_nrf_sdh_continue = true;
    
        // Notify observers about SoftDevice disable request.
        if (sdh_request_observer_notify(NRF_SDH_EVT_DISABLE_REQUEST) == NRF_ERROR_BUSY)
        {
            // Disable process was stopped.
            return NRF_SUCCESS;
        }
    
        // Notify observers about starting SoftDevice disable process.
        sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLE_PREPARE);
    
        CRITICAL_REGION_ENTER();
        ret_code          = sd_softdevice_disable();
        m_nrf_sdh_enabled = false;
        CRITICAL_REGION_EXIT();
    
        if (ret_code != NRF_SUCCESS)
        {
            return ret_code;
        }
    
        m_nrf_sdh_continue = false;
    
        softdevice_evt_irq_disable();
    
        // Notify observers about a finished SoftDevice enable process.
        sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLED);
    
        return NRF_SUCCESS;
    }

    Best regards,

    Simon

Reply
  • Hi

    What does the APP_ERROR_CHECK return when you call ble_stack_stop()? Are you able to confirm that the SoftDevice is disabled as intended by this call? It might be that the SoftDevice isn't disabled successfully, and in order to see how, we need to see what values the ble_stack_stop() and nrf_sdh_disable_request() functions return.

    Seeing as you seemingly have made some changes to your example, can you confirm that the nrf_sdh_disable_request() is identical to the default function found in nrf_sdh.c (see below), and that you haven't made any changes to the disable request?

    ret_code_t nrf_sdh_disable_request(void)
    {
        ret_code_t ret_code;
    
        if (!m_nrf_sdh_enabled)
        {
            return NRF_ERROR_INVALID_STATE;
        }
    
        m_nrf_sdh_continue = true;
    
        // Notify observers about SoftDevice disable request.
        if (sdh_request_observer_notify(NRF_SDH_EVT_DISABLE_REQUEST) == NRF_ERROR_BUSY)
        {
            // Disable process was stopped.
            return NRF_SUCCESS;
        }
    
        // Notify observers about starting SoftDevice disable process.
        sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLE_PREPARE);
    
        CRITICAL_REGION_ENTER();
        ret_code          = sd_softdevice_disable();
        m_nrf_sdh_enabled = false;
        CRITICAL_REGION_EXIT();
    
        if (ret_code != NRF_SUCCESS)
        {
            return ret_code;
        }
    
        m_nrf_sdh_continue = false;
    
        softdevice_evt_irq_disable();
    
        // Notify observers about a finished SoftDevice enable process.
        sdh_state_observer_notify(NRF_SDH_EVT_STATE_DISABLED);
    
        return NRF_SUCCESS;
    }

    Best regards,

    Simon

Children
No Data
Related