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

Idling with low-speed timer

Hi,

I am trying to build a low power device using the nRF51422 SoC without a Soft Device. I need a timer to occasionally wake up the chip and as I read the product specification it should be possible to achieve a current consumption of 250uA when using only the 1MHz low-speed timer and a 16MHz crystal oscillator (PS 3.1, table 22, page 40). However, with an example from SDK 8.0 as starting point and the nRF51 development kit, I have not been able to get the power lower than approximately 550uA. I use the current measurement guideline from the DK user guide. What can be done to lower the current further?

A sub question: When programming using IAR the current consumption is considerable higher until the development kit is restarted. Is it possible to avoid this?

Best Regards, cth

  • Which SDK example did you use for this timer functionality?

    answer to sub question) It is possible that IAR leaves the chip in debug mode after flashing which consumes more power. I do not have IAR setup now, so I cannot confirm this.

  • I use the "peripheral\timer" example. Removed the LEDs, increased the compare value and initializing the timer frequency with 1MHz. I have tried including NRF_POWER->TASKS_LOWPWR, but it doesn't seem to make a difference.

  • first of all I think the power profiling was made by programming the timer directly without using any libraries. The example you mentioned uses the Timer library and the overhead of CPU to execute all those library add ups to contribute for the extra power you are noticing. As this is interrupt driven, and you are not using the softdevice and if lower power is very important for your usecase, I advise you not to use the library and configure the Timer in your app directly. look at the peripheral\gpiote example to configure the timers directly without using the library.

    second thing is that just one call to __WFI() is not very efficient way to go to low power mode, i shall ask someone to fix that in the SDK. Read the post below and the answer from Carles is how it should be.

  • Thanks for your replies Aryan. I appreciate your help.

    I have moved to the gpiote example and removed the use of all libraries. Furthermore I have implemented the sleep function from Carles in this post. However, the current consumption is still the same (~550uA). The value is decreased considerable compared to the original gpiote example without sleep. The device must be in some kind of low power state, just not as low as the 250uA from the PS. I am wondering if there is some parts of the chip such as a regulator I need to turn OFF. I can live with an extra wake up time, just not in the range as when using RTC.

  • Sorry, my bad. I didn't disable GPIOTE and it make use of additional current consuming parts of the chip. When using the timer alone my consumption dropped to approximately 270uA. I am not sure of my measurement accuracy, so I am satisfied. Thanks for your help!

Related