Автор: TorchIoTBootCamp
Ссылка: https://zhuanlan.zhihu.com/p/339700391
От: Quora
1. Введение
Компания Silicon Labs предложила решение «хост+NCP» для построения шлюза ZigBee. В этой архитектуре хост может взаимодействовать с NCP через интерфейс UART или SPI. Чаще всего используется UART, поскольку он гораздо проще SPI.
Silicon Labs также предоставила пример проекта для хост-программы, который является примеромZ3GatewayHostПример работает в Unix-подобной системе. Некоторым заказчикам может понадобиться пример хоста, работающий в ОСРВ, но, к сожалению, на данный момент нет примера хоста на базе ОСРВ. Пользователям необходимо разработать собственную программу хоста на основе ОСРВ.
Перед разработкой специализированной программы хоста важно понимать протокол шлюза UART. Как для NCP на базе UART, так и для NCP на базе SPI, хост использует протокол EZSP для взаимодействия с NCP.ЭЗСПэто сокращение отПоследовательный протокол EmberZnet, и это определено вУГ100Для NCP на базе UART реализован протокол нижнего уровня для надежной передачи данных EZSP через UART, то естьПЕПЕЛпротокол, сокращенноАсинхронный последовательный хост. Более подробную информацию об ASH можно найти здесь.УГ101иУГ115.
Связь между 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 должна быть команда «version». Другими словами, хост должен получить версию EZSP NCP перед любым другим обменом данными. Если версия EZSP отличается от версии EZSP хоста, обмен данными должен быть прерван.
Неявное требование, лежащее в основе этого, состоит в том, что формат команды версии можетНИКОГДА НЕ МЕНЯЙСЯФормат команды версии EZSP выглядит следующим образом:
链接: https://zhuanlan.zhihu.com/p/339700391
Источник: 知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2 Рандомизация данных
Подробный процесс рандомизации описан в разделе 4.3 документа UG101. Рандомизация будет выполнена для всего кадра EZSP. Рандомизация выполняется путём выполнения операции «исключающее ИЛИ» между кадром EZSP и псевдослучайной последовательностью.
Ниже представлен алгоритм генерации псевдослучайной последовательности.
- rand0 = 0×42
- если бит 0 randi равен 0, randi+1 = randi >> 1
- если бит 0 randi равен 1, randi+1 = (randi >> 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) вычисляется для байтов от контрольного до конца данных. Стандартный CRC (g(x) = x16 + x12 + x5 + 1) инициализируется значением 0xFFFF. Старший байт предшествует младшему (режим big-endian).
2.5. Заполнение байтами
Как описано в разделе 4.2 UG101, существуют некоторые зарезервированные значения байтов, используемые для специальных целей. Эти значения можно найти в следующей таблице:
При появлении этих значений в кадре к данным будет применена специальная обработка. – Вставьте управляющий байт 0x7D перед зарезервированным байтом. – Поменяйте местами бит 5 этого зарезервированного байта.
Ниже приведены некоторые примеры этого алгоритма:
2.6. Добавьте флаг конца
Последний шаг — добавление флага конца 0x7E в конец кадра. После этого данные можно отправлять в порт UART.
3. Процесс дефрейминга
Когда данные получены от UART, нам просто нужно выполнить обратные шаги для их декодирования.
4. Ссылки
Время публикации: 08 февраля 2022 г.








