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

  1. 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.

../_images/disable_display_mode.png

Figure 112. SysConfig - Disable UART display operations.

  1. 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.

../_images/config_adv_parameters.png

Figure 113. SysConfig - Set Advertisement Parameters.

  1. Set TX power for connection events: if the device is configured as central, go to app_central.c and add the HCI_EXT_SetTxPowerDbmCmd() after registering the event handler inside the Central_start() function. Alternatively, if the device is configured as peripheral, go to app_peripheral.c and add the HCI_EXT_SetTxPowerDbmCmd() after registering the event handler inside the Peripheral_start() function. See more details about this topic inside the following reference: Adjusting TX Power.

    Listing 141. Set TX power for connection events - HCI_EXT_SetTxPowerDbmCmd().
    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.

  1. 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 into ti_ble_config.c and looking into the number of elements inside advData1[].

../_images/adv_data_size_setup.png

Figure 114. SysConfig - Modify Advertisement Data.

  1. Avoid waking up the device every time the advertisement starts: go to gap_advertiser.h and create a new GAP_ADV_EVT_MASK, that will only consider GAP_ADV_EVT_MASK_SCAN_REQ_NOTI and GAP_ADV_EVT_MASK_START_AFTER_ENABLE events. Replace this new mask at the function BLEAppUtil_initAdvSet() in bleapputil_init.c instead of GAP_ADV_EVT_MASK _ALL mask.

Listing 142. gap_advertiser.h - Create new GAP_ADV_EVT_MASK.
1//...
2GAP_ADV_EVT_MASK_ALMOST_ALL  = GAP_ADV_EVT_MASK_SCAN_REQ_NOTI |
3                               GAP_ADV_EVT_MASK_START_AFTER_ENABLE,
4//...
  1. 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 the basic_ble.c project, as can be seen inside ti_drivers_config.c at the very end of the Board_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.