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

nrf52 UARTE/Fifo high current consumption

I am struggling with excess current consupmtion using uart+fifo. It seems like ~300uA is drawn by UART and disabling via app_uart_close() doesn't help.

I have checked all possible configurations of below params:

#define UART0_CONFIG_USE_EASY_DMA false
//Compile time flag
#define UART_EASY_DMA_SUPPORT     1
#define UART_LEGACY_SUPPORT       1
#endif //NRF52

and after uart_close() current jumps to 2mA and stays there for a while and goes back to the same value of ~300uA; I am pretty sure its UART - I can comment it out and current stasy at very low levels.

I have tried different settings and UARTE/UART mixing but it only makes it worse if I ie. use only easy_dma. Any suggestions ? Errata?

I use SDK12, with SD132, sd is enabled, but no advertsing.

Parents
  • Hi OskarM,

    That's totally late but may help other people. I had the same issue on nrf52840, with 400uA over consumption, and found following workaround.

    I think the issue is linked between GPIOTE and UARTE, and app_uart_close() that is not properly switching off HFCLK. It looks like you can switch off UARTE peripheral at address 0x40002000 (UARTE) + 0xFFC (POWER) (this is not documented). So using following code you can switch off / on UARTE peripheral, and find back original consumption:

    *(volatile uint32_t *)0x40002FFC = 0;
    *(volatile uint32_t *)0x40002FFC;
    *(volatile uint32_t *)0x40002FFC = 1;

    Can someone from Nordic confirm / explain this issue ? Thanks !

Reply
  • Hi OskarM,

    That's totally late but may help other people. I had the same issue on nrf52840, with 400uA over consumption, and found following workaround.

    I think the issue is linked between GPIOTE and UARTE, and app_uart_close() that is not properly switching off HFCLK. It looks like you can switch off UARTE peripheral at address 0x40002000 (UARTE) + 0xFFC (POWER) (this is not documented). So using following code you can switch off / on UARTE peripheral, and find back original consumption:

    *(volatile uint32_t *)0x40002FFC = 0;
    *(volatile uint32_t *)0x40002FFC;
    *(volatile uint32_t *)0x40002FFC = 1;

    Can someone from Nordic confirm / explain this issue ? Thanks !

Children
No Data
Related