Vega ble в блютуз что
BLE под микроскопом
BLE под микроскопом. Часть 1
Зачем придумали BLE
Как только люди научились передавать информацию без помощи проводов, встала задача передачи данных, используя устройство с батарейным питанием. Проблема в том, что ему должно помогать другое устройство, которое будет постоянно либо прослушивать эфир, либо передавать данные. Проблема возникает в том случае, если и приемник и передатчик имеют батарейное питание. В этом случае приходит на помощь BlueTooth Low Energy (BLE). Он впервые вошел в протокол BlueTooth 4.0. На данный момент уже вышла спецификация BlueTooth 5.0, однако мы будем рассматривать в основном формат BlueTooth 4.0, иногда указывая нововведения для формата 5.0. В качестве одного из устройств обычно выступает смартфон, а второго — батарейный гаджет. Андроид поддерживает BLE с версии 4.3.
Для передачи и приема данных необходима энергия, поэтому поднимают скорость передачи данных, что бы в единицу времени успеть передать больше информации. Для этого в BLE принята скорость передачи информации в 1 Mbit/c. Однако не только скорость передачи данных важна. Самым важным в BLE является то, что устройства связи умеют переходить в синхронный режим работы. Другими словами, устройства спят 99% времени, потом просыпаются на очень короткое время, обмениваются информацией и опять засыпают. Однако перед тем как войти в этот режим, необходимо пройти процедуру синхронизации. Для этого существует режим «advertising». Его мы рассмотрим позднее. А перед тем как погрузится в описание протокола BLE, хотелось бы затронуть тему инструментальных средств, для работы с протоколом BLE.
Инструменты
Для того чтобы разобраться во всем многообразии посылок и запросов нам необходимы инструментальные средства. С их помощью мы смогли бы увидеть содержимое посылок и проконтролировать механизм взаимодействия между устройствами. Для этих целей мы будем использовать nRF51822 Development Dongle (PCA10000), программу сниффера и, для отображения результатов, хорошо известную всем сисадминам программу «Wireshark».
Программы бесплатные, но достать сам донгл может оказаться проблемой. Однако без инструментария, заниматься разработкой таких сложных устройств будет весьма проблематично. На первом этапе может помочь программа на андроиде «nRF Connect».
Она позволяет сканировать эфир, находить и разбирать посылки как присоединяемых, так и не присоединяемых устройств. У Nordic-a есть и ещё инструменты для разработки BLE устройств, но нам будет достаточно этих. На российском рынке присутствует представитель компании Nordic – фирма «Rutronik» (rutronik24.com, rutronik.com). Через её представителей можно приобрести необходимые микросхемы, отладочные платы и т.д. Кроме того, в интернете имеется форум, на котором представители фирмы отвечают на вопросы разработчиков.
Сначала вкратце поговорим о том, как пользоваться нашими инструментами. Вставим в разъем USB наш донгл и запустим программу ble_sniffer_win. Мы увидим следующее окно.
Если донгл увидит BLE устройства, то внизу появится информация о них. В данном случае, в эфире присутствует одно устройство с именем «TestBLE». Так же отображается его уровень сигнала, MAC адрес и то, что этот адрес является случайным (random). Забегая вперед, хочется заметить, что здесь кроется один из подводных камней для разработчиков. Некоторые телефоны (LG G3S, Samsung S6) работают только с устройствами, MAC адреса которых зарегистрированы (public).
У сниффера есть два режима работы. Если мы нажмем кнопку «w» на клавиатуре, то запустится программа «Wireshark». Сниффер будет сканировать три рекламных канала и выдавать информацию обо всех устройствах объявления. Если мы сначала нажмем цифру на клавиатуре, такую же, как напротив интересующего нас устройства, то включится другой режим работы. В нем сниффер будет отслеживать трафик только одного выбранного устройства, причем как на каналах объявления, так и на рабочих каналах
Используя «Wireshark», легко получить всю информацию о посылке. Программа состоит из трех окон. Сверху отображаются все принятые посылки, во втором окне – детальная информация о выбранном пакете, а в третьем окне отображается сам фрейм. В свою очередь, во втором окне имеется три блока информации. В самом верхнем – временные значения выбранного фрейма, во втором (Nordic BLE sniffer meta) – общая информация о фрейме, такие как уровень сигнала, частотный канал и некоторые другие. Самым интересным для нас является третий блок информации (Bluetooth Low Energy Link Layer). В нем можно посмотреть разбор самого фрейма. В дальнейшем мы будем говорить именно об этом блоке информации. Сначала мы разберем формирование рекламных пакетов.
Advertising
Посмотрим на рисунок ниже. На нем показаны распределения каналов по частотам для BLE. Рекламные каналы — это 37 (2402Мгц), 38 (2426Мгц) и 39 (2480Мгц) каналы. Такое распределение рекламных каналов выбрано не случайно. Во-первых, рекламные каналы попадают между каналами Wi-Fi (1, 6, 11 каналы), что позволяет даже при малом уровне мощности, быть услышанными другими устройствами. Во-вторых, когда мы разносим рекламные каналы далеко друг от друга, мы получаем гарантированную доставку сообщения. Это связано с интерференцией сигнала в помещениях. Известно, что в результате отражения радиосигналов от стен, может получиться ситуация, когда приемник и передатчик не слышат друг друга. Однако в нашем случае, когда передача рекламных пакетов идет последовательно на трех разных каналах, максимально удаленных друг от друга по частоте, этот эффект отсутствует.
Рассмотрим теперь формат самого пакета advertising. В спецификации длина данных измеряется в октетах. Для нас это байты. Самым первым байтом идет преамбула. Она состоит из чередующихся нулей и единиц. Это нужно для синхронизации передатчика и приемника. Следом за преамбулой передаются четыре байта адреса доступа(Access Address). После него идет пакет данных (PDU). В спецификции 4.0 максимальная длина PDU составляет 39 байт, а в версии 5.0 длина пакета данных увеличена до 257 байт. В конце каждого рекламного пакета идут три байта контрольной суммы (CRC).
Здесь надо заметить, что Access Address служит для того, что бы устройства понимали, для кого предназначен BLE пакет. Это своеобразный код доступа. Если этот код доступа не знаком устройству, то пакет игнорируется. На всех рекламных каналах, в отличии от рабочих, он одинаков (0x8E89BED6), поэтому все устройства на каналах объявления видят друг друга.
Рассмотрим теперь формат блока данных PDU. В самом начале пакета PDU идет заголовок длинной 16 бит. В нем содержится тип пакета, флаги TxAdd, RxAdd, а так же длина всего поля PDU в байтах. RFU – это зарезервированные поля. Для спецификации 4.0 это выглядит так:
Для спецификации 5.0 увеличена длина поля Payload до 255 байт, а так же добавлены новые поля в заголовок:
Поле TxAdd как раз и отвечает за то, как будет видеться MAC адрес устройства. Если это поле равно единице, то МАС устройства будет виден как random. Рассмотрим теперь какие бывают типы advertising пакетов. На рисунке приведен их список для спецификации 4.0. В формате 5.0 их число увеличено, но мы будем рассматривать то, что есть в обоих форматах.
ADV_IND – это ненаправленные пакеты, которые рассылают устройства, готовые к присоединению. Большинство гаджетов при рассылке рекламных пакетов используют именно их.
ADV_DIRECT_IND — направленные рекламные пакеты присоединяемых устройств. Присоединять и обмениваться данными с ними может только конкретное устройство с заранее известным МАС адресом.
ADV_NONCONN_IND – рекламные пакеты, которые рассылают не присоединяемые устройства. Это маяки (beacon). Обычно они служат для получения какой-либо справочной информации. Например, при входе в магазин могут информировать об акциях. Кроме того, измеряя уровень сигналов от маяков и зная карту их расположения, можно осуществить автоматическое позиционирование внутри помещений. Это актуально для автоматизированных складов.
SCAN_REQ, SCAN_RSP, CONNECT_REQ – пакеты, которыми обмениваются присоединяемое устройство и телефон в процессе установления синхронного соединения. Эти пакеты и сам процесс присоединения мы рассмотрим во второй части статьи.
ADV_SCAN_IND – эти пакеты рассылает не присоединяемое устройство, которое может предоставить дополнительную информацию в ответ на запрос при сканировании.
Во второй части статьи мы рассмотрим различные режимы работы BLE устройств, а так же механизм «присоединения» устройства к телефону и переход на рабочие частоты.
Bluetooth Low Energy: подробный гайд для начинающих. Часть 2
Это вторая часть перевода книги Мохаммада Афане “Intro to Bluetooth Low Energy”. В представленных главах мы поговорим о типах устройств и об адвертайзинге, методе, с помощью которого периферийные устройства сообщают о своем присутствии. Первая часть – здесь.
Хочу сразу отметить, что адвертайзинг может использоваться не только для обнаружения устройств, но и для отправки кастомных данных. Например, в портативном мониторе качества воздуха Atmotube, пакеты адвертайзинга и ответа на сканирование используются для передачи сведений о текущих показаниях сенсоров. Это удобно для контроля показаний сенсоров на этапе производства и при сборе данных несколькими устройствами.
2. Периферийные и центральные устройства BLE
Существуют несколько важных определений, с которыми вы будете постоянно сталкиваться при изучении BLE. Два наиболее важных касаются ролей устройства: BLE central и BLE peripheral.
Рассмотрим их более детально.
2.1 Периферийные устройства
Периферийное устройство – устройство, которое объявляет о своем присутствии путем адвертайзинга, т.е. рассылки широковещательных пакетов, и принимает запросы на соединение от центральных устройств.
Другой связанный термин – BLE-передатчик, устройство, которое также рассылает широковещательные пакеты, но имеет одно отличие от периферийного устройства: оно не разрешает другим устройствам устанавливать с ним соединение. С другой стороны, устройство-наблюдатель только обнаруживает устройства, производящие процедуру адвертайзинга, но не имеет возможности инициировать соединение с ними.
Типичный пример устройства, реализующего роль передатчика – маячок (beacon). Маячки – это устройства, которые передают информацию без возможности установить с ними соединение. Они очень популярны в двух сферах: розничная торговля и определение местоположения внутри помещений.
Например, некоторая сеть магазинов использует мобильное приложение, которое может обнаруживать маячки на территории магазина. Если покупатель, имеющий на своем смартфоне это же приложение, приблизится к маячку, то в приложении отобразится специальная скидка на группу товаров, связанную с маячком.
Отличить маячок от периферийного устройства можно по типу широковещательных пакетов, которые он передает. Существуют различные типы пакетов: некоторые указывают на возможность установить соединение, а другие просто указывают на наличие маячка в этом месте. Когда центральное BLE-устройство обнаруживает широковещательные пакеты другого устройства с BLE (будь оно маячком или периферийным), оно знает, может ли оно начинать процедуру установки соединения или нет в зависимости от типа принятых широковещательных пакетов.
Как только периферийное устройство подключается к центральному, оно принимает на себя роль ведомого. Центральное устройство в таком случае называется ведущим. Это роли, определенные на канальном уровне, тогда как роли периферийного и центрального устройства определены на уровне GAP.
2.2 Центральные устройства
Центральное устройство – устройство, которое обнаруживает периферийные устройства и считывает передаваемую ими информацию. Оно также может устанавливать соединение с одним или несколькими устройствами одновременно.
Наблюдатель – устройство, схожее по функционалу с центральным, но не имеющее возможности устанавливать соединение с другим устройством.
2.3 Сравнение типов устройств
Рассмотрим возможности и ограничения четырех типов устройств: передатчик, наблюдатель, периферийное и центральное устройство.
Передатчик
Периферийное устройство
Наблюдатель
Центральное устройство
Не требует наличия приемника
Требует наличия как приемника, так и передатчика
Не требует наличия передатчика
Требует наличия как приемника, так и передатчика
Не поддерживает двунаправленный обмен данными
Поддерживает двунаправленный обмен данными
Не поддерживает двунаправленный обмен данными
Поддерживает двунаправленный обмен данными
Упрощенная схема, уменьшенный размер программного стека BLE
Требует полного программного стека BLE
Упрощенная схема, уменьшенный размер программного стека BLE
Требует полного программного стека BLE
Табл. 1: Сравнение типов устройств
2.4 Энергопотребление и требования к вычислительной мощности
Протокол BLE асимметричен. Большая часть тяжелой работы, связанной с управлением соединениями, управлением временем и обработкой информации, лежит на центральном устройстве. Это помогает снизить энергопотребление и требования к вычислительной мощности периферийного устройства, что позволяет интегрировать BLE в компактные устройства с ограниченными ресурсами, например, устройства с батарейным или аккумуляторным питанием.
Центральное устройство BLE также может иметь батарейное питание, но обычно имеет перезаряжаемый аккумулятор большой емкости. Как правило, роль центрального устройства на себя берет смартфон, компьютер или планшет.
Центральное устройство может быть подключено к нескольким периферийным одновременно. Характерный пример – смартфон, подключенный к умным часам, термостату умного дома и фитнес-трекеру одновременно.
2.5 Многоролевые устройства BLE
В некоторых случаях поддержка BLE-устройством центральной и периферийной роли одновременно приносит заметную пользу. Например, устройство может контролировать несколько датчиков (периферийных устройств) и в то же время иметь возможность передавать данные с этих датчиков на смартфон, обеспечивая доступ к ним из интерфейса мобильного приложения.
Рис. 1: Смартфон в качестве многоролевого устройства
2.6 Роль смартфонов в BLE
Одним из наиболее значимых преимуществ BLE перед другими похожими малопотребляющими технологиями, такими как ZigBee, Z-Wave, Thread и др.,) является его наличие в большинстве смартфонов, представленных на рынке. Практически все смартфоны уже имели на борту Bluetooth Classic с самых ранних дней, и большинство производителей чипсетов Bluetooth теперь внедряют в свои чипы поддержку и BLE, и Bluetooth Classic. В результате в настоящее время подавляющее большинство смартфонов поддерживает BLE.
Для смартфона возможность взаимодействовать с устройствами BLE дает пару существенных преимуществ:
Смартфоны предоставляют пользователям привычный интерфейс. Использование мобильного приложения для взаимодействия с BLE-устройством зачастую оказывается удобнее непосредственного взаимодействия с этим устройством.
Смартфоны, как правило, постоянно подключены к Интернету. Это означает, что данные, полученные с BLE-устройства, могут быть переданы в облако и сохранены для последующего анализа и обработки.
Сложности, связанные с BLE на смартфонах
В настоящий момент существуют две основные мобильные операционные системы: Android и iOS. Android представил встроенную поддержку BLE API в версии Android 4.3 (выпущена в июле 2012 года), в то время как iOS сделал то же самое немного раньше – в октябре 2011 года.
Важно отметить, что многое зависит от возможностей аппаратного обеспечения операционной системы. В случае с iOS, поддержку BLE имеют все устройства, начиная с iPhone 4s. Ситуация с Android гораздо сложнее. Эта операционная система работает на устройствах разных производителей с разной аппаратной конфигурацией, поэтому нет простого способа определить, какие устройства первыми начали поддерживать BLE. Эта проблема фрагментации Android представляет большую проблему при разработке приложений, использующих BLE, которые должны работать одинаково на всех существующих Android-устройствах.
3. Рассылка и сканирование пакетов адвертайзинга
3.1 Общий профиль доступа (GAP)
Общий профиль доступа предоставляет фреймворк, который определяет способы взаимодействия BLE-устройств друг с другом. Он включает в себя следующие аспекты:
Режимы и роли устройств;
Обнаружение устройств: рассылка пакетов адвертайзинга, сканирование, параметры рассылки и сканирования, содержимое пакетов;
Установка соединения: инициация, подтверждение, параметры соединения;
Реализация этого фреймворка является обязательной согласно официальной спецификации, и это то, что позволяет устройствам BLE обмениваться данными и взаимодействовать друг с другом.
Мы кратко осветили состояния сканирования и рассылки пакетов адвертайзинга BLE-устройств и упомянули, что периферийное устройство всегда запускается в состоянии рассылки пакетов адвертайзинга, даже если оно предназначено для работы в подключенном состоянии большую часть времени. Чтобы два устройства могли обнаружить друг друга, одно из них должно рассылать пакеты адвертайзинга, а другое – сканировать первичные широковещательные каналы (радиоканалы 37, 38, 39) в поисках пакетов адвертайзинга, отправленных периферийным устройством.
Если периферийное устройство поддерживает возможность подключения и центральное устройство обнаружило его, они могут установить соединение. В этой главе мы сфокусируемся на начальных состояниях периферийного и центрального устройства: адвертайзинг и сканирование.
3.2 Рассылка пакетов адвертайзинга
В состоянии адвертайзинга устройство рассылает пакеты, содержащие полезную информацию для других устройств, чтобы они приняли и обработали её. Пакеты посылаются через определенные интервалы времени, которые называются интервалы адвертайзинга.
В BLE существуют 40 радиоканалов, разнесенных на 2 МГц (от центра до центра), как показано на рисунке ниже. Три канала называются каналами первичного адвертайзинга, в то время как оставшиеся 37 каналов используются для вторичного адвертайзинга, а также для передачи пакетов данных во время соединения.
Рис. 8: Радиоканалы в BLE
Замечание: Так как устройство посылает пакеты адвертайзинга на одном из этих каналов и, как правило, постоянно переключается между ними, они (каналы) разнесены далеко по спектру друг от друга для того, чтобы избежать перекрестных помех между устройствами, вещающими на разных каналах. Также, расположение этих каналов на спектре выбрано таким, чтобы избежать помех от наиболее часто используемых Wi-Fi каналов.
Процесс адвертайзинга всегда начинается с посылки широковещательного пакета по трем первичным каналам адвертайзинга или части из них. Это позволяет центральным устройствам найти периферийные и прочитать и пакеты адвертайзинга. Затем центральное устройство может запустить процесс подключения, если периферийное устройство поддерживает такую возможность.
Также центральное устройство может послать запрос на сканирование и, если периферийное поддерживает такую возможность, оно пошлет пакет, содержащий ответ на сканирование. Запросы на сканирование и ответы позволяют периферийному устройству отправить дополнительные данные, которые не поместились в основной пакет адвертайзинга без установки соединения.
Примечание: длина первичного пакета адвертайзинга ограничена 31 байтами. Длина вторичного пакета адвертайзинга может составлять до 254 байт.
Как мы упоминали ранее, некоторые устройства (маячки) всегда остаются в состоянии адвертайзинга и не принимают запросы на подключение, в то время как другие (периферийные устройства) позволяют переход в подключенное состояние, если центральное устройство инициирует соединение.
Главное преимущество нахождения в состоянии адвертайзинга состоит в том, что множество центральных устройств могут получать данные с одного периферийного без необходимости в подключении. В то же время есть существенные недостатки, такие как отсутствие защиты данных и невозможность для периферийного устройства получать данные от центрального устройства (передача данных является однонаправленной).
Рис. 9: Устройства, имеющие и не имеющие возможность подключения
3.3 Состояние сканирования
Центральные устройства, находясь в поиске пакетов адвертайзинга от периферийных устройств, перестраиваются между тремя первичными каналами адвертайзинга, прослушивая каждый из них в определенный момент времени. Для того, чтобы центральное устройство обнаружило периферийное, оно должно быть настроено на тот же канал, на котором в данный момент вещает периферийное. Для того, чтобы увеличить вероятность этого события и ускорить его наступление, можно изменять некоторые параметры адвертайзинга и сканирования.
Устройство, которое прослушивает каналы адвертайзинга в поисках пакетов адвертайзинга а затем посылает запросы сканирования, находится в режиме активного сканирования, а устройство, которое только принимает пакеты адвертайзинга, и не посылает запросов на сканирование, соответственно находится в режиме пассивного сканирования.
Рис. 10: Пассивное и активное сканирование
3.4 События адвертайзинга
Событие адвертайзинга состоит из нескольких пакетов, отправленных по всем или нескольким из трех каналов первичного адвертайзинга (37, 38 и 39). Существует семь типов событий адвертайзинга (их можно рассматривать как различные типы пакетов):
Подключаемое и сканируемое ненаправленное событие.
Этот тип позволяет другим устройствам принимать пакеты, посылать запросы сканирования отправителю и устанавливать с ним соединение.
Подключаемое ненаправленное событие.
Позволяет другим устройствам принимать пакеты и устанавливать соединение с их отправителем.
Подключаемое направленное событие.
Позволяет определенному устройству принимать пакеты и устанавливать соединение с отправителем
Неподключаемое и несканируемое ненаправленное событие.
Позволяет всем устройствам принимать пакеты. В то же время отклоняет все запросы сканирования и попытки установить соединение.
Неподключаемое и несканируемое направленное событие.
Позволяет определенному устройству принимать пакеты без возможности установить соединение или послать запрос сканирования.
Сканируемое ненаправленное событие.
Дает возможность другим устройствам посылать запросы сканирования отправителю для получения дополнительного пакета данных.
Сканируемое направленное событие.
Позволяет определенному устройству посылать запросы сканирования отправителю пакета адвертайзинга для получения дополнительного пакета данных.
3.5 Параметры адвертайзинга
Под параметрами адвертайзинга понимают:
Интервал адвертайзинга.
Наиболее важный параметр из относящихся к адвертайзингу – это интервал адвертайзинга. Значение этого параметра может дискретно изменяться в пределах от 20 миллисекунд до 10.24 секунд, с шагом в 625 микросекунд. Интервал адвертайзинга оказывает большое влияние на продолжительность работы от батареи, поэтому выбору его значения следует уделить самое пристальное внимание. Рекомендуется выбирать наибольший интервал адвертайзинга, позволяющий соблюсти баланс между скоростью обнаружения и энергопотреблением.
Данные адвертайзинга и ответа на сканирование.
Давайте посмотрим на формат пакета адвертайзинга и составляющие его поля. Стоит отметить, что пакет ответа на сканирование использует такой же формат.
Рис. 11: Формат пакета адвертайзинга (из спецификации стандарта Bluetooth 5)
Данные адвертайзинга используют формат, аналогичный формату TLV (Type-Length-Value, Тип-Длина-Значение), используемому для передачи данных. Отличие состоит в том, что в пакетах адвертайзинга длина данных следует перед их типом. Данные адвертайзинга входят в состав протокольных данных (PDU, Protocol Data Unit) BLE-пакета и включает в себя:
Длину: длину данных, которые следуют за самим значением длины, включая тип данных и непосредственно данные.
Тип данных адвертайзинга: тип данных адвертайзинга, содержащихся в этой структуре TLV.
Данные адвертайзинга: непосредственно данные.
Типы данных адвертайзинга определены в дополнении спецификации Bluetooth (не в основном документе).
Ниже приведены одни из наиболее часто встречающихся типов данных:
Local Name: имя устройства, считываемое при его обнаружении другими устройствами, производящими процедуру сканирования.
Tx Power Level: Мощность передачи, измеряемая в дБм.
Flags: множество однобитных логических флагов (переменные, которые могут принимать одно из двух значений, истина [1] или ложь [0], включающее в себя:
Limited Discoverable Mode (ограниченный режим обнаружения);
General Discoverable Mode (общий режим обнаружения);
BR/EDR Not Supported (возможность поддержки классического протокола Bluetooth);
Возможность одновременной поддержки классического и Low Energy Bluetooth на одном устройстве со стороны контроллера;
Возможность одновременной поддержки классического и Low Energy Bluetooth на одном устройстве со стороны хоста.
Примечание: понятия BR (Basic Rate, базовая пропускная способность) и EDR (Enhanced Data Rate, расширенная пропускная способность) относятся к Bluetooth Classic.
Service Solicitation: список из одного или нескольких UUID, показывающий, какие сервисы поддерживаются и представлены GATT-сервером устройства. Это помогает центральному устройству узнать о поддерживаемых периферийным устройством сервисах до установления соединения.
Appearance: вид, определяет тип устройства в соответствии со спецификацией стандарта. Включает в себя такие виды как телефон, измеритель сердечного ритма, брелок для ключей и множество других.
Если вы не можете найти вид, к которому можно было бы отнести ваше устройство, вы всегда можете оставить ему значение по умолчанию – Неопределенный.
3.6. Параметры сканирования
Существует три основных параметра сканирования:
Scan Type (тип сканирования): пассивное или активное.
Scan Window (окно сканирования): определяет, длительность сканирования.
Scan Interval (интервал сканирования): определяет частоту повторения сканирования.
Центральное устройство прослушивает один из первичных каналов адвертайзинга в течении всего окна сканирования с периодом, равным интервалу сканирования, причем каждое последующее сканирование проходит на новом канале.
Рис. 12: Параметры сканирования
__________________________________
А что дальше?
В следующей статье мы рассмотрим вопросы, связанные с соединениями, а также разберемся с сервисами, характеристиками и способами работы с ними.