BLE під мікроскопом 2

image

BLE під мікроскопом. Частина 2
У першій частини ми проаналізували для чого був придуманий стандарт Bluetooth LE, а так само розглянули формат пакетів оголошення «advertising». У цій частині ми продовжимо вивчати особливості формату і розглянемо механізм приєднання пристрою BLE до смартфону.

Режими роботи BLE
Спочатку ми поговоримо про різних режимах роботи пристроїв BLE. Почнемо з самого простого. Для односпрямованої передачі даних, наприклад з вуличного термометра на телефон, існує формат маяка. Пристрій передає статичні або повільно змінюються динамічні дані в ефір. Тут користувачів застерігає підводний камінь. Якщо просканувати ефір, використовуючи пункт меню андроїда (Налаштування=>BlueTooth), ми не побачимо маяків. Вся справа тип сканування. Існує активне і пасивне сканування. Пасивне сканування просто слухає ефір, а при активному скануванні робиться додатковий запит на пристрій BLE. Тут є принципова відмінність у режимі роботи объявителей.

Маяки мають заголовок ADV_NONCONN_IND. Це означає, що вони не приєднуються і не несуть додаткової інформації, крім тієї, що вже міститься в пакеті. За рахунок того, що у них немає додаткових функцій і режиму прийому, вся енергія йде тільки на передачу рекламних пакетів. Це найбільш економічний тип роботи пристроїв BLE. Однак, для того щоб їх побачити, необхідно використовувати на смартфоні спеціальну програму з пасивним режимом сканування. В принципі, інформація в пакеті маяка може змінюватися. Наприклад, потрібно передати більше інформації, ніж вміщує один пакет. Тоді можлива циклічна зміна інформації, яку передає маяк.

Особливості пасивного сканування в тому, що всі дані, які андроїд отримує посилки з маяка, він негайно передає в користувальницьке додаток. При активному ж скануванні, додаток не побачить пристрою BLE до тих пір, поки гаджет не відповість на запит сканування з боку смартфона. Це найбільш поширений режим роботи пристроїв. Розглянемо його особливості. При скануванні, коли смартфон отримує на одному з каналів оголошення посилку від пристрою (типу ADV_IND або ADV_SCAN_IND), він посилає запит на цьому ж каналі. Це порожня команда SCAN_REQ.

image

Вона повинна бути передана не пізніше, ніж за час T_IFS(Time Inter Space Frame), яка становить 150 мкс. Для того, що б пристрій оголошення почуло цей запит, після кожної рекламної посилки воно затримується на каналі час T_IFS. При цьому, природно, споживається додаткова енергія. Якщо запит отриманий, пристрій відповідає відповідної посилкою SCAN_RSP. На малюнку видно, що максимальний час затримки на відповідь так само становить T_IFS.

І тут користувачів підстерігає ще один підводний камінь. Справа в тому, що операційна система смартфона, після того як отримала відповідну команду SCAN_RSP, запам'ятовує параметри пристрою. Вона продовжує час від часу повторювати свої запити SCAN_REQ на гаджет, однак вони не регулярні. А на запит користувача програми, система буде видавати останні отримані дані, незалежно від потреб програми. Тому, що б оновити дані, наприклад, з датчика положення, необхідно буде запустити процес сканування на телефоні. Тому пристрої з заголовком ADV_IND і ADV_SCAN_IND погано підходять для передачі швидко мінливих даних в режимі маяка. Краще пройти процедуру приєднання і переходити на робочі канали. Це ми розглянемо нижче, але відразу зазначимо, що це вміють робити тільки пристрої ADV_IND.

В кінці глави хочу розібрати цікаву особливість команд SCAN_REQ і SCAN_RSP. Справа в тому, що відповідна команда SCAN_RSP може бути як порожня, так і містити будь-яку корисну інформацію. Цим користуються в двох випадках. По-перше, коли вся необхідна інформація не влазить в одну посилку. По-друге, коли хочуть зберегти енергію батареї. Це робиться так. Сама рекламна посилка максимально коротким. В неї входить тільки заголовок, прапори та МАС-адресу пристрою. А при запиті SCAN_REQ пристрій передає всю додаткову інформацію про себе (ім'я, рівень батареї і т. д.) вже у фреймі SCAN_RSP. Операційна система на телефоні зшиває всю інформацію в один блок.

Робота в режимі приєднання
Для повноцінного використання всіх ресурсів протоколу BLE необхідно працювати на робочих частотах. Це синхронний режим роботи. Розглянемо, як його створити. Після того як смартфон, у відповідь на запит при активному скануванні, отримає кадр SCAN_RSP, з'являється можливість приєднання гаджета до телефону. Процес приєднання зазвичай запускається користувачем, але може бути запущений і додатком, у разі розриву з'єднання. Саме заради синхронного режиму і створювався BLE. Після приєднання гаджет і телефон переходить в економічний режим роботи. Пристрої перестають передавати на рекламних частотах, і починають роботу на інших 37 каналах. Розглянемо, як це відбувається. Поглянемо на малюнок.

image

У відповідь на вимогу користувача приєднати гаджет, андроїд посилає пакет CONNECT_REQ. Він повинен бути надіслано не пізніше часу очікування T_IFS. У цьому пакеті міститься повна інформація про те, на яких частотах, з яким інтервалом і з яким Access Address-му смартфон пропонує обмінюватися даними. Ось формат даних цього пакета.

image

Як він виглядає в «Wireshark» ми бачимо на рисунку. У розділі Data Link Layer ми бачимо, що новий Access Address дорівнює 0x21431df6. Далі йдуть три байт контрольної суми 0x277d0f. Щоб отримати чотири наступні часові параметри, їх треба помножити на відповідний коефіцієнт.

transmitWindowSize = Win-Size * 1.25 ms
transmitWindowOffset =WinOffset * 1.25 ms
connInterval = Interval * 1.25 ms
connSupervisionTimeout = Timeout * 10 ms
У частині ChM описуються ті робочі канали, на яких передбачається подальша робота. А в частині Hop – з яким інтервалом будуть перебиратися дозволені канали. По специфікації, Hop знаходиться в інтервалі від 5 до 16.

image

На наступному малюнку схематично показано механізм переходу на робочі частоти.

image

Далі смартфон і пристрій починають працювати в синхронному режимі на робочих частотах. Однак смартфон (Master) може змінити параметри роботи гаждета (Slave) на робочих частотах. Найчастіше це відбувається тоді, коли до телефону приєднується ще один пристрій. Для економії енергії, смартфону простіше так вибудувати роботу з приєднаними пристроями, щоб обслуговувати їх послідовно за один сеанс прокидання. У цьому випадку, використовується процедура Feature Exchange Procedure. Вона багато в чому схожа на процедуру приєднання і відбувається в автоматичному режимі, тому ми не будемо її розглядати.

У висновку глави, трохи торкнемося тему профілів. Для того, що б систематизувати передачу і прийом даних, формат BLE були введені сервіси. Це різні завдання, які може виконувати пристрій. Сервісом, наприклад, є можливість повідомляти рівень напруги батареї, або перепрограмувати пристрій з ефіру. Профіль, як правило, об'єднує кілька сервісів. Повний список профілів пристроїв BLE можна подивитися тут.

Для розробки власних пристроїв, найпростіше користуватися профілем NUS (Nordic UART Service). Для роботи з ним, у nordic-a є два додатки. Одне — nRF UART 2.0. Інше, і на мій погляд більш зручний, входить до складу nRF Toolbox.

image

У цьому додатку є поле з 9 клітин, кожній з яких можна призначити будь-яку команду, а на саму клітку повісити значок. Таким чином можна отримати готовий пульт для управління BLE пристроями. Наприклад для управління електронними іграшками.

Робота з nRFgoStudio
У фірми Nordic є універсальний засіб для роботи з різними китами — це програма nRFgoStudio. Її, як і інші, можна завантажити на сайті виробника тут. Приєднайте свій пристрій або кіт за допомогою програматора до комп'ютера. Відкрийте nRFgoStudio і натисніть на рядок nRF5x Programming. Якщо програматор побачить процесор, то відкриється вікно як на малюнку.

image

З правого боку ми бачимо вікно з трьома вкладками: Program SoftDevise, Program Application Program Bootloader. Перше вікно (Program SoftDevise) дозволяє завантажувати процесор стек від Nordic-a, друге — клієнтська програма, а третє — завантажувач з ефіру (DFU). На сайті є стаття, де це вже було побіжно висвітлено.

Висновок
Хотілося б відзначити, що ми докладно не розбирали саму рекламну посилку advertising і спосіб її формування. Тим, хто зацікавиться як це зробити ручками, я відсилаю до статті. Там зазначено як можна спробувати працювати на більш простий мікросхемі Nordic-а nRF24L01, не використовуючи стек. Це дозволить більш глибоко зрозуміти структуру посилки.

Крім того, можна навчитися формувати ці ж посилки, минаючи стек, і на мікросхемах nRF51822 b nRF52832. Це набагато простіше, ніж робота зі стеком. Однак без стека ми не зможемо працювати на робочих каналах. Самостійно реалізувати синхронний режим буде дуже складно. Тема BLE дуже обширна і постійно розвивається. Тому ми звичайно ж не змогли описати всі особливості цього протоколу. Але для початкового старту цієї інформації більш ніж достатньо. Додаткову інформацію можна почерпнути тут, тут і тут.

Печерських Володимир
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.