Is lowest power consumption of 1.2uA possible using nrf52832 & SYSTEM_ON (s132, SDK17) for GATTS - Central

Hi nRF community,

I have a question regarding the lowest power consumption ever possible with nRF52832 chip.

I'm experimenting with power consumption using nRF52832 DK (PCA10040 1.2.1), talking to another nRF52832DK.

I run a central (based on GATTS example) scanning for my peripheral, I use SDK17.1 + S132.

The SDK is configured to have no logs and external interfaces, and most of the peripherals are disabled + I use DCDC.

After the BLE initialization is complete I set up the interrupt event for GPIOTE.

The entire thing is configured and run's properly for the BLE piece but I want it to have a smaller consumption while I'm in idle state (during __WFE()).

Before entering the main loop I call "  sd_power_mode_set(NRF_POWER_MODE_LOWPWR) " function and basicly wait for an event on the interrupt to start scanning.

Currently according to nRF PPK2 I'm consuming around 18 microamps, but the question is can I get it 10 times smaller, like 1.2 ~ 2 uA (microamps)?

What other peripherals I can disable if I use SoftDevice and BLE ? 

Regards, 

Dmytro.

  • What does your nrfx_uarte.c file look like? The reason I ask is that I don't have IAR installed, but when I try to compile using the SES project, I am not able to, because of the lacking definitions that I showed in a screenshot in my previous reply. 

    I can fix it by changing a few of the sdk_config.h definitions, but I suspect that you have just removed the line:

    #if NRFX_CHECK(NRFX_UART_ENABLED)

    in nrfx_uart.c.

    If that is the case, did you change anything else in the SDK files? Did you try to unzip it in a pristine (unmodified) SDK?

    Either way, the UART in this project is only used for logging, which is disabled, so I don't think this should matter for the current consumption, but if you did changes like these, perhaps you did other changes that could affect the current consumption as well, which is why I am keep nagging about this. 

    Either way, I decided to just do the fixes to make it compile, and I initially saw about the same current consumption as you see. I set the samples per second in the PPK FW to maximum, which gives a higher resolution(but the same average numbers). 

    I then started looking into the application. I saw that commenting out external_interrupt_init(); reduced the current consumption to about 7µA. I then saw that you used:

    nrfx_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_LOTOHI(true);

    where the "true" means high accuracy mode. While this is more accurate, it also requires more current. If you only need it for a simple button push, you can use the low accuracy mode. To test it properly on a DK, I changed the EXT_EVT_INT_PIN to 13 (Button 1), and set the in_config like this:

    nrfx_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
    in_config.pull = NRF_GPIO_PIN_PULLUP;

    to match the HW in the buttons. 

    Also, adding a switch to turn off scanning, to see that the current consumption goes down again. I only did changes to sdk_config.h and main.c in the attached project. Other than those, it is identical to what you sent me. The changes in sdk_config.h was just to be able to compile, so if you already changed nrfx_uarte.c, you probably don't need those changes in sdk_config.h. Only main.c.

    4606.ble_app_gatts.zip

    So the main takeaway is to set the in_config to low_accuracy, using GPIOTE_CONFIG_IN_SENSE_LOTOHI(false);

    Best regards,

    Edvin

  • Hi Edvin, thanks, I will give it a try to see if there any significant change in the consumption.

  • Hi Edvin.

    I have conducted the test with GPIOTE_CONFIG_IN_SENSE_LOTOHI(false) and got some consumption reduction but it was still at around 15 micro amps.

    I intended to get the better current readings for my nRF52832 DK as those were to noisy and attached my DUT to a LiPo battery to see if any difference and I was amazed seeing the 1.9 uA consumption. So it turns out when nRF DK runs on a micro USB cable it consumes significantly more, compared to a battery powered version.

    I didn't got my 1.2 uA, but I'm pretty happy with 1.9 uA consumption, it fits my needs, thanks for the clue with the GPIOTE low accuracy config, it did worked, it have increased the interrupt processing time slightly but still fit my timing requirements, so it is solved. The ticket can be closed. Thank You !!!

    Regards, Dmytro.

Related