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

Recommended configuration for data length extension + multiple connections

Hi

The concept of setting the event_length (the time set aside per connection) was introduced post softdevice v3.0.0. To my understanding, with softdevice v3.0.0, the softdevice dynamically sets the time allocated per connection depending on the number of connections. My questions are:-

  1. Is it possible to replicate this behavior for the current version (v5.0.0) of the softdevice?
  2. What is the relation (if any) between 'event_length' and 'connection interval'?
  3. What is the recommended configuration for achieving both data length extension and 8+ connections?

To give some context, we are currently trying to write an app which is capable of both: data length extension and 8 simultaneous connections+pairings. We are therefore setting our event_length to 320 (i.e. 400ms for data length extension and high throughput) and our conn_count to 8 when enabling the softdevice. Everything works fine and we don't get any errors when enabling the softdevice. However, when we try to pair with the connected devices, the pairing process fails. This looks to be a timing issue because successful pairing is performed over several connection intervals. When we change our event_length to BLE_GAP_EVENT_LENGTH_DEFAULT (3), the process succeeds without an issue. Also, the same process succeeds on v3.0.0 of the softdevice.

We are using softdevice S132 v5.0.0 on an nrf52832 chip.

Thanks

  • You set the event length to 1, 3 and 6? You should set it to 1750, 3700 and 6560 (in 1.25 ms units).

  • Can you please explain why that is? The values in Table 25 are in the us range, therefore 1.75, 3.7, and 6.56 ms. So in 1.25 ms units, this is equivalent to 1.4, 2.96, and 5.25. Is that correct?

    Another point, in softdevice v3.0.0, setting the BW to LOW, MID, and HIGH is the equivalent of sending 1, 3, and 6 packets per connection interval. For throughput testing, this allowed us to change the BW to 6 when testing against Android, and 3 when testing against iOS (even though iOS supports 4 packets per interval). How is this replicated with the event length parameter (with a packet length of 27 and a packet length of 251)?

  • Yes. They are in us range. And now you have to set the event length units of 1.25 ms. The minimum event length is 2 (2500 us). So that would be be closest to low bandwidth. 3 (3750 us) would be closest to medium bandwidth. 5 (6250 us) or 6 (8750 us) would be closest to high bandwidth.

    You other point seems to be answered by this paragraph in the Suggested intervals and windows section in the S132 v5 SDS:

    When long Link Layer Data Channel PDUs are in use, it is recommended to increase the event length of a connection. For example, Link Layer Data Channel PDUs are by default 27 bytes in size. With an event length of 3.75 ms, it is possible to send three full sized packet pairs on LE 1M PHY in one connection event. Therefore, when increasing the Link Layer Data Channel PDU size to 251 bytes, the event length should be increased to 15 ms. To calculate how much time should be added (in ms), use the following formula: ((size - 27) * 8 * 2 * pairs) / 1000.

  • OK thanks, I think this is becoming clearer. However I'm not sure I fully understand the formula so can you please check if my math is correct:-

    For 1 packet (size = 27) per conn interval, the event length = 1.25 + ((27-27)*8*2*(1))/1000>  = 1.25ms
    For 3 packets (size = 27) per conn interval, the event length = 3.75 + ((27-27)*8*2*> (3))/1000 = 3.75ms
    For 6 packets (size= 27) per conn interval the event length = 7.5 + ((2> 7-27)*8*2*(6))/1000 = 7.5ms 
    For 1 packet (size = 251) per conn interval, the event length = 1.25 + ((251-27)*8*2*(1))/1000 = 4.834ms
    For 3 packets (size= 251) per conn interval, the event length>  = 3.75 + ((251-27)*8*2*(3))/1000 = 14.5ms 
    For 6 packets (size= 251) per conn interval, the event length = 7.5 + ((251-27)*8*2*(6))/1000 = 29ms
    

    So roughly the values are 1, 3, 6, 4, 12, and 24 (respectively), in 1.25ms units. Is this correct?

Related