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

nRF52832 BLE UART transfer rate limit?

I want to transfer data using UART to BLE by Baud Rate 460800 up to(using nRF52832). I need to send a file, its size is 100MBytes However, the use of examples(14.0vesion ble_central / ble_peripheral) to modify the test, but the transfer rate of only 1.5KByte / ps Is there any way to do 10KBytes / ps up ?

How can I do it successly?

Thank you.

  • It doesn't make any sense to talk about baudrate in BLE UART;) I guess you've already read on this forum and around the internet that transferring 100MB files over BLE is not the right application but if you insist on doing it then you will need to accept the throughput of 1-10kBps. This depends on connection parameters and LL+GATT capabilities of BLE stacks on both sides. As you can see from throughput demos by Nordic you can go up to ~100kBps with 1MBps PHY but that's throughput on LL when you use all MTU size and Data Length Extension features of BT 4.2 (and when both sides support it in ideal way of course). On APP layer over GATT (where you probably measure your throughput)it will be less (but still should be >50% of that). However if you cannot utilize all these features and you e.g. use some off-the-shelf mobile device with Android and iOS then you are typically limited to just 30-50ms connection interval, 3-6 PDUs per interval, MTU size of max. 160B and no DLE (because phone will be BT 4.1) so the actual throughput will somewhere close to these 1.5kBps as you see today.

    If you need any more help please bother o give us all the details of your test/reference set-up and use case.

  • there any way to do 10KBytes / ps up ?

    Depends on the other party, unfortunately.

    Android 5.0+ can request a higher connection priority, this will use a faster interval time (about 15ms IIRC). I got about 4.5 kByte/sec throughput in my app.

    Windows 10 can go even higher - but that depends on the BT hardware. One of my BT4.0 USB sticks only does the 4.5 kB/s like Android, some others go as high as ~12KByte/sec. Note that Windows 10 Creatrors and newer would accept even faster connection times - but you need to request them from your device.

    I don't use IOS here, but you seem to be limited to 50ms interval time here. That would give you only about 1.5 kB/sec IIRC.

    The only workaround that I am aware of is implementing the HID service on the BTLE device. Presense of this service makes IOS use a faster connection interval, but that has side effects: IOS will now actively try connect to your device as long as there is pairing/bonding information present.

  • Btw. default connection interval in iOS (at least till iOS9) used to be 30ms while Android uses 48.75ms. Yes, the only way how to go lower is to pretend being BLE HID Service which should allow going down to 10-20ms range (at least on iOS).

Related