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

NRF52832 UART Power consumption

Hi,

I just wanna start off by saying I know there a lot of similar posts to this one here on the dev zone, but my problem with them is that none of them (from what I've seen) give a good answer what to do in order to reduce the power consumption of the UART peripheral when it's active.

My observation is that as soon as I activate the UART (data is constantly sent when activating the UART) the current consumption averages around 2.4mA. I need to be able to reduce this as much as possible.

One of the topics I found was this one:
https://devzone.nordicsemi.com/f/nordic-q-a/28439/gpio-and-uart-with-low-power-consumption

however the solutions presented in that topic only reduces current consumption when the UART is idle.

Another topic that is similar to mine, but not answered:

devzone.nordicsemi.com/.../how-to-configure-uart-with-low-power

Furthermore, I found the low power examples for nRF51:

https://github.com/NordicPlayground/nrf51-UART-examples/tree/master/ble_app_uart_low_power

Are these valid for nRF52 as well? or are there some equivalent examples for nRF52?

SDK: v15.0

HW: nRF52832 PCA10040

Br,
Anton

  • I made the changes you suggested.

    However now I receive the APP_UART_COMMUNICATION_ERROR event during transmission.

    Are there any differences in how I should use app_uart_put / get when using UART without DMA?

  • APP_UART_COMMUNICATION_ERROR is typically caused by hardware issues. Did you use the same pins for UART and run it on the nRF52 DK? Can you check which error you get with the event?

    Usage of the library should not differ with use of EasyDMA or not.

  • I have also run into this same problem.

    I have enabled the internal DC/DC converter, and this has roughly halved the current consumption from a 3V supply

    But I do not understand why EasyDMA causes such a peak. According to the datasheet, HFXO is 250µA, and UARTE 55µA. Where does the rest come from? Is it from running the AHB multilayer and RAM at full speed as well? Is the DMA such a power hog?

    Also why do these need to run? IDLE to CPU time is 3µs, while even at 1Mps one char + start + stop is 10µs, so there is more than enough time to wake the rest of the system to write out the received byte.

    You seem to recommend not using UARTE, but the basic UART. Then we need to service an interrupt fast enough to retrieve the data. The S132 SDS states that during a Bluetooth connection, you could get delayed by 250µs (ISR post processing), so the UART would need to be configured at 200Kps or lower to never drop a character?

  • Yes, the EasyDMA is approximately 1.2-1.3 mA with LDO. The high current is caused by the UART RX being enabled at all times, which also enables the EasyDMA.

    I would recommend that you use HW flow control pins to pause the transfer in case of being blocked by softdevice interrupts. This could also allow you to reduce the current consumption in case of no data being received.

Related