Максимальная длина пакета для Bluetooth LE?

Мне было интересно, какова максимальная длина пакета в Bluetooth Low Energy. Ограничение в 20 байтов, если часто говорят, например, здесь

"BLE позволяет передавать максимум 20 байтов".

"Вы правы, что спецификация BLE не позволяет операциям записи превышать 20 байтов".

Однако, читая спецификацию ядра Bluetooth, мы видим, что значение ATT_MTU записывается с 2 байтами, что означает, что оно может достигать 65 535 байтов.

Что за всем этим стоит?

1 ответ

Спецификация всегда верна!

В Bluetooth 4.0 была добавлена ​​BLE с максимальной полезной нагрузкой в ​​33 байта (не включая поля адреса доступа и CRC). Каждый уровень в стеке протоколов берет свое сокращение:

  • 2 байта для заголовка пакета (тип и длина),
  • 4 байта для MIC (когда включено шифрование),
  • 4 байта для заголовка L2CAP (идентификатор канала и длина пакета),
  • Протокол ATT оставлен с 23 байтами, который является значением по умолчанию и минимальным MTU для протокола ATT.

С запросом записи ATT (или уведомлением) 3 байта используются типом команды и идентификатором атрибута, 20 байтов оставлено для данных атрибута.

На уровне ATT этот предел может быть увеличен двумя способами:

  • Использование фрагментации на уровне L2CAP:

    L2CAP разделит блоки ATT PDU на фрагменты по 27 байтов (23 для первого).

    Недостатки:

    • Требуется память с обеих сторон,
    • Это менее надежно, так как пакеты могут быть потеряны при некоторой реализации (даже если спецификация не говорит о потере пакетов на уровне L2CAP, это происходит)
  • Использование расширения длины пакета, представленного в Bluetooth 4.2:

    До 251 байта на уровне радиосвязи (255 с MIC), поэтому для данных атрибута доступно 242 байта.

    Недостатки:

    • Все еще новый, нуждается в аппаратной поддержке, поэтому не внедряется повсеместно (даже если объявляет о поддержке BLE 4.2),

    • Пакет с более длительным эфирным временем будет иметь больше шансов получить заклинивание, поэтому более длинные пакеты предполагают больше повторных передач.

Если используются оба метода, L2CAP может использовать большие фрагменты.

Независимо от низкоуровневого разделения ATT PDU, длина значения атрибута ограничена 512 на 3.F 3.2.9.

Другие вопросы по тегам