Каков максимальный ATT_MTU, разрешенный Bluetooth LE?

#bluetooth #bluez #bluetooth-gatt

#bluetooth #bluez #bluetooth-gatt

Вопрос:

При написании приложения для работы в качестве сервера Gatt с использованием API DBus Bluez MTU, заданный вызовами команд ReadValue и AcquireNotify , сообщает MTU как 517.

Максимальный размер полезной нагрузки канала передачи данных 251 байт (27 без увеличения длины данных). Из-за 4-байтового заголовка L2CAP максимальное значение MTU составляет 247.

Не зависит ли значение ATT_MTU от ограничения длины данных канального уровня? Фрагментированы ли данные на более низком уровне, и если да, то каков максимальный ATT_MTU?

Ответ №1:

ATT_MTU — это 16-разрядное число, и, следовательно, оно может быть не более 65535. Однако ATT_MTU согласовывается между двумя устройствами и будет установлен на минимум максимального значения ATT_MTU для обоих устройств.

Но характеристика может составлять только 512 байт, поэтому обычно такой большой mtu, как 65535, не используется. Вам пришлось бы использовать «чтение нескольких характеристик» или что-то подобное, чтобы использовать такой большой mtu.

Значение ATT_MTU полностью не зависит от длины данных канального уровня и автоматически фрагментируется hci и канальным уровнем. Хост L2CAP — это тот, который обычно повторно собирает пакеты.

Ответ №2:

Да, значение ATT_MTU не зависит от ограничения длины данных канального уровня. Как следует из названия, ATT_MTU относится к максимальному объему данных, которые могут быть переданы на уровне ATT, тогда как обычная длина пакета относится к максимальному объему данных, которые могут быть отправлены на физическом уровне.

Как вы предположили, это означает, что если ATT_MTU превышает максимальную физическую длину пакета, данные фрагментируются на нижнем (физическом) уровне. Например, если максимальное значение ATT_MTU равно 517, а максимальный размер блока BLE равен 251, это означает, что передаваемые данные будут разделены на блоки по 251 байту. Вот почему идеальной комбинацией ATT_MTU / длины пакета обычно является значение ATT_MTU 247 и длина пакета 251.

Что касается максимального значения ATT_MTU, я считаю, что оно не указано в спецификации Bluetooth и поэтому должно зависеть от чипа. В спецификации Bluetooth упоминается, что максимальная длина атрибута должна быть 512 (спецификация Bluetooth Core 5.2, том 3, часть F, раздел 3.2.9 Длинные значения атрибута):-

Максимальная длина значения атрибута должна составлять 512 октетов.

Следовательно, значение ATT_MTU, равное 515 или более, безусловно, сможет передавать наибольший атрибут, разрешенный спецификацией Bluetooth.

Вы также можете взглянуть на ссылки ниже для получения дополнительной информации:-