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

How do I get the softdevice into its lowest power state when not using Bluetooth?

Hi all,

I'm currently developing a product with the nRF52840 and FreeRTOS using SDK 15.2 where Bluetooth will be needed eventually, but not yet. I originally based the project on the ble_app_hrs_freertos demo, and just figured if I didn't initialize or touch the softdevice that it wouldn't do anything, but I was never able to get the power consumption down very low (maybe 280uA). My guess is that I need to do some basic initialization of the softdevice to get it to be present, but not interfere and increase power consumption.

When I do get ready to start turning Bluetooth on, my plan is to just turn it on when the user hits a certain button and leave it on for 5 minutes or so to let the user interact with the device before returning to a very low power state.

For now, I've started a new project with no softdevice based on blinky_rtc_freertos that behaves pretty well for power consumption. I'm able to get the power down to <20uA on average. When fully asleep it drops down to maybe 3uA.

I found a promising thread about getting a Bluetooth device to go to sleep HERE, but the updated port_cmsis_systick.c file from that ticket is different enough from the one included with SDK 15.2 that I can't tell if the fixes have been incorporated into the newer SDK or not.

Specific questions:

1) What do I need to do to initialize the softdevice into a fully off state so that it doesn't cause any increased power consumption

2) Any advice on how to turn the softdevice on for awhile, and then turn it back off so that it will return to that fully off no-additional-power-consumption state?

Thanks,

Glen

  • Hi Glen,

    The thread you have shown with changes to port_cmsis_systick.c has shown promising results when i tested this on my desk. I had a test that kept my demo with the changes running for more than a day, so the changes in those thread look promising.

    1) You can try the changes in the thread you mentioned. Like I said, those results looks very promising.

    2) Depends on what "awhile" means. If its in hundreds of milli seconds then you can simply call the sd_softdevice_disable when you do not use it and then re_enable it when you need it. But if the on and off time are shorter, then the overhead of softdevice enable/disable is not worth it as it might now help reduce the power consumption.

  • Ok thanks - I'll try to merge that with the current port_cmsis_systick, or perhaps just use it as-is and see how it works.

    The off times for Bluetooth will usually be very long (perhaps months), so I'll try the sd_softdevice_disable. This is an industrial instrument where a user will want to connect and get information on how the system has been performing, and then leave the site.

    Thanks!

Related