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.

CC2640: High throughput communication over BLE with Mobile Phone (iOS and Android)

Part Number: CC2640


Hello, 

We are trying to establish a BLE communication between the CC2640 and a mobile device that may support voice data transfer (at least at 8KBytes/s live voice data). We checked this forum and many other sites and we listed the items that we had done or tried so far:

  • We tried to establish communication with Android platform so far, and tried to enhance this part too.
    • It is mentioned that, sending data from mobile to CC2640 by using "write commands" instead of "write requests" will increase throughput of communication. So, we used writeCharacteristic function directly rather than using addRequestToQueue(req) which sends write request to a queue for processing it later. However this does not help at all; because for consecutive calls of writeCharacteristic function(without any delay between them) are failed,so transfer is failed. After adding 100 ms delay between them, transfer is completed however communication time become indifferent with previous version, which is sending data by request.
    • Then, we tried to make communication without acknowledgements by modifying both platform and mobile software, however result is not changed significantly(Adding GATT_PROP_WRITE_NO_RSP option to platform side and calling the android method BluetoothGattCharacteristic::setWriteType with WRITE_TYPE_NO_RESPONSE parameter).
    • We tried all of these procedures with different mobile phones(Nexus 5, General Mobile 5+,Vestel Venus V5570 and V5070), but the communication speed again is not sufficient and significantly different.
    •  

  • I figured out that there are missing parts at my post, hence I am rewriting my post. I am sorry for inconvenience.

    Hello,

    We are trying to establish a BLE communication between the CC2640 and a mobile device that may support voice data transfer (at least at 8KBytes/s live voice data). We checked this forum and many other sites and we listed the items that we had done or tried so far:

    • As stated at the other websites (punchthrough.com/.../maximizing-ble-throughput-on-ios-and-android ), there is a potential that the transfer rate is can be raised upto 16KBytes/s for Android devices, and for iPhone 6 generation it is around 7,111 KBytes/s, which we believe achievable.
    • We started from the simple_peripheral project as the origin and got inspired from the (www.ti.com/.../swru393d.pdf ) document.
    • According to the document we need to modify the communication timing parameters, such as communication interval, slave latency, and connection timeout. We set the minimum communication interval to the value 8 (which corresponds to 10 ms), slave latency to 0, and the connection timeout to 1000 (which corresponds to 10s). We used the GAPRole_SendUpdateParam function to set these parameters.
    • We used 20 Byte (for data size) long BLE packets to communicate. We observed periodic packet losses when we try to increase the packet size. Furthermore, the packet duration was getting longer as long as we were increasing the packet size; while we were expecting to have packets that are transmitted at a shorter period, therefore it can send multiple packets at a single interval.
    • By using these values and this function we achieved 450 Byte/s data throughput at max.

    We tried to establish communication with Android platform so far, and tried to enhance this part too.

    • It is mentioned that, sending data from mobile to CC2640 by using "write commands" instead of "write requests" will increase throughput of communication. So, we used writeCharacteristic function directly rather than using addRequestToQueue(req) which sends write request to a queue for processing it later. However this does not help at all; because for consecutive calls of writeCharacteristic function(without any delay between them) are failed,so transfer is failed. After adding 100 ms delay between them, transfer is completed however communication time become indifferent with previous version, which is sending data by request.
    • Then, we tried to make communication without acknowledgements by modifying both platform and mobile software, however result is not changed significantly(Adding GATT_PROP_WRITE_NO_RSP option to platform side and calling the android method BluetoothGattCharacteristic::setWriteType with WRITE_TYPE_NO_RESPONSE parameter).
    • We tried all of these procedures with different mobile phones(Nexus 5, General Mobile 5+,Vestel Venus V5570 and V5070), but the communication speed again is not sufficient and significantly different.

    Is there anything that we are missing to increase the throughput? 

  • Hi Kivanc,

    Maybe you can take a look at the audio transmitter and receiver examples here: github.com/.../cc2650lp

    Cheers,
    Fredrik
  • Hi Fredrik,

    Firstly, thanks for your fast reply. We have already checked these projects and implemented our project getting inspired from them. However, we cannot be fully sure that it can also work with a mobile to CC2640 communication as it is in these projects, because the projects that you mention takes into consideration the communication between CC2640 to CC2640 (or likewise chip-to-chip) communication.

    I have also read different threads that mobile to CC2640 communication cannot guarantee high throughput, therefore it is not used for transmitting voice. Nevertheless, we would like to test the limits of the communication throughput and test what we can get at the boundaries. Even if it is not going to be a very reliable communication, we would like to push our limits. Could you guide me to achieve this?

    Could you give me the related parameters that I need to check to achieve this goal (for both CC2640 and Andorid App side)? If it is possible could you recommend me an Android application example that will lead me to configure our Android application.

    Thanks for your guidance in advance.

    Regards,
    Kivanc