Автор: TorchIoTBootCamp
Ссылка: https://zhuanlan.zhihu.com/p/339700391
Источник: Quora
1. Введение
Компания Silicon Labs предложила решение «хост+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 и псевдослучайной последовательностью.
Ниже приведён алгоритм генерации псевдослучайной последовательности.
- 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 вычисляется для байтов, начиная с управляющего байта и до конца данных. Стандартная CRCCCITT (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 г.








