Login Register
High RX BLE throughput in TLSR8258
Dec 10, 2021 18:50




I work on large project where TLSR8258 is a main app CPU which controls a number of different board interfaces and has a BLE connectivity to be monitored and configured using a custom Android BLE application. I was able to buildup several custom BLE services with multiple characters in FW based on 3.4.2 single connection SDK examples and for low frequency single messaging all works tolerably well.
But when i reached a point, where i need to realize large file transfer part by part (>60k) from Android app to chip (to accumulate and store on external spi flash for further use) i got a little bit stuck. I was hoping to use a well known BLE feature, which allows to send multiple (up to 6) no-confirm messages to one direction during a single connection interval. But i don't see examples or API description to extract such package batches without missing one by one. I look in audio enabled examples, where i can see that for TX of large data code uses a blc_ll_getTxFifoNumber() API function to check load of FIFO and blm_push_fifo() or notify functions to transmit data chunks.
Does SDK has similar examples that show how to parse and extract payload data from RX fifo? Currently for my custom characteristics which are enabled for Write No Response actions i setup data reception just like in a OTA service with providing callback functions for read and write events. But it looks like this setup can't handle batch of incoming messages if they are sent by Central during one brx event.

2 replies
TL_bloom5 Dec 13, 2021 13:49

Hi Fanis,

   You mentioned the OTA service, actually in our implementation there is support for multiple packet in one interval(I think that is what you mean by one brx event).

Fanis [Author] Dec 22, 2021 20:49

Ok, i think i managed to get what i need.
I was mistakenly thinking that if multiple RX packages exist they are read with multiple calls of blt_sdk_main_loop() in main loop. So i wondered why i receive only first of them and the rest are lost. But in reality it seems that RX callback attached to GATT attribute config enum is called multiple times in a row within one call of blt_sdk_main_loop(), so all stored RX packages from fifo can be read and handled. I slightly rewrote incoming packages handling and see a great speed up. However it wasn't easy to guess exact behaviour of BLE stack API without proper documentation.