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.

CC2541: How many back to back packets can be transmitted in single Connection Interval

Part Number: CC2541
Other Parts Discussed in Thread: CC2640R2F, , CC2540

Hello,

I am using SimpleBLEPeripheral application. I have query on Back-to-Back indication transmission in single Connection event.

If I keep connection interval as 1 sec and in that duration whether can I send back-to-back indication packets. If yes, then how many max I can transmit. Also what are the settings to be modified.

If not possible with Indication, how about Notification. Whether Notification packets can be transmitted back-to-back in single Connection interval.

Thanks & Regards

Vishnu Beema 

  • Hi Vishnu,
    Indications need to be acknowledged on the peer device, thus limiting to one packet per connection event. Notifications should not have the limitation.
  • Hello Lindh,

    So within Connection Interval there will be only one Indication.
    How about Notifications. How many max can be transmitted within connection interval. In some post its mentioned as 4. Is there such dependency in allocating memory. If yes, please let me know the code/macros I need to change.

    e2e.ti.com/.../194407

    Thanks & Regards
    Vishnu Beema
  • Hello Vishnu,
    There are several methods to increase throughput.

    1. Reduce connection interval.
    You can reduce your connection interval to minimum value of 7.5ms. Along with that, enable update parameter request using GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, size, TRUE );
    processors.wiki.ti.com/.../CC2540_Data_Throughput

    2. Multiple notifications back2back per connection interval.
    There is a trade off between robustness and throughput with regards to which connection interval used. If you set the connection interval to low there will be more overhead with connection event handling, but if you set it too large and a packet drops you might risk having to wait until the next connection event until the transfer continues.

    Please study these commands in the Software Developers Guide to figure to how to maximize throughout:

    HCI_EXT_OverlappedProcessingCmd(HCI_EXT_ENABLE_OVERLAPPED_PROCESSING);
    HCI_EXT_NumComplPktsLimitCmd(HCI_MAX_NUM_DATA_BUFFERS, HCI_EXT_ENABLE_NUM_COMPL_PKTS_ON_EVENT);
    HCI_EXT_HaltDuringRfCmd(HCI_EXT_HALT_DURING_RF_DISABLE);


    If you are interested in high throughput why not use our CC2640r2F or CC26x2? It has support for features that can increase throughput further:

    • LE Data Length Extension (BT core spec 4.2)
    • 2 MBps PHY (BT core spec 5.0)


    Here is an example for a throughput test on CC2640R2F (need to be ported to latest SDK version).
    github.com/.../readme.md

    CC2541 only support BT Cores spec 4.0 features.

  • Hello Eirik,

    Thank you for your inputs.

    1) In SimpleBLEPeripheral code I am seeing GAPROLE_PARAM_UPDATE_ENABLE set to TRUE.
    GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, sizeof( uint8 ), &enable_update_request );

    2) In "CC2540_Data_Throughput" how to execute “throughput_10ms_20byte_notifications.cfa”.

    3) The reason behing going to CC2540/41 is BLE + USB. If there are any other chipset with BLE + USB please let me know.

    4) In code I am seeing below macros, whether can I send Notify back to back. What is the purpose of this macro.

    #define LL_MAX_NUM_DATA_BUFFERS 12

    Thanks & Regards
    Vishnu Beema
  • Hello Vishnu,
    The CC2540_Data_Throughput is an old example which does not use any of the features I listed above. It was just to demonstrate throughput on the legacy system where they send 4 packets every connection interval.

    1) This is to change the connection parameters after the connection is formed.
    2) That is a Frontline BPA500 sniffer capture file.
    3) We do not have other BLE devices with USB, but 2-chip solution is possible.
    4) It defines number of TX data buffers for the link layer. You cannot change it as the value is precompiled into the source.