nRF conect SDK throughput with iOS isn't as good as old nRF5 sdk or same as Android throughput

Hi, 

Wanted to report an issue with iOS BLE transfer speed being lower than expected on nRF5340 (nRF connect SDK)
We tried to get the same throughput on BLE as nRF52840 and iOS, but failed. The iOS application, and code are unchanged between the tests. 
 

For baseline testing:
Used the  https://github.com/NordicPlayground/nrf52-ble-image-transfer-demo example 
We modified this application to remove camera dependency. (attached in google drive link below)

And for iOS application, we used https://github.com/NordicPlayground/iOS-Image-Transfer-Demo as the iOS aplication for baseline testing.

With MTU=498, and 244 BLE transfer length (244+7 headers) is what gave us north of 80KBps - 100 KBps 



For nRF5340 evaluation:

Another experiment we tried was taking a basicBLE Nordic  UART example and modified it for maximux througput.
Tuned MTU, connection interval from 7.5ms, 15ms, and all values around it. MTU and payload size were also explored, but the best I got was the same settings as above, MTU=498, interval = 15ms.


Link to all code and experiments along with packaet captures is available here:

https://drive.google.com/drive/folders/1Oh1i5HmAwgHEyc-FIOyb4Uvi-NBMpFAr?usp=drive_link 

File included are:
nRF_Connect_iOS_ble_image_transfer.zip (nRF5340 FW for image transfer demo)
peripheral_uart_2.6_sdk.zip(nRF5340 FW for image transfer demo over NUS)

image-transfer-demo_ios.zip (iOS application for image tasnfer demo)
Basic-Chat_ios.zip (iOS application for image tasnfer demo over NUS)

iOS-nRF_Connect_sdk_slow_throughput_x.pcap (slow throughput packet capture)
working_image_transfer_old_sdk_x.pcapng (nRF5 connect sdk high speed transfer)


Can you please help us achieve same speeds or better with nRF5 connect SDK. 

On a side note, Android will happily give us the expected 1.2Mbps data throughput. 

 

Parents
  • Hi,

    As you get the expected data rate with Android also on the nRF5340 I would expect differences in the connection parameters (or other parameters of the link like data length). Can you upload a sniffer trace for Adnroid as well as for iOS for comparison? Also please upoad the other relevant files here on DevZone (you can either drag-and-drop into the editor window or select Insert->Image/Video/File.

  • Hi Einar, 

    I did a packet capture with iOS and Android both, uploaded the nRF code into this drive here (accessible by link)

    drive.google.com/.../1bl1F0ELbXijkWktsCTSPfLEAC598DHi8

  • Hi,

    The Android trace there is encrypted and not not decrypted by the sniffer, but there is a difference in packets per connection event and the connection interval. On android there is a longer interval (45 ms assuming there is no connection interval I cannot see due to encryption) vs 30 on the iOS side. And the packets per connection is 5 on iOS (at least in the event i checked), and 10 on the Android case. The MD (more data) field is set to true though, so it is the phone that choose to close the connection event for some reason, and it is difficult to say what that could be as that is handled in the iOS bluetooth stack.

  • Hi Einar, 

    I am trying to understand what should we do during configuration/negotiation so that "nRF Connect SDK" along with nRF5340 behaves the same  as "nRF5 SDK" on nRF52840 (throughput example) .

    We can get upto 800-1000 kbps on the old nRF5 SDK. This would help a lot with out use case. In ideal conditions I have seen 1100-1200 kbps on the same. 

    But with nRF Connect this is limited to 600 Kbps. Would you be able to look at the negotiation with the Old nRF5 example with high throughput , and see what we can do with nRF Connect SDK?

    The first drive link in the thread, has the packet captures. If needed I can share more captures

  • Hi,

    Can you point to exactly which sniffer traces I should refer to? When I look at working_image_transfer_old_sdk_3.pcapng and iOS-nRF_Connect_sdk_slow_throughput_600_kbps_plus.pcapng I see that in both cases you get long packets of 277 bytes about 5 times each connection event, and with a connection interval of 15 ms (after the connection parameter update). So looking at these traces I would expect that you see the same throughput on iOS with old and new SDK?

Reply
  • Hi,

    Can you point to exactly which sniffer traces I should refer to? When I look at working_image_transfer_old_sdk_3.pcapng and iOS-nRF_Connect_sdk_slow_throughput_600_kbps_plus.pcapng I see that in both cases you get long packets of 277 bytes about 5 times each connection event, and with a connection interval of 15 ms (after the connection parameter update). So looking at these traces I would expect that you see the same throughput on iOS with old and new SDK?

Children
No Data
Related