This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Best way to send larger chunks of data through BLE UART?

Right now i have based myself on the BLE UART example where it is UART over BLE.

So naturally I use ble_nus_string_send to send data. After some digging I saw that this takes max 20 bytes of data. Also there seems to be a fixed queue size, so anything after a filled queue will be disregarded with an error returned from this function. The qeue size by the looks of it is 6, right?

So, how do I send bigger chunks (all the data is one big chunk which is treated as one entity)? First I tried to just retry if ble_nus_string_send returned an error with a nrf_delay_ms(20) in a loop with 100 retries. It does work, but it can't be an elegant solution. Also on the 2nd chunk of data sent over, it seems to struggle a lot more when sent over. It comes in small portions of 3 chunks over time. I am testing on android with the NRF UART app.

Thanks!

Parents
  • @Emil: You can do what you are doing, try to queue the notification packets as long as the buffer is not full, and try again after you receive BLE_EVT_TX_COMPLETE event (meaning there are packet sent in the last connection event).

    Or you can declare your characteristics with bigger size than 20byte (max 510 bytes) and let the central to use long read to retreive the value. I don't think notification is supported to send long characteristic.

  • @Emil: No, the UART example is actually the basic example for this. Note that the 20 byte limit is the maximum payload size for the BLE att packet. You can declare your characteristics with longer size but when notifying only first 20 bytes is notified. You would need to use long write or long read to transfer long characteristics. And on air it's also splited in to 20 bytes trunks.

    There is also a good application note that you can follow is the nAN36. However, it's a little bit outdated since it's was written about 1.5 year ago.

Reply
  • @Emil: No, the UART example is actually the basic example for this. Note that the 20 byte limit is the maximum payload size for the BLE att packet. You can declare your characteristics with longer size but when notifying only first 20 bytes is notified. You would need to use long write or long read to transfer long characteristics. And on air it's also splited in to 20 bytes trunks.

    There is also a good application note that you can follow is the nAN36. However, it's a little bit outdated since it's was written about 1.5 year ago.

Children
No Data
Related