TS-M1052S

Most Bluetooth modules in production today are not serving a single peer — they are managing 3, 5, or even 20 concurrent connections to sensors, smartphones, gateways, and actuators. Multi-connection management is where junior BLE engineers discover that connection interval, slave latency, MTU size, PHY rate, and data length extension are not independent knobs but a tightly coupled scheduling problem. Get one wrong and you get intermittent disconnects, 400 ms latency spikes, or throughput that never exceeds 30 kbps despite a 2 Mbps PHY. This article breaks down the scheduler model, derives throughput and latency budgets from first principles, and benchmarks real silicon.

1. The BLE Connection Event Model

A BLE connection is not a continuous link — it is a periodic appointment. The master (central) and slave (peripheral) agree on a connection interval (T_interval), and within each interval there is one connection event where both radios are active. The master transmits first, the slave responds, and they may exchange multiple PDUs in a ping-pong within that event. When there is no more data, or when the connection event is extended beyond its allotted time, the radios sleep until the next interval.

Key parameters defined in LL_CONNECTION_PARAM_REQ:

  • Connection Interval (connInterval): 7.5 ms to 4.0 s, in 1.25 ms steps. This is the period between connection events.
  • Slave Latency (connLatency): 0 to 499. The peripheral may skip this many consecutive events without being disconnected. Each skipped event saves ~1 ms of radio-on time.
  • Supervision Timeout (supervisionTimeout): 100 ms to 32 s. If no packet is received within this window, the link is terminated. Must satisfy: supervisionTimeout > (1 + connLatency) × connInterval × 2.

The connection event duration is not fixed — it is bounded by the lesser of (a) the data available to send, (b) the connection event length negotiated in LL_CONNECTION_PARAM_REQ, and (c) the radio’s maximum event time. For nRF52840, the default max event length is 40 ms but can be configured up to 4000 ms via sd_ble_gap_conn_evt_lengths_set(). For CC2640R2F, the max event length is controlled by the GAPBondMgr parameter set.

2. Multi-Connection Scheduling: Time Division

When a module acts as central with N peripherals, the scheduler must place N connection events within each interval. The fundamental constraint is that only one radio transaction occurs at any given instant — BLE is half-duplex on a single channel. The scheduler assigns each connection a time slot within the interval:

ConnectionIntervalEvent OffsetEvent DurationNotes
Conn A30 ms0 ms3 msSensor, low data
Conn B30 ms5 ms8 msAudio stream
Conn C60 ms15 ms3 msEvery other interval
Conn D100 ms20 ms2 msSlave latency = 4

The scheduler must ensure no two events overlap. With 4 connections at 30 ms interval, if each event is 5 ms, total active time is 20 ms out of 30 ms — a 67% duty cycle. At 8 connections, 40 ms of events would overflow the 30 ms interval, causing the scheduler to push some events to the next interval, effectively doubling their latency.

2.1 Maximum Concurrent Connections by Chip

ChipMax CentralMax PeripheralMax TotalLimiting Factor
nRF52840202020RAM (8 KB per conn)
nRF52832777RAM (64 KB total)
CC2640R2F838TI-RTOS scheduler
BGM220SC848 Gecko stack limit
ESP32-C3939Bluedroid/NimBLE
ESP32 (dual-core)15415Bluedroid

The nRF52840’s 20-connection limit is not a silicon ceiling — it is the SoftDevice’s compiled maximum. Each connection consumes approximately 8 KB of RAM for the link layer context, TX/RX buffers, and L2CAP state. At 20 connections, that is 160 KB of the 256 KB RAM, leaving 96 KB for application code. The ESP32-C3 with NimBLE achieves 9 connections in 60 KB of heap — significantly more memory-efficient.

3. Throughput Budget Calculation

BLE throughput is often quoted as “2 Mbps PHY = 2 Mbps throughput.” This is wrong by a factor of 3-5×. The actual throughput depends on a chain of overheads:

3.1 PDU Overhead Chain

Each data PDU carries: 1 byte preamble + 2 byte access address + 2 byte header + 2 byte length + payload + 3 byte CRC = 10 bytes overhead per PDU. At 2 Mbps PHY, 10 bytes takes 40 μs. For a 251-byte payload (DLE max), total PDU time = (10 + 251) × 8 / 2,000,000 = 1.044 ms. The 10-byte overhead is 3.8% — acceptable. But for a 20-byte payload (default), overhead is 33%.

3.2 Inter-Frame Space (IFS)

Between master PDU and slave PDU, the BLE spec mandates a 150 μs inter-frame space (T_IFS). This is dead time — the radio is on but not transmitting. In a single PDU exchange (master sends, slave responds), IFS consumes 300 μs out of the cycle. For 251-byte payloads at 2 Mbps: cycle = 1.044 ms + 0.150 ms + 1.044 ms + 0.150 ms = 2.388 ms. Throughput = 251 × 8 / 2.388 ms = 840 kbps. That is 42% of the raw 2 Mbps.

3.3 Connection Event Packing

Within a connection event, multiple PDU exchanges can occur. The number of exchanges per event depends on the event length and packet size:

ConfigPHYMTUDLEPayload/PDUExchanges/EventThroughput
Default1M232020 B4~53 kbps
MTU 2471M2472020 B4~53 kbps
MTU 247 + DLE1M247251244 B4~650 kbps
MTU 247 + DLE2M247251244 B8~1,300 kbps
MTU 247 + DLE2M247251244 B16*~1,600 kbps

*16 exchanges per event requires a 38 ms event length with 2M PHY. At 30 ms connection interval, this would consume the entire interval for a single connection — feasible only if there is one active connection.

3.4 Throughput Formula

The practical single-connection throughput formula:

Throughput = (payload_per_PDU × 8) / (T_PDU_master + T_IFS + T_PDU_slave + T_IFS) × min(exchanges_per_event, floor(event_length / cycle_time))

Where:

  • T_PDU = (10 + payload_bytes) × 8 / PHY_rate
  • T_IFS = 150 μs
  • cycle_time = T_PDU_master + T_IFS + T_PDU_slave + T_IFS
  • exchanges_per_event = floor(event_length / cycle_time)
  • event_length = min(negotiated_event_length, connInterval × 0.9)

For multi-connection scenarios, divide by the number of active connections sharing the interval. With 4 connections at 30 ms interval and 5 ms events each: each connection gets 5 ms per 30 ms = 16.7% of airtime. At 2M PHY with 244-byte payloads, 5 ms allows ~3 exchanges: throughput per connection = 244 × 8 × 3 / 30 ms = 195 kbps. Total aggregate = 780 kbps — still well below the 2 Mbps raw rate.

4. Latency Analysis

4.1 Best-Case and Worst-Case Latency

For a peripheral sending a notification to a central, the latency depends on when the data is ready relative to the next connection event:

  • Best case: Data is ready just before the connection event. Latency = event processing time ≈ 1-3 ms.
  • Worst case: Data is ready just after the connection event. Latency = connInterval + event time ≈ connInterval.
  • Average case: Latency ≈ connInterval / 2.

With slave latency > 0, the peripheral may skip events. If connLatency = 3 and connInterval = 30 ms, the effective interval is 120 ms. Worst-case latency jumps to 120 ms. Slave latency saves power but increases latency proportionally — there is no free lunch.

4.2 Latency Under Multi-Connection Contention

When N connections share an interval, the scheduler staggers events. If connection B’s event is scheduled at offset 15 ms within a 30 ms interval, and data arrives at the peripheral just after B’s event ends, the worst-case latency becomes connInterval + scheduling_offset = 30 + 15 = 45 ms, not 30 ms. With 4 connections at 30 ms interval, worst-case latency can reach 2 × connInterval = 60 ms if the scheduler pushes the event to the next interval due to contention.

ConnectionsIntervalBest LatencyAvg LatencyWorst Latency
130 ms2 ms17 ms32 ms
230 ms2 ms17 ms47 ms
430 ms3 ms25 ms62 ms
830 ms5 ms45 ms120 ms
47.5 ms2 ms6 ms15 ms

Reducing connInterval from 30 ms to 7.5 ms cuts worst-case latency from 62 ms to 15 ms but increases radio duty cycle by 4×, reducing battery life proportionally. The 7.5 ms minimum interval is rarely used in battery-powered designs because the radio-on overhead (preamble, access address, CRC, IFS) becomes a larger fraction of the useful data time.

5. Connection Parameter Negotiation

The central sets the initial connection parameters, but either side can request a change via LL_CONNECTION_PARAM_REQ (BLE 4.1+). The procedure is:

  1. Initiator sends LL_CONNECTION_PARAM_REQ with preferred parameters and an instant (offset).
  2. Responder accepts or sends LL_CONNECTION_PARAM_RSP with counter-proposal.
  3. Parameters take effect at the negotiated instant (6 connection events later minimum).

Common negotiation failure: the peripheral requests connInterval = 10 ms but the central’s scheduler cannot fit it alongside existing connections. The central rejects or counter-proposes 30 ms. iOS is particularly restrictive — Apple’s Accessory Design Guidelines mandate connInterval between 15 ms and 30 ms, slave latency ≤ 29, and supervision timeout between 2 s and 6 s. Android is more flexible but some OEM stacks reject intervals below 10 ms.

6. PHY Update and Data Length Extension

6.1 PHY Update Procedure (BLE 5.0+)

The LL_PHY_REQ procedure allows either side to request a PHY change. Coded PHY (125 kbps or 500 kbps) trades throughput for range — useful for asset tracking where range matters more than data rate. 2M PHY doubles raw data rate, halving PDU airtime and IFS proportionally.

Critical timing: the PHY update takes effect at a specific connection event (instant). During the transition, both sides must be on the new PHY simultaneously. If either side misses the instant (due to packet loss), the connection survives but the PHY remains unchanged — retry is needed. In practice, PHY update success rate is >99% at close range but drops to 85-90% at the edge of range where packet loss is high.

6.2 Data Length Extension (DLE)

DLE (BLE 4.2+) increases the maximum PDU payload from 27 bytes to 251 bytes. The LL_LENGTH_REQ procedure negotiates the supported max RX/TX lengths and times. Key insight: DLE negotiation is independent of MTU negotiation. MTU is an L2CAP-layer parameter; DLE is a link-layer parameter. Both must be increased to realize the throughput benefit:

  • MTU only (no DLE): L2CAP fragments 244-byte SDU into 9 × 27-byte PDUs. 9 PDUs × 10-byte overhead = 90 bytes wasted.
  • DLE only (no MTU increase): Single PDU carries 251 bytes but L2CAP still fragments at 23-byte MTU. Application sees 20-byte payloads.
  • Both: Single PDU carries 244-byte payload, single L2CAP fragment, minimal overhead.

7. Channel Map and Adaptive Frequency Hopping

BLE uses 37 data channels (0-36) in the 2.4 GHz band, hopping per connection event. The central provides a channel map via LL_CHANNEL_MAP_REQ, marking channels as “used” or “unused.” Unused channels are remapped to used channels via a pseudo-random hop algorithm.

In multi-connection deployments, each connection has its own hop increment (5-16) and channel map. With 4 connections, there will inevitably be moments when two connections land on the same channel in the same interval — the scheduler resolves this by time-division, not channel-division. The channel map update takes effect 6 connection events after the LL_CHANNEL_MAP_REQ instant, similar to PHY update.

Practical tip: in Wi-Fi coexistence scenarios, mark channels that overlap with Wi-Fi channel 1 (BLE channels 0-10), 6 (channels 11-20), or 11 (channels 21-30) as unused. This reduces the channel map to 7 usable channels, increasing collision probability but eliminating Wi-Fi interference. The trade-off is measurable: with 37 channels, packet loss is ~2% in a clean environment; with 7 channels, it rises to ~8% under the same conditions.

8. Scheduler Conflict Resolution

When two connections’ events are scheduled to overlap, the scheduler must decide which to prioritize. The three common strategies:

StrategyDescriptionProsCons
Strict PriorityHigher-priority connection always winsPredictable for critical linksStarvation of low-priority connections
Fair Round-RobinRotate which connection gets the slotNo starvationUnpredictable latency for all
Earliest Deadline FirstServe the connection closest to supervision timeoutMinimizes disconnectsComplex, requires deadline tracking

nRF52 SoftDevice uses a modified fair round-robin with a soft priority system: connections with shorter intervals get more scheduling slots. The ESP32 Bluedroid stack uses strict priority with the first connection getting highest priority — a known issue that causes the 9th connection to experience 2× latency compared to the 1st. NimBLE on ESP32-C3 implements EDF and shows 15-20% better latency distribution under load.

9. Power Consumption Under Multi-Connection

Each active connection event consumes radio current. For nRF52840 at 0 dBm, 1M PHY:

  • RX current: 5.4 mA
  • TX current: 4.6 mA
  • Average per connection event (3 ms, 2 exchanges): ~5 mA × 3 ms = 15 μC
  • Base current (sleep, RTC, RAM retention): 1.5 μA

With 4 connections at 30 ms interval (3 ms events each), per-interval charge = 4 × 15 μC = 60 μC. Average current = 60 μC / 30 ms = 2.0 mA + 1.5 μA base ≈ 2.0 mA. On a CR2032 (220 mAh), lifetime = 220 / 2.0 = 110 hours = 4.6 days. This is why multi-connection central devices typically use Li-ion or USB power, not coin cells.

ConnectionsIntervalEvent LengthAvg CurrentCR2032 Life
130 ms3 ms0.5 mA18 days
230 ms3 ms1.0 mA9 days
430 ms3 ms2.0 mA4.6 days
830 ms3 ms4.0 mA2.3 days
4100 ms3 ms0.6 mA15 days
4 (latency=3)100 ms3 ms0.15 mA61 days

The last row shows the power of slave latency: 4 connections at 100 ms with latency 3 means each peripheral only wakes every 400 ms. Average current drops to 0.15 mA — a 13× improvement. But worst-case latency increases to 400 ms. For sensor networks where 400 ms latency is acceptable (e.g., temperature monitoring), this is the optimal configuration.

10. Real-World Benchmark: 4-Connection Hub

Test setup: nRF52840 DK as central, 4 × nRF52832 peripherals. All at 1M PHY, MTU 247, DLE 251. Connection interval 30 ms. Each peripheral sends 244-byte notifications at maximum rate.

Metric1 Conn2 Conn4 Conn
Throughput/conn712 kbps681 kbps523 kbps
Aggregate712 kbps1,362 kbps2,092 kbps
Avg latency16 ms19 ms28 ms
P99 latency31 ms45 ms72 ms
Disconnects/hr000.3

Per-connection throughput drops by 27% from 1 to 4 connections, but aggregate throughput nearly triples. The P99 latency at 4 connections is 72 ms — 2.4× the average. The occasional disconnects at 4 connections are caused by supervision timeout edge cases where two connections’ events collide and neither can be serviced in time. Increasing supervision timeout from 2 s to 4 s eliminates these disconnects at the cost of slower failure detection.

11. Common Design Pitfalls

  • Enabling 2M PHY but keeping MTU at 23: The 2M PHY halves PDU airtime, but with 20-byte payloads, overhead is 33% and the throughput gain is only ~15%. Always pair 2M PHY with MTU 247 + DLE 251.
  • Using slave latency without checking supervision timeout: If connInterval = 100 ms, connLatency = 9, supervisionTimeout must be > 2000 ms. A 1000 ms timeout will cause frequent disconnects.
  • Assuming connInterval is the latency: With scheduling offsets, worst-case latency can be 2× connInterval. Always budget for 2× in real-time designs.
  • Negotiating parameters during data transfer: The LL_CONNECTION_PARAM_REQ instant is 6 events away. During those 6 events, the link may experience 2× latency as the scheduler adjusts. Negotiate parameters during idle periods.
  • Forgetting iOS restrictions: Apple enforces 15-30 ms interval. A peripheral requesting 7.5 ms will be rejected. Design for 15 ms minimum when iOS compatibility is required.
  • Stacking connections at the same offset: If all connections use offset 0, the scheduler must serialize them within the first few ms of each interval. Spread offsets across the interval to reduce contention.

12. Design Checklist

  • [ ] Connection interval chosen to balance latency vs. power (typical: 15-100 ms)
  • [ ] Slave latency set to 0 for real-time, 3-9 for low-power sensors
  • [ ] Supervision timeout ≥ (1 + connLatency) × connInterval × 3 (safety margin)
  • [ ] MTU negotiated to 247 at connection establishment
  • [ ] DLE negotiated to 251 at connection establishment
  • [ ] 2M PHY requested if both sides support BLE 5.0+
  • [ ] Connection event offsets distributed across interval
  • [ ] Channel map updated to exclude Wi-Fi-overlapping channels
  • [ ] iOS compatibility verified if applicable (15-30 ms interval)
  • [ ] Worst-case latency budgeted at 2× connInterval × (1 + connLatency)
  • [ ] Throughput budget calculated per connection, not just aggregate
  • [ ] Supervision timeout increased for multi-connection (>4) to handle scheduler contention
  • [ ] Current consumption measured under full load, not single-connection

13. Conclusion

Multi-connection BLE module design is a scheduling problem at its core. The raw PHY rate (1M or 2M) is the least interesting number — the real throughput is determined by PDU overhead, IFS, event packing, and the number of connections sharing the interval. Latency is not connInterval but can be up to 2× connInterval under contention. Power scales linearly with active connections and inversely with interval. The engineer’s job is to choose connInterval, connLatency, MTU, DLE, and PHY as a coupled system, not as independent checkboxes. A 4-connection hub at 30 ms / MTU 247 / DLE 251 / 2M PHY achieves 523 kbps per connection with 28 ms average latency — practical, useful, and a far cry from the “2 Mbps” on the datasheet. For your next multi-connection BLE deployment, start with the throughput formula, not the spec sheet headline.