Автор: 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 gateway протокола, преди да разработите персонализирана хост програма. Както за UART базиран NCP, така и за SPI базиран NCP, хостът използва EZSP протокола за комуникация с NCP.EZSPе съкращение отEmberZnet сериен протокол, и е дефиниран вUG100. За базиран на UART NCP е внедрен протокол от по-нисък слой за надеждно пренасяне на EZSP данни през UART, това еПЕПЕЛпротокол, съкращение отАсинхронен сериен хост. За повече подробности относно ASH, моля, вижтеUG101иUG115.
Връзката между EZSP и ASH може да се илюстрира със следната диаграма:
Форматът на данните на EZSP и протокола ASH може да бъде илюстриран със следната диаграма:
На тази страница ще представим процеса на рамкиране на 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 трябва да бъде командата за версия. С други думи, хостът трябва да извлече 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. Най-значимият байт предхожда най-малко значимия байт (big-endian режим).
2.5. Байтово пълнене
Както е описано в раздел 4.2 от UG101, има някои резервирани стойности на байтове, използвани за специални цели. Тези стойности могат да бъдат намерени в следната таблица:
Когато тези стойности се появят в рамката, ще бъде направена специална обработка на данните. – Вмъкнете байта за изход 0x7D пред запазения байт – Обърнете бит 5 на този запазен байт
По-долу са някои примери за този алгоритъм:
2.6. Добавете крайния флаг
Последната стъпка е да добавите крайния флаг 0x7E към края на рамката. След това данните могат да бъдат изпратени до UART порта.
3. Процес на премахване на рамката
Когато се получат данни от UART, ние просто трябва да направим обратните стъпки, за да ги декодираме.
4. Препратки
Време на публикуване: 8 февруари 2022 г