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

Maximum value for ATT_MTU size for 10ms connection interval

I'm transmitting data packets each of 48 bytes in the form of notifications using Bluetooth 5.0. When I observed the logs over sniffer, I see that the packets are fragmented which is shown as CRC errors and L2CAP fragmentation.

Goal: To transmit and receive packets of minimum 48 bytes per connection interval without any delay or retransmission.

  1. How to determine the max att_mtu size for this connection interval such that there is very less/no delay and high throughput?
  2. Does DLE extension effect this delay and high throughput? if so, then what should be the ATT_MTU size with and without DLE?
  3. Also, I added the battery service which sends data every 1 sec. So how to adjust the ATT_MTU size accordingly?
  4. Does the DLE and connection event extension be set in both central and peripheral?

Kindly help me as I am a newbie to Bluetooth project.

sniffer logs

Thank you very much in advance! Nivetha

Central: nrf52840 peripheral: nrf52840 Connection interval: 10ms Packet size: 48 bytes ATT_MTU size: 51 bytes(assuming 48 bytes + 3 bytes overhead for notifications) Soft device: s140 5.0.0-2.alpha event length: 7.5ms Connection event extension enabled as well

  • How to determine the max att_mtu size for this connection interval such that there is very less/no delay and high throughput?

    The latency (I guess this is what you mean by delay) is mostly determined by the connection interval. While the throughput depends on a lot of things. What kind of throughput do you want? 48 bytes each way with a connection interval of 10 ms? This isn't really high throughput, and shouldn't be a problem.

    Does DLE extension effect this delay and high throughput? if so, then what should be the ATT_MTU size with and without DLE?

    DLE extends the maximum size of the link layer packets, while increasing the ATT_MTU increases the higher layer attribute packets. Increasing the ATT_MTU doesn't really help that much if you don't do DLE as well. If you don't use DLE the ATT packets will be fragmented, sent over the air, and then reassembled on the other side of the link. DLE in general gives you higher throughput (as long as you don't have a lot of packet loss), doesn't affect latency.

    Also, I added the battery service which sends data every 1 sec. So how to adjust the ATT_MTU size accordingly?

    I don't understand. Why would you need to adjust the ATT_MTU size for this?

    Does the DLE and connection event extension be set in both central and peripheral?

    DLE is a symmetric procedure, so yes. It doesn't help if your device can send a large link layer packet if the peer can't receive it. Connection event extension should usually be set on both sides yes, but be aware that this is a Nordic specific thing, while DLE is BLE spec.

  • Thank you so much, Peter. I have set 48 bytes as minimum data size with ATT_MTU of 52 bytes so that I can send with a very low/0 latency. However, my doubt is how far can I increase the ATT_MTU >52 bytes for 10ms connection interval such that I can stuff more data in with low latency and achieve high throughput. A Best optimal solution. I think I need to do more testing to come to a trade-off. I have also added DLE (ATT_MTU size + 4 bytes) at the central and peripheral.

Related