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

sd_app_evt_wait() doesn't give microamps consumption

Okay, I know there's a lot of threads about the subject. I have tried to read them all, with no help. My device still consumes 1.4 mA. Resetting does not help, so I assume it's not the debug-mode issue.

There's a lot of mentions that I should put all the peripherals I don't need into off state, before entering sd_app_evt_wait(). However, I cannot find any examples how to do that. That is, a piece of C-code how all those peripherals (UART, TWI etc.) can be configured into off state? Of course, such codes must exist somewhere, but why you cannot include them into all those answers? Links?

(If I put the whole system into off state using sd_power_system_off() I can reach 48 uA, which is quite reasonable due to other external peripherals we have on the board.)

Please help, I am quite frustrated... :(

Parents
  • Hi Jarmo

    All peripherals are per default off, and only peripherals that have been explicitly enabled will be on at any time. I have updated the current consumption guide, section "Setup of SPI, UART, TWI interfaces" to more specifically address your concerns.

    If you get 48uA in System OFF, that is not normal, that should be ~0.6uA. This leads to that you have leakage current either on a connected GPIO or programming interface. Try to disconnect all external circuits from the nRF51 and disconnect any potentially connected programmer. Have you gone through all the points in the "Troubleshooting" section in the current consumption guide.

  • Thanks for that update! Yes, I know there's leakages in the external circuitry, at some point we have to study the reasons. I looked your guide and it looks good :) However, could you quickly answer how do I need to re-enable UART after getting back from sd_app_evt_wait()? I mean that if I do as follows:

    NRF_UART0->TASKS_STOPTX = 1; NRF_UART0->TASKS_STOPRX = 1; NRF_UART0->ENABLE = 0; sd_app_evt_wait(); NRF_UART0->ENABLE = 1;

    Is that enough to continue operating with UART, e.g. using your simple_uart_put() example code? Yes, no doubt this is a trivial question and there's comprehensive documentation, but just to save a bit of my time... :)

    In my case I want to have debug access from UART (+FTDI/USB) but still want to minimize current consumption, of course.

Reply
  • Thanks for that update! Yes, I know there's leakages in the external circuitry, at some point we have to study the reasons. I looked your guide and it looks good :) However, could you quickly answer how do I need to re-enable UART after getting back from sd_app_evt_wait()? I mean that if I do as follows:

    NRF_UART0->TASKS_STOPTX = 1; NRF_UART0->TASKS_STOPRX = 1; NRF_UART0->ENABLE = 0; sd_app_evt_wait(); NRF_UART0->ENABLE = 1;

    Is that enough to continue operating with UART, e.g. using your simple_uart_put() example code? Yes, no doubt this is a trivial question and there's comprehensive documentation, but just to save a bit of my time... :)

    In my case I want to have debug access from UART (+FTDI/USB) but still want to minimize current consumption, of course.

Children
No Data
Related