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

NRF52832, Large current consumption

Hello.

I am using nrf52-dk with 52832 (PCA10040).

To check the current consumption, I made a simple test.

I need to wake up every 5 seconds, do what is needed and fall asleep again.

Since I need to wake up on a timer, I use "System ON" mode. In the example, the timer handler is empty.

#include "nrf.h"
#include "bsp.h"
#include "boards.h"
#include "app_error.h"

#include "nrf_drv_timer.h"

#define RAM_RETENTION_OFF       (0x00000003UL)  /**< The flag used to turn off RAM retention on nRF52. */
#define TIMER_MS  (uint32_t)5000

const nrf_drv_timer_t work_timer = NRF_DRV_TIMER_INSTANCE(0);


void configure_ram_retention(void){
    NRF_POWER->RAM[0].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[1].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[2].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[3].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[4].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[5].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[6].POWER = RAM_RETENTION_OFF;
    NRF_POWER->RAM[7].POWER = RAM_RETENTION_OFF;
}

void timer_handler(nrf_timer_event_t event_type, void* p_context){
    switch (event_type){
        case NRF_TIMER_EVENT_COMPARE0:
            break;

        default:
            //Do nothing.
            break;
    }
}


void init_timer(void){
    uint32_t time_ticks;
    nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
    
    APP_ERROR_CHECK(nrf_drv_timer_init(&work_timer, &timer_cfg, timer_handler));
    time_ticks = nrf_drv_timer_ms_to_ticks(&work_timer, TIMER_MS);
    nrf_drv_timer_extended_compare(&work_timer, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
    nrf_drv_timer_enable(&work_timer);
}

void clocks_start( void ){
    NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
    NRF_CLOCK->TASKS_HFCLKSTART = 1;
    while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);
}


int main(void)
{
   clocks_start();
   configure_ram_retention();
     
    init_timer();

    while (1) {
            // Enter System ON sleep mode
            __WFE();
            __SEV();
            __WFE();
    }
}

The board was prepared according to the documentation: I cut SB9, soldered SB12.

Power supply - 3.3V. The debugger is not connected.

I measure the consumption with a multimeter (P22) and it is 0.68 mA, but there should be several uA. 

What am I doing wrong?

Related