Перейти к содержанию

Интервал соединения BLE

Соединённые по BLE устройства не держат радио включённым: они встречаются в эфире по расписанию и обмениваются пакетами. Период этих встреч — интервал соединения — задаёт и задержку, и скорость, и время жизни батареи.

Обновлено Редакция GAW

Интервал соединения (connection interval, connInterval) — период, с которым два соединённых устройства Bluetooth LE встречаются в эфире. Каждая встреча — событие соединения: центральное устройство в начале события отправляет пакет, периферия отвечает, и обмен продолжается, пока у сторон есть данные или пока не кончится событие. Все пакеты одного события идут на одном канале, а между событиями радио молчит. По спецификации connInterval кратен 1,25 мс и лежит в пределах от 7,5 мс до 4,0 с (Core 6.0, Vol 6, Part B, разд. 4.5.1).

Три параметра

ПараметрДиапазонСмысл
connInterval7,5 мс – 4,0 с, шаг 1,25 мспериод событий соединения
connPeripheralLatencyот 0; без подрейтинга (latency + 1) ≤ 500сколько событий подряд периферия может пропустить, если ей нечего передать
connSupervisionTimeout100 мс – 32 с, шаг 10 мсчерез сколько без принятых пакетов соединение считается потерянным

По разд. 4.5.1 и 4.5.2. Тайм-аут должен быть больше

2×(1+latency)×connInterval2 \times (1 + latency) \times connInterval

(без подрейтинга соединения, connSubrateFactor = 1). Пример (наш расчёт): при интервале 100 мс и задержке 4 периферия может просыпаться раз в 500 мс, а тайм-аут должен быть больше 1 с.

Компромисс

  • Короткий интервал — малая задержка и высокая скорость: событий в секунду больше, и в каждом можно передать несколько пакетов.
  • Длинный интервал и задержка периферии — экономия батареи: устройство большую часть времени в спящем режиме и просыпается редко.

Значения задаёт центральное устройство — инициатор соединения — в пакете CONNECT_IND; периферия может только попросить другие процедурой запроса параметров, а изменить их можно процедурой обновления соединения (разд. 4.5.1). GAP описывает и обычный сценарий: сразу после соединения центральное устройство ставит короткий начальный интервал с нулевой задержкой, чтобы быстро пройти сопряжение, шифрование и обзор сервисов, а затем переходит на значения, которые периферия указала в характеристике Peripheral Preferred Connection Parameters. Неприемлемые параметры сторона может отвергнуть, разорвав соединение с кодом 0x3B, но спецификация просит устройства быть терпимыми к параметрам другой стороны (Vol 3, Part C, разд. 9.3.9 и 9.3.12). Смартфоны и их стеки нередко ограничивают допустимые интервалы, поэтому проверяйте, какие параметры реально установились.

Установление соединения

Соединение считается установленным, только когда принят первый пакет от другой стороны; если этого не случилось за 6 событий, соединение считается потерянным (разд. 4.5.2). До соединения устройство находят по рекламе, а данные после соединения описывает GATT. Как интервал влияет на реальную скорость BLE — в статье «Bluetooth Low Energy».

Частые вопросы

Как выбрать интервал соединения для датчика на батарейке?

Спецификация разрешает от 7,5 мс до 4 с с шагом 1,25 мс. Короткий интервал даёт малую задержку и высокую скорость, но устройство чаще просыпается. Для датчика, который раз в несколько секунд отдаёт пару байт, разумен интервал в сотни миллисекунд с задержкой периферии. Окончательное значение выбирает центральное устройство — смартфон может не принять запрошенное.

Что такое задержка периферии (peripheral latency)?

Число событий соединения подряд, которые периферия может пропустить, если ей нечего передать. При интервале 100 мс и задержке 4 датчик просыпается раз в 500 мс, но может ответить и в ближайшем событии, если появились данные. Так экономят батарею, не теряя быстрой реакции.

Как выбрать тайм-аут соединения?

Он должен быть кратен 10 мс, лежать в пределах 100 мс – 32 с и быть больше 2 × (1 + задержка) × интервал. Для интервала 100 мс и задержки 4 это больше 1 с. Слишком короткий тайм-аут рвёт соединение при кратковременных помехах, слишком длинный — долго не замечает, что устройство ушло.

Источники

  1. Bluetooth SIG. Bluetooth Core Specification, version 6.0 (HTML), Vol 6 Part B — Link Layer — разд. 4.5.1: время событий соединения задают connInterval, connSubrateBaseEvent, connSubrateFactor, connContinuationNumber и connPeripheralLatency; connInterval кратен 1,25 мс в пределах 7,5 мс – 4,0 с, его задаёт инициатор в CONNECT_IND или AUX_CONNECT_REQ и можно изменить процедурами Connection Update и Connection Parameters Request; connPeripheralLatency — сколько подряд событий периферия может не слушать, connSubrateFactor × (latency + 1) ≤ 500 и connInterval × connSubrateFactor × (latency + 1) меньше половины тайм-аута; разд. 4.5.2: тайм-аут соединения кратен 10 мс в пределах 100 мс – 32,0 с и больше (1 + latency) × connSubrateFactor × connInterval × 2; соединение, не установленное за 6 событий, считается потерянным; все пакеты одного события идут на одном канале
  2. Bluetooth SIG. Bluetooth Core Specification 6.0, Vol 3 Part C — Generic Access Profile — разд. 9.3.9: процедура обновления параметров соединения — центральное устройство использует Connection Update канального уровня, периферия — Connection Parameters Request или команду L2CAP; неприемлемые параметры — разрыв с кодом 0x3B, устройства должны быть терпимы к параметрам другой стороны; разд. 9.3.12: начальный интервал TGAP(initial_conn_interval) с нулевой задержкой, чтобы быстро пройти сопряжение, шифрование и обзор сервисов, затем переход на значения из характеристики Peripheral Preferred Connection Parameters

Нашли ошибку?