-
Does iOS limit the number of packets per connection event to 4?
-
When transmitting GATT data, each packet is 244 bytes. However, starting from the second packet, the updateValue method returns false, and the waiting time for peripheralManagerIsReadyToUpdateSubscribers callback varies significantly, ranging from 50ms to 100ms. Is this behavior normal?
iOS BLE questions
To begin with, there is no "limiting" going on as it is commonly understood, but this is basically a case of reality taking precedence over marketing. I don't know what accessory chipset you have, but you will always find a difference between how many packets the marketing materials claim vs. actual performance. We find that 4 is a more commonly true number than 6 or more some chipsets claim. Also, regardless of what the protocol stack is capable of, processing the data always takes time. It is possible that your connection interval is too short for the capabilities of the stack and processor. You may want to play with longer intervals to see if you would actually get a better throughput.
Also important to understand is that iOS devices are not dedicated BLE accessories, and the resources could and would be being used by other system processes and apps, so system needs to balance performance and resources between many contenders. At any given time the system may decide to give a time slice to another process.
Return time for peripheralManagerIsReadyToUpdateSubscribers
will highly depend on the actual device your app is running on at the time. You may find that sometimes it is shorter, and sometimes it is longer even on the same model of device, and even on the same actual device. Like I said above, Bluetooth is a shared resource with varying availability for any particular app at any given time.
Argun Tekant / DTS Engineer / Core Technologies
In our tests—with iOS devices acting as peripherals in iPhone 16(peripheral)-to-NB(central) scenarios:
- 15ms connection interval, throughput is about 500kbps
- 60ms connection interval, throughput is about 200kbps
And when iPhone 16(peripheral)-to-iPhone 13 pro(central) scenarios, the throughput is roughly 200kpbs.
In this case, are we still limited to only 4 packets, and is the throughput related to this?