Optimizing Bluetooth Low Energy Power Consumption¶
This section describes how to configure the CC23xx devices in order to evaluate
its power consumption while running Advertisement and Connection Bluetooth LE
operations. To this end, the basic_ble
project found inside the
SDK examples,
is used as the starting reference.
The following steps are modifications to consider before doing power measurements calculations:
Power Optimization¶
Disable UART display operations: go inside
basic_ble.syscfg
–> RF Stacks –> BLE –> Advanced Settings, select “Disable The Display Module”. In addition, make sure to disable any other peripheral that is not being used, such as LEDs or buttons.
Set the advertisement parameters: go inside
basic_ble.syscfg
–> RF Stacks –> BLE –> Broadcaster Configuration –> Advertisement Set 1 –> Advertisement Parameters 1, modify:Legacy Event Properties Options: Select the advertisement mode (Connectable and Scannable Undirected, Connectable directed, Non-connectable and Non-scannable undirected). It is important to take into consideration that Non-connectable and Non-scannable advertisement modes will not schedule RX operations as they are not expecting information to be shared with them, therefore reducing the amount of power consumption. Example of this are applications that do not require extra information through scan responses, such as Bluetooth LE beacons.
Primary PHY Interval Minimum and Maximum (ms): Consider that for longer intervals, the device will spend more time in standby mode, considerably reducing the power consumption.
Tx Power Value: Consider that increasing or decreasing this value will have a considerable impact on power consumption.
Set TX power for connection events: if the device is configured as
central
, go toapp_central.c
and add theHCI_EXT_SetTxPowerDbmCmd()
after registering the event handler inside theCentral_start()
function. Alternatively, if the device is configured asperipheral
, go toapp_peripheral.c
and add theHCI_EXT_SetTxPowerDbmCmd()
after registering the event handler inside thePeripheral_start()
function. See more details about this topic inside the following reference: Adjusting TX Power.1//... 2const int8_t txPower = 8; 3const uint8_t fraction = 0; // Should always be 0 for CC23xx devices 4HCI_EXT_SetTxPowerDbmCmd(txPower, fraction); 5//...
Warning
The Fraction
parameter must remain 0 as this feature is not supported
at the moment.
Modify the type and amount of data the device is sending during advertisement: go to
basic_ble.syscfg
–> RF Stacks –> BLE –> Broadcaster Configuration –> Advertisement Set 1 –> Advertisement Data 1. There, it is possible to add different type of data as required by the application. Make sure to avoid adding data that is not used, as power consumption increases with payload size. It is possible to see the payload size by going intoti_ble_config.c
and looking into the number of elements insideadvData1[]
.
Avoid waking up the device every time the advertisement starts: go to
gap_advertiser.h
and create a newGAP_ADV_EVT_MASK
, that will only considerGAP_ADV_EVT_MASK_SCAN_REQ_NOTI
andGAP_ADV_EVT_MASK_START_AFTER_ENABLE
events. Replace this new mask at the functionBLEAppUtil_initAdvSet()
inbleapputil_init.c
instead ofGAP_ADV_EVT_MASK _ALL
mask.
1//...
2GAP_ADV_EVT_MASK_ALMOST_ALL = GAP_ADV_EVT_MASK_SCAN_REQ_NOTI |
3 GAP_ADV_EVT_MASK_START_AFTER_ENABLE,
4//...
To save some extra power, the External Flash can also be turned off during board initialization using
Board_shutDownExtFlash();
. This is already done by default at thebasic_ble.c
project, as can be seen insideti_drivers_config.c
at the very end of theBoard_init()
function.Warning
Power consumption is significantly increased while being in debug mode. The device should be flashed and power cycled before running power measurements.