О Zigbee EZSP UART

Автор: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, и это определено вУГ100Для NCP на базе UART реализован протокол нижнего уровня для надежной передачи данных EZSP через UART, этоПЕПЕЛпротокол, сокращенноАсинхронный последовательный хост. Более подробную информацию о ASH см. на сайтеУГ101иУГ115.

Связь между EZSP и ASH можно проиллюстрировать с помощью следующей диаграммы:

1

Формат данных протокола EZSP и ASH можно проиллюстрировать на следующей схеме:

2

На этой странице мы познакомим вас с процессом кадрирования данных UART и некоторыми ключевыми кадрами, которые часто используются в шлюзе ZigBee.

2. Обрамление

Общий процесс кадрирования можно проиллюстрировать с помощью следующей диаграммы:

3

В этой диаграмме данные означают фрейм EZSP. В общем, процессы фрейминга следующие: |No|Step|Reference|

|:-|:-|:-|

|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.

4

Обратите внимание, что этот формат может измениться при обновлении SDK. Когда формат изменится, мы дадим ему новый номер версии. Последний номер версии EZSP на момент написания этой статьи — 8 (EmberZnet 6.8).

Поскольку формат кадра EZSP может различаться в разных версиях, существует обязательное требование, чтобы хост и NCPДОЛЖЕНработают с той же версией EZSP. В противном случае они не смогут общаться так, как ожидалось.

Чтобы достичь этого, первой командой между хостом и NCP должна быть команда версии. Другими словами, хост должен получить версию EZSP NCP перед любой другой коммуникацией. Если версия EZSP отличается от версии EZSP хостовой стороны, коммуникация должна быть прервана.

Неявное требование, лежащее в основе этого, заключается в том, что формат команды версии можетНИКОГДА НЕ МЕНЯЙСЯФормат команды версии EZSP выглядит следующим образом:

5

Объяснения поля параметров и формата ответа версии можно найти в Главе 4 UG100. Поле параметров — это версия EZSP хост-программы. Когда эта статья была написана, это было 8.
7
Место проведения: TorchIoTBootCamp
链接: 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

Всего существует 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, есть некоторые зарезервированные значения байтов, используемые для специальных целей. Эти значения можно найти в следующей таблице:

7

Когда эти значения появляются в кадре, к данным будет применена специальная обработка. – Вставьте escape-байт 0x7D перед зарезервированным байтом – Поменяйте местами бит5 этого зарезервированного байта

Ниже приведены некоторые примеры этого алгоритма:

8

2.6. Добавьте флаг окончания

Последний шаг — добавить флаг конца 0x7E в конец кадра. После этого данные можно отправлять в порт UART.

3. Процесс дефрейминга

Когда данные получены от UART, нам просто нужно выполнить обратные шаги, чтобы декодировать их.

4. Ссылки


Время публикации: 08.02.2022
Онлайн-чат WhatsApp!