Optimizing Current Consumption in Bluetooth Low Energy Devices

by <a href="http://community.silabs.com/t5/Welcome-and-Announcements/Community-Ranking-System-and-Recognition-Program/m-p/140490#U140490"><font color="#000000"><font size="2">Hero Employee</font></font> </a> bluetoothsteve on ‎08-25-2017 03:36 PM





Current consumption or, more generally, energy usage is a major concern in battery powered products. Optimizing current consumption extends battery life and so makes better products. This article discusses how to optimize the current consumption.


The two main factors affecting current consumption in a Bluetooth Low Energy (BLE) device are the amount of power transmitted and the total amount of time that the radio is active (tx and rx).

The amount transmit power required depends on the range required between master and slave. Range will be greatly affected by the environment such as obstacles and the amount of 2.4 GHz traffic present. The first tip is to not transmit more power than required.

The amount of time that a radio is active is determined by how often the radio must transmit or receive and the length of time required to transmit or receive. The first, and probably most obvious, tip is to keep characteristics small. Don’t use a 32 bit integer if 8 bits will do. The next place to look is the advertising interval. The Bluetooth specification allows the advertising interval to be anywhere between 20 ms and 10.24 s. Using the default settings for advertising, 100 ms interval and +8 dBm on a BGM121, as shown below results in an average current of 419 uA


Figure 1. Current consumption advertising at +8 dBm and 100 ms intervals

By reducing the transmit power to 0 dBm while keeping the same 100 ms advertising interval, the average current is reduced to 190 uA



Figure 2. Current consumption advertising at 0 dBm and 100 ms intervals


By increasing the advertising interval to 1000 ms, the average current is reduced to  21.5 uA


Figure 3. Current consumption advertising at 0 dBm and 1000 ms intervals


Another factor affecting average current consumption is the connection interval used. A short connection interval results in the ability to have higher throughput but also incurs an energy cost while a longer connection interval limits data throughput but also provides energy savings. The default connection intervals used by iOS and Android are currently 30 ms and 50 ms respectively. As shown below, the average current at 0 dBm and a 30 ms connection interval is approximately 228 uA



Figure 4. Current consumption using default connection parameters with an iPhone


By using a longer connection interval, 950 ms, the average current is to approximately 25 uA.


Figure 5. Current consumption with 950 ms connection interval


By increasing the slave latency, the number of intervals the slave can skip when it has no data to send, to 5 the average current drops below 10 uA.


Figure 6. Current consumption with 950 ms connection interval and latency of 5

Care should be taken when selecting connection parameters so that several retries are possible to ensure stable connections. The timeout must be greater  (1+latency)*2*max_connection_interval. So if the maximum connection interval is chosen to be 950 ms and the timeout is set to the maximum, 32 seconds then the maximum latency allowed is 15. However, this will result in an unstable connection, so the latency in this example is set to 5 to allow for 2 retries.


Running the Example

The attached example project can be used to reproduce the results shown in this article.

  1. Extract the example zip file and import it into SimplicityStudio.


  1. Build the project and download to your radio board. In this configuration, the application advertises at +8 dBm and at 100 ms intervals as described in figure 1. You can see the average current with the Energy Profiler utility.



  1. Optionally, to see debugging statements, right click your device in the device tab in SimplicityStudio to open the console.


Figure 7. Launching the console


Select the Serial1 tab, place your cursor in the text field at the bottom and press enter to wake-up the console. The console will display the message “Low power test started” after a reset.


  1. Set the transmit power to 0 dBm by changing line 122 in main.c from







Then rebuild and download again to see current consumption similar to figure 2.


  1. Increase the advertising interval to 1000 ms by changing line 127 from

gecko_cmd_le_gap_set_adv_parameters(160, 160, 7);


gecko_cmd_le_gap_set_adv_parameters(1600, 1600, 7);


Then rebuild and download once more to see current consumption as in figure 3.


  1. Connect to the device using the Silicon Labs Blue Gecko mobile app. Performing this step with an iOS device will produce results similar to figure 4, using an Android device will produce slightly lower results since Android’s default connection interval is longer than that used by iOS.

The console will display a message indicating the actual connection parameters being used.


  1. Change the connection interval to between 875 - 950 ms by uncommenting line 156. Rebuild and download and connect again with the mobile app. The results will be similar to figure 5.

The console shows the new connection parameters in use.


  1. Change the slave latency to 5 by changing line 156 from


gecko_cmd_le_connection_set_parameters(evt->data.evt_le_connection_opened.connection, 700,760,1,600);




gecko_cmd_le_connection_set_parameters(evt->data.evt_le_connection_opened.connection, 700,760,5,3200);


Rebuild and download the application once more and connect with the mobile app to see figure 6.



There is always a tradeoff between current consumption and data throughput. The application needs for battery life and throughput must be considered when choosing a connection interval. A longer connection interval will help improve battery life but will reduce throughput and may result in an unreliable or unstable connection unless the connection parameters are chosen carefully.