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

GPIOTE driver/peripheral power consumption

Hello,

I'm trying to lower the power consumption in the s.c. "System ON" mode. I need to run in System ON mode to keep the RTC running. However I need to wake the CPU on an external IRQ activity and I'm using the GPIOTE driver to setup the wake up event (nrf_drv_gpiote_in_event_enable()).

Right now the CPU consumes ~9.5uA in this mode. By disabling the GPIOTE driver (nrf_drv_gpiote_uninit()) I can lower the consumption to about 6uA+, but then I lose the wake-up functionality. Is there a way to keep this functionality but have the GPIOTE driver disabled or somehow bypass the driver and implement just the wake-up functionality? Is there a way to control the peripheral internal clock and/or the CPU clock itself?

Additionally, how can I disable the softdevice when I don't need BLE functionality?

Thanks, Marko

  • "Uninit" output pins makes no sense if they don't maintain the state as a pin change will trigger other parts of the board that will in turn consume more power. I'm sorry I can't even try this.

    Instead, I've tried to nrf_drv_gpiote_in_uninit() the two input pins and this drops the CPU consumption to ~2uA+. 

    That being said is there an SDK api or a register which I can check to distinguish if the CPU was waken up by RTC or by the GPIO ?

  • Ok, I've been able to figure it out. After I exit the nrf_pwr_mgmt_run() function I check the status of my wake-up pin manually by checking the NRF_GPIO->IN register. If the wake-up reason is asserted I just trigger other actions.

    I'm measuring a CPU consumption on 2.3uA which is oscillating to 6~7uA upon a RTC tick. I'm fine with that.

Related