Автор : Torchiotbootcamp
Ссылка : https: //zhuanlan.zhihu.com/p/339700391
От QUORA
1. Введение
Silicon Labs предложил хост+NCP решение для дизайна Zigbee Gateway. В этой архитектуре хост может общаться с NCP через интерфейс UART или SPI. Чаще всего UART используется, поскольку он намного проще, чем SPI.
Silicon Labs также предоставил образец проекта для хост -программы, которая является образцомZ3gatewayhost
Полем Образец работает на Unix-подобной системе. Некоторые клиенты могут понадобиться образец хоста, который может работать на RTO, но, к сожалению, в настоящее время нет образец хоста на основе RTOS. Пользователи должны разработать свою собственную хост -программу на основе RTOS.
Важно понять протокол Gateway UART перед разработкой индивидуальной хост -программы. Как для NCP на основе UART, так и для NCP на основе SPI, хост использует протокол EZSP для связи с NCP.Ezspкороткий дляСерийный протокол Emberznet, и это определено вUG100Полем Для NCP на основе UART реализуется протокол нижнего уровня для надежного переноса данных EZSP через UART, этоПЕПЕЛПротокол, короткий дляАсинхронный серийный хозяинПолем Для получения более подробной информации о Эш, пожалуйста, обратитесь кUG101иUG115.
Связь между EZSP и ASH может быть проиллюстрирована следующей диаграммой:
Формат данных EZSP и протокола пепла можно проиллюстрировать по следующей диаграмме:
На этой странице мы представим процесс создания данных UART и некоторые ключевые кадры, которые часто используются в Zigbee Gateway.
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 должна быть команда версий. Другими словами, хост должен отступить версию NCP EZSP перед каким -либо другим сообщением. Если версия 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, включая данные, ACK и NAK. Последние три используются без общих данных EZSP, включая RST, RSTACK и ошибку.
Формат RST, RSTACK и ошибки описаны в разделе 3.1-3,3.
2.4. Рассчитайте CRC
16-битный CRC рассчитывается на байтах из контрольного байта до конца данных. Стандартный CRCCCITT (g (x) = x16 + x12 + x5 + 1) инициализируется до 0xffff. Наиболее значимый байт предшествует наименее значимому байту (режим Большой Эндиан).
2.5. Байтовая начинка
Как описано в разделе 4.2 UG101, есть некоторые зарезервированные значения байтов, используемые для специальных целей. Эти значения можно найти в следующей таблице:
Когда эти значения появляются в кадре, для данных будет сделана специальная обработка. - Вставьте байт Escape 0x7d перед зарезервированным байтом - Обратите изменение Bit5 этого зарезервированного байта
Ниже приведены некоторые примеры этого алгоритма:
2.6 Добавить конечный флаг
Последний шаг - добавить конечный флаг 0x7e к концу кадра. После этого данные могут быть отправлены в порт UART.
3
Когда данные получены от UART, нам просто нужно сделать обратные шаги, чтобы расшифровать его.
4. Ссылки
Время публикации: февраль-08-2022