This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640R2F: Source of miscellaneous power consumption every 45 ms during BLE Transmission and ways to reduce power consumption

Part Number: CC2640R2F

Hello, I am working with CC2640R2FRSMR custom board and am able to transmit my data alright.

However when I did the power analysis, I found that during transmissions I am able to see some other transmissions as well every 45 ms. This is when I connect my Android phone using BLEScanner as well as nRFConnect apps. Upon using another phone, I found the interval of these extra signals to be 37seconds.

Following is the screenshot of the power analysis tool:

Here, the transmissions marked in red are my intended data transmissions occuring every 80 ms, while those marked in blue are unknown to me. It's probably for maintaining constant connection betwen the custom board and phone. If that is so, can you please suggest where can I change it to maximise the time duration between successive such transmissions, in order to save power? I have modified ProjectZero for my applications, so you may suggest the changes wrt its files, thankyou!

Also, can you please suggest what are the ways by which I can minimize the power consumption when I am using the MCU with various sensors?
As far as I understood, the MCU goes in low power mode by default, and I have also put the sensors to sleep when they are not in use, but is there any other way to do so? for example someone had suggested to remove UART includes if not being used from the src file.

Any help is appreciated, thanks!

Regards,

Ritoo Verma

  • Hi Ritoo,

    Can you zoom into the unexpected current events? Having a clear profile of these events will help us figure out what may be happening.

    Best Regards,

    Jan

  • Sure, here you go:

    Image1 (time duration between consecutive events = 45 ms):

    Image 2 (Zoomed in part):

    Regards,

    Ritoo

  • I figured that the signal is indeed for connection, looking at the connection signature here:

    found on page 23 of Measuring CC13xx and CC26xx Current Consumption. It mentions "They are periodically with a configurable connection interval, ranging from 7.5 ms to 4 s."
    Can you please suggest how can I change the interval and in continuation of my original query, please suggest ways to reduce power.

    Thanks and Regards,

    Ritoo

  • Hi Ritoo,

    The connection interval may be changed either by selecting the preferred connection parameters before a connection or requesting a connection parameter update during a connection. The following SimpleLink Academy module goes over how to do this: https://dev.ti.com/tirex/content/simplelink_academy_cc2640r2sdk_5_30_01_00/modules/blestack/ble_connections/ble_connections.html

    Regarding how to lower power draw, I would recommend disabling advertisements while in a connection if your use-case allows it. For example, if you are only ever connected to a single device at a time, then I would stop advertising on connection establishment and restart advertisement on a disconnection. You could also increase both the connection interval and the advertising interval. This will increase the time between RF events which will keep the device on standby for longer.

    You could also lower the TX power of the device so it consumes less power during RF events.

    Best Regards,

    Jan

  • Hi Jan,

    I made the changes as mentioned in the link:

    // ******************************************************************
    // BLE Stack initialization
    // ******************************************************************
    
    // Whether to enable automatic parameter update request when a connection is
    // formed
    uint8_t enableUpdateRequest = GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS;
    
    uint16_t desiredMinInterval = 200;
    uint16_t desiredMaxInterval = 280;
    uint16_t desiredSlaveLatency = 0;
    uint16_t desiredConnTimeout = 1000;
    
    GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8_t),
                         &enableUpdateRequest);
    
    GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t),
                         &desiredMinInterval);
    GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t),
                         &desiredMaxInterval);
    GAPRole_SetParameter(GAPROLE_SLAVE_LATENCY, sizeof(uint16_t),
                         &desiredSlaveLatency);
    GAPRole_SetParameter(GAPROLE_TIMEOUT_MULTIPLIER, sizeof(uint16_t),
                         &desiredConnTimeout);

    However I'm still not able to see the changes being reflected. 

    Regards,

    Ritoo

    @@@@@@@@@@@@@@@@@@@@@@@

    UPDATE:

    @@@@@@@@@@@@@@@@@@@@@@@

    I tried connecting 3 different phones, all with recent Android version and the result is:

    phone A: Upon connection Services are not displayed

    phone B: Upon Connection Services are displayed and able to connect , however the connection intrval is 45 ms, didn't change even after making changes in CONN_INTERVAL

    phone C: Gets connected and reflects changes made in CONN_INTERVAL!

    So now my question is why for the same source code on the custom board I see multiple behaviours from different phones, and what is the solution for consistent result?

    thanks and regards,

    Ritoo

  • Hi Ritoo,

    You can observe these different behaviors because all 3 phones are different and might have different implementation for the BLE Stack. The easiest way to ensure consistent result would be to always test with the same model.

    Regards,

    Tanguy