Автор:TorchIoTBootCamp
Посилання: https://zhuanlan.zhihu.com/p/339700391
Від: Quora
1. Вступ
Silicon Labs запропонувала рішення host+NCP для проектування шлюзу Zigbee. У цій архітектурі хост може зв'язуватися з NCP через інтерфейс UART або SPI. Найчастіше UART використовується, оскільки він набагато простіший за SPI.
Silicon Labs також надала зразок проекту для хост-програми, який є зразкомZ3GatewayHost
Зразок працює на Unix-подібній системі. Деяким клієнтам може знадобитися зразок хоста, який може працювати на RTOS, але, на жаль, наразі зразка хоста на базі RTOS немає. Користувачам потрібно розробити власну програму для хоста на базі RTOS.
Важливо розуміти протокол шлюзу UART перед розробкою налаштованої програми для хоста. Як для NCP на основі UART, так і для NCP на основі SPI, хост використовує протокол EZSP для зв'язку з NCP.ЕЗСПскорочено відПослідовний протокол EmberZnet, і це визначено вUG100Для NCP на базі UART реалізовано протокол нижчого рівня для надійної передачі даних EZSP через UART, тобтоЯСЕНЬпротокол, скорочення відАсинхронний послідовний хостДля отримання додаткової інформації про ASH, будь ласка, зверніться доUG101іUG115.
Зв'язок між EZSP та ASH можна проілюструвати наступною діаграмою:
Формат даних протоколів EZSP та ASH можна проілюструвати наступною діаграмою:
На цій сторінці ми представимо процес кадрування даних UART та деякі ключові кадри, які часто використовуються в шлюзі Zigbee.
2. Обрамлення
Загальний процес створення рамки можна проілюструвати наступною діаграмою:
На цій діаграмі дані означають кадр EZSP. Загалом, процеси кадрування такі: |Без|Крок|Посилання|
|:-|:-|:-|
|1|Заповніть рамку EZSP|UG100|
|2|Рандомізація даних|Розділ 4.3 UG101|
|3|Додати керуючий байт|Розділ2 та Розділ3 UG101|
|4|Обчисліть CRC|Розділ 2.3 UG101|
|5|Заповнення байтами|Розділ 4.2 UG101|
|6|Додати прапорець кінця|Розділ 2.4 UG101|
2.1. Заповніть рамку EZSP
Формат кадру EZSP проілюстровано в розділі 3 UG100.
Зверніть увагу, що цей формат може змінитися після оновлення SDK. Коли формат зміниться, ми надамо йому новий номер версії. На момент написання цієї статті останній номер версії EZSP – 8 (EmberZnet 6.8).
Оскільки формат кадру EZSP може відрізнятися для різних версій, існує обов'язкова вимога, щоб хост і NCPОБОВ'ЯЗКОВОпрацювати з тією ж версією EZSP. В іншому випадку вони не зможуть спілкуватися належним чином.
Для досягнення цього першою командою між хостом і NCP має бути команда версії. Іншими словами, хост повинен отримати версію EZSP NCP перед будь-яким іншим зв'язком. Якщо версія EZSP відрізняється від версії EZSP на стороні хоста, зв'язок має бути перерваний.
Неявною вимогою, що стоїть за цим, є те, що формат команди версії можеНІКОЛИ НЕ ЗМІНЮЙТЕСЯФормат команди версії EZSP наведено нижче:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。.
2.2. Рандомізація даних
Детальний процес рандомізації описано в розділі 4.3 UG101. Весь кадр EZSP буде рандомізовано. Рандомізація полягає в операції виключаюче АБО між кадром EZSP та псевдовипадковою послідовністю.
Нижче наведено алгоритм генерації псевдовипадкової послідовності.
- рандом0 = 0×42
- якщо біт 0 ранді дорівнює 0, ранді+1 = ранді >> 1
- якщо біт 0 ранді дорівнює 1, ранді+1 = (ранді >> 1) ^ 0xB8
2.3. Додати керуючий байт
Керуючий байт – це однобайтові дані, які слід додавати на початок кадру. Формат проілюстровано в таблиці нижче:
Загалом існує 6 видів контрольних байтів. Перші три використовуються для загальних кадрів з даними EZSP, включаючи DATA, ACK та NAK. Останні три використовуються без загальних даних EZSP, включаючи RST, RSTACK та ERROR.
Формат RST, RSTACK та ERROR описано в розділах 3.1–3.3.
2.4. Обчисліть CRC
16-бітний CRC обчислюється для байтів від контрольного байта до кінця даних. Стандартний CRCCCITT (g(x) = x16 + x12 + x5 + 1) ініціалізується значенням 0xFFFF. Старший байт передує молодшому байту (режим big-endian).
2.5. Заповнення байтами
Як описано в розділі 4.2 UG101, існують деякі зарезервовані значення байтів, що використовуються для спеціальних цілей. Ці значення можна знайти в наступній таблиці:
Коли ці значення з'являються у фреймі, до даних буде застосовано спеціальну обробку. – Вставити escape-байт 0x7D перед зарезервованим байтом – Змінити положення біта 5 цього зарезервованого байта на інвертований.
Нижче наведено кілька прикладів цього алгоритму:
2.6. Додати прапорець завершення
Останнім кроком є додавання прапорця кінця 0x7E до кінця кадру. Після цього дані можна надсилати на порт UART.
3. Процес дефреймінгу
Коли дані отримуються від UART, нам просто потрібно виконати зворотні кроки для їх декодування.
4. Список літератури
Час публікації: 08 лютого 2022 р.