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.

MTU negociation with CC2650

Other Parts Discussed in Thread: CC2650

Hi,

It seems that BLE troughput is a sensible question.

I would like to achieve 1-5 kBytes/sec with a CC2650 chip and iOs/Android peripheral.

On the GATT client side (Android SDK), I call a "requestMTU(256)" but a get 23 again and again.

I try to weak MAX_PDU_SIZE, MAX_NUM_PDU, HEAPMGR_SIZE ;...... and nothing works, a get 23 bytes as MTU.

We try 2 implementations to retrieve data over BLE :

1.

  • a write request on a control characteristic to set what we want (offset and data length in external memory)
  • a loop of notification on a data characteristic with manual segmentation of data to fit MTU

It does not work, the chip crash.

2.

  • a write request on a control characteristic to set what we want (offset and data length in external memory)
  • multiple read requests on a data characteristic from the Android device

We wait about 300ms to get one read response (300ms for 20bytes).

Have you some advice to achieve 1-5kBytes with a consumer client such as iOS/Android ?

Did you achieve to negociate a MTU > 23 bytes ?

Thanks, guys

  • Hi Thomas,

    I would suggest that you start with our guide here

    processors.wiki.ti.com/.../CC2640_BLE_Throughput

    Note that the above link is more of an academic study. As throughput with a cellphone (iOS/Android) is always limited by the phone. There are restrictions that each OS puts on things like connection interval and MTU size. Please see their Bluetooth documentation for more info.
  • Thanks,


    I already checked this wiki page. It seems that it uses lower level API, I don't see any "characteristic" but only channel (GATT_Notification() call). I don't know how to use this with an Android device wich talks only to service/characteristic.

    I see a method "GATT_ReadLongCharValue()" but i have not taskID to give as argument (maybe it's an internal function I should not use). It's not clear if I can use it only for inter cc2650 communication or with any gatt client as Android.

  • GATT_Notification is the same layer (GATT) as the other method you are mentioning so you should be able to use it as long as you know the handle of the characteristic. This should be discovered through initial characteristic discovery (see the simpleBLECentral project for an example).

    Furthermore, GATT_Notification is method which allows for the highest throughput since it does require any GATT interaction from the GATT client.

    If you are for some reason set on using GAT_ReadLongCharValue(), you can find the API in the software developer's guide www.ti.com/.../swru393 which states that task id is the "task to be notified of response." You should pass the application task ID you are using to call the GATT function. See simpleBLECentral for several uses of this (i.e. GATT_ReadCharValue)