BLE UART Bridge Throughput Limitation at 1Mbps PHY and 7.5ms CI — Packet Count per Interval?

Hi Nordic team,

I'm implementing a BLE UART bridge (emulating the old SPP profile) using a custom service. The central device (dongle) I'm using only supports the classic BLE packet structure with 20 bytes of application payload per packet.

I'm currently running at 1 Mbps PHY with a connection interval of 7.5 ms. Given the 150 µs inter-frame spacing (IFS), in theory I could fit up to 16 packets per connection interval, which would result in a maximum data throughput of about 0.34 Mbps for application payload.

However, I'm not achieving that throughput in practice (I start having problems if I try to transmit with an application payload data throughput of more than 0.13 Mbps). I have a few specific questions regarding how this works in the Nordic BLE stack and Zephyr:

  1. Are 16 packets per connection interval actually transmitted? Or is there a limit imposed by the BLE stack that reduces this?

  2. Is the number of packets per connection interval configurable in Zephyr? If so, How can I set this limit?

  3. Is there a requirement to leave a "gap" at the end of each connection interval? In other words, what happens if the last packet transmission overlaps with the start of the next connection interval? Does the stack prevent this and enforce idle time before the next interval?

I’m trying to optimize the link throughput as much as possible within the constraints of classic BLE (no DLE, 1M PHY), and I’d appreciate any insight on these low-level scheduling details.

Thanks in advance for your help!

Best regards,

Pedro.

Related