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

How to reach nRF52840 UARTE current supply specification ?

Hi, I work on the nRF52840-Preview-DK board. I try to make a ble to uart bridge and I start with the nRF5 SDK 14.0.0 ble_app_uart example.

I compare the current supply of the example and the same code without the uart initialization. The current supply is 0.8mA greater with the uart initialization. In the "nRF52840 Objective Product Specification v0.5" the electrical specification indicate 55uA.

If I call the function "app_uart_close()" after "uart_init()" the current supply is always 0.8mA greater than the code without uart initialization.

  • I'd also be interested in seeing this be officially in the Errata. I'm seeing it in rev 2 and a few engineering samples. As of now even using NRFX v1.7.2 which calls STOPRX and STOPTX does not resolve this issue

  • What is the intent of the second line of code?  Are you just trying to read the register?  The statement doesn't do anything, and even though it is marked volatile, many compilers will optimize it out. (Mine did.)  i just want to make sure I am handling the errata properly.

  • Hi Stian, I am also experiencing this issue with the nRF UARTE Drivers in SDK 16 with the nRF52840.

    My code is as follows. The uarte_uninit manages to stop the TX because if nrfx_uarte_rx is not used, a low current consumption is achieved once again. Power cycling the UARTE through the registers seems to fix the issue when nrfx_uarte_rx is used. The tx/rx abort do not seem to have any affect ...

    Moreover could you provide a link to the documentation where FFC from UARTE0 offset 0x40002 is mentioned? Because I could not find this register which power cycles the UARTE0.

    // Stop any reception on UARTE0
    nrfx_uarte_tx_abort(&uarte0_inst);
    nrfx_uarte_rx_abort(&uarte0_inst);
    
    // Stop any reception on UARTE1
    nrfx_uarte_tx_abort(&uarte1_inst);
    nrfx_uarte_rx_abort(&uarte1_inst);
    
    // Switch Off both UARTEs to reduce current consumption
    nrfx_uarte_uninit(&uarte0_inst);
    nrfx_uarte_uninit(&uarte1_inst);
    
    // Power cycle the UARTE0 - Fix or Workaround since UARTE0 is not getting turned Off if RX is enabled
    *(volatile uint32_t *)0x40002FFC = 0;
    *(volatile uint32_t *)0x40002FFC;
    *(volatile uint32_t *)0x40002FFC = 1;

  • Hi,  3 years latter I meet this problem, which was not fixed by NORDIC. Actually for me sequence works fine:

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



    But sequence via second way doesn't work:
    nrf_drv_uart_rx_abort(&uart_addr);
    nrf_drv_uart_tx_abort(&uart_addr);
    nrf_drv_uart_uninit(&uart_addr);


    Also nRF52840 Product Specification have no information about POWER register with base address of UART0/1

    Can you explain about right sequence without hidden POWER register usage?
       Thank you for this post.

Related