Интервал соединения 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).
Три параметра
| Параметр | Диапазон | Смысл |
|---|---|---|
| connInterval | 7,5 мс – 4,0 с, шаг 1,25 мс | период событий соединения |
| connPeripheralLatency | от 0; без подрейтинга (latency + 1) ≤ 500 | сколько событий подряд периферия может пропустить, если ей нечего передать |
| connSupervisionTimeout | 100 мс – 32 с, шаг 10 мс | через сколько без принятых пакетов соединение считается потерянным |
По разд. 4.5.1 и 4.5.2. Тайм-аут должен быть больше
(без подрейтинга соединения, 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 с. Слишком короткий тайм-аут рвёт соединение при кратковременных помехах, слишком длинный — долго не замечает, что устройство ушло.
Источники
- 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 событий, считается потерянным; все пакеты одного события идут на одном канале
- 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
Нашли ошибку?
Смотрите также
- Bluetooth LE для разработчикаPHY 1M/2M/Coded, каналы 37–39, реклама, GAP и GATT, MTU, интервал соединения, скорость
- Реклама BLE (advertising)Широковещательные пакеты BLE на каналах 37–39 для обнаружения и маячков
- GATT (профиль атрибутов BLE)Структура данных Bluetooth LE: сервисы, характеристики, уведомления
- Режимы снаSleep mode: Idle, Power-down, пробуждение и ток
- LE Coded PHYДальний режим Bluetooth LE с кодированием: 125 и 500 кбит/с