How to maxmise throughput for central device?

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
NiVa_4337911
Level 3
Level 3
First like received

Hi,

I have improved the data throughput for peripheral devices by setting the connection interval to the minimum (7.5ms). I used long_characteristic example as a peripheral and hello_client is modified for sending long characteristic similar to the http_client example. But still the throughput is less than 8kbps, whereas the following discussion suggesting Re: Maximum BLE throughput for reliable data transfer  ~85kbps. What can I do to improve data?

Does a big MTU helps?

How can I get ride of application level ack?

What is the practical limit with two CyBLE013025 devices as central and peripheral?

0 Likes
1 Solution

For client-to-server transfers, please use the API void bleprofile_sendWriteCmd(UINT16 attrHandle, UINT8 *data, INT32 len) instead of void bleprofile_sendWriteReq(UINT16 attrHandle, UINT8 *attr, INT32 len).

For server-to-client transfers, please use the API void bleprofile_sendNotification(UINT16 attrHandle, UINT8 *attr, INT32 len) instead of void bleprofile_sendIndication(UINT16 attrHandle, UINT8 *attr, INT32 len, LEATT_NO_PARAM_CB cb).

View solution in original post

0 Likes
3 Replies
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

If you want to maximize the throughput. Please try the following notes:

1. Minimize the connection interval. You've already used 7.5ms interval. You may ignore it.

2. Maximize the payload size for GATT transfers. A big MTU size will help.

3. Use unacknowledged transfers. For client-to-server transfers, use the "write-no-response" operation instead of "write". For server-to-client transfers, use the "notify" operation instead of "indicate".

Hi,

Thank you for the reply, but how can implement the step 3 in the software? Could you please provide the API reference or documentation

0 Likes

For client-to-server transfers, please use the API void bleprofile_sendWriteCmd(UINT16 attrHandle, UINT8 *data, INT32 len) instead of void bleprofile_sendWriteReq(UINT16 attrHandle, UINT8 *attr, INT32 len).

For server-to-client transfers, please use the API void bleprofile_sendNotification(UINT16 attrHandle, UINT8 *attr, INT32 len) instead of void bleprofile_sendIndication(UINT16 attrHandle, UINT8 *attr, INT32 len, LEATT_NO_PARAM_CB cb).

0 Likes