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

Power consumption in idle mode >= 2 mA!

Hello,

i have some trubble with my current power consumption. I have already read other user question and solutions but nothing works for me. To reduce the power consumption i disable the UART and Bond manger. But as soon i activate the Advertising i see the typical TX current peaks but I have also a continuous offset of 2 mA. If i disable the Advertising the current decreases to about 530 uA, still a lot. In my application i just init the Bluetooth Stack no peripherals, Bond manager and advertising are activated. At the end sd_app_evt_wait() is executed. Another strange behavior is as soon i init the UART (everything else deactivated and no UART communication ongoing) the power consumption is about 2,5 mA.

What am I doing wrong? I am thankful for any hint.

I have a custom BLE profile the application based on HRM example. I used the RFD22301 Module from rfDigital (based on nRF51822).

  • Hi

    Be sure to power-reset your board after you flash your code, otherwise the nRF51 will stay in debug mode which consumes ~1mA

    Make sure you disable or disconnect all LEDs on your board, each led consumes ~0.5mA

    Disconnect any external circuit from your board, this includes the debugger/programmer. If you have e.g. a peer UART device connected, disconnect it, there might be a leakage current if the peer UART device does not have exactly the same voltage levels.

    A further guide on minimizing current consumption is available here and here

    When you enable the UART and call the STARTRX and STARTTX tasks, it will draw a lot of current. The only way to decrease current consumption of the UART is to only have it enabled when you need to. In the SDK UART examples, the UART is enabled all the time, so those examples are not power optimized. There are two methods of improving this:

    One method is to use two GPIO control lines, one is for the nRF51 to signal the UART peer device when it has data to send, the other is for the UART peer device to signal the nRF51 when it has data to send. You can configure the pin to be a wakeup source as well. When the UART peer device has data to send, it will signal the nRF51 which will wake up and enable the UART, receive/send data and then go back to sleep.

    Another method is to use the app_uart library and set flow control option APP_UART_FLOW_CONTROL_LOW_POWER which will make the nRF51 UART only be enabled when the CTS is set low by the UART peer device. There is a UART example available here that uses the app_uart library. Documentation for the library is here.

  • Hey,

    thanks for help. The Problem was the GPIOTE task for flashing the LED, so that the 16 MHz clock was always on.

  • I don't use the LED module from Nordic stack anymore. The function led_start() from nordic stack uses the GPIOTE task.

  • thx, I wrote my own led functions using timers. So I never used led_start();

Related