Автор: 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. Користувачам необхідно розробити власну хост-програму на основі ОСРВ.
Важливо розуміти протокол шлюзу 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|Додайте контрольний байт|Chap2 і Chap3 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 і псевдовипадковій послідовності.
Нижче наведено алгоритм генерації псевдовипадкової послідовності.
- rand0 = 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. Старший байт передує молодшому байту (режим старшого порядку).
2.5. Байтова начинка
Як описано в розділі 4.2 UG101, існують деякі зарезервовані значення байтів, які використовуються для спеціальних цілей. Ці значення можна знайти в наступній таблиці:
Коли ці значення з’являться у кадрі, дані будуть оброблені спеціально. – Вставте керуючий байт 0x7D перед зарезервованим байтом – Інвертуйте біт 5 цього зарезервованого байта
Нижче наведено кілька прикладів цього алгоритму:
2.6. Додайте прапорець кінця
Останнім кроком є додавання позначки кінця 0x7E в кінець кадру. Після цього дані можуть бути відправлені на порт UART.
3. Процес дефреймінгу
Коли дані отримані від UART, нам просто потрібно виконати зворотні кроки, щоб їх декодувати.
4. Література
Час публікації: 08 лютого 2022 р