Автор: TorchiotBootCamp
Връзка: https: //zhuanlan.zhihu.com/p/339700391
От: Quora
1. Въведение
Silicon Labs предложи решение на Host+NCP за дизайн на Gateway Zigbee. В тази архитектура хостът може да комуникира с NCP чрез UART или SPI интерфейс. Най -често UART се използва, тъй като е много по -прост от SPI.
Silicon Labs също е предоставил примерен проект за хост програма, който е извадкатаZ3GatewayHost
. Пробата работи на система, подобна на Unix. Някои клиенти може да искат проба хост, която може да работи на RTOS, но за съжаление за момента няма RTOS базирана проба хост. Потребителите трябва да разработят своя собствена хост програма въз основа на RTOS.
Важно е да разберете протокола на UART Gateway, преди да разработите персонализирана програма на хоста. И за NCP, базиран на UART, и за SPI, хостът използва протокола EZSP за комуникация с NCP.EZSPе кратко заСериен протокол на Emberznetи се определя вUG100. За базиран на UART NCP се реализира протокол с по -нисък слой, който носи надеждно EZSP данни през UART, това еПепелпротокол, кратък заАсинхронен сериен гостоприемник. За повече подробности относно ASH, моля, вижтеUG101иUG115.
Връзката между EZSP и пепелта може да бъде илюстрирана със следната диаграма:
Форматът на данните на EZSP и протокола за пепел може да бъде илюстриран със следната диаграма:
На тази страница ще представим процеса на създаване на данните на UART и някои ключови кадри, които често се използват в Gateway 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 преди всяка друга комуникация. Ако версията на 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. Най-значимият байт предхожда най-малко значимия байт (режим Big-Endian).
2.5. Байтова пълнеж
Както е описано в раздел 4.2 от UG101, има някои запазени стойности на байтовете, използвани за специална цел. Тези стойности могат да бъдат намерени в следната таблица:
Когато тези стойности се появят в рамката, ще се извърши специално третиране на данните. - Поставете байта за бягство 0x7d пред запазения байт - обърнете BIT5 на този запазен байт
По -долу са някои примери за този алгоритъм:
2.6. Добавете крайния флаг
Последната стъпка е да добавите крайния флаг 0x7e към края на рамката. След това данните могат да бъдат изпращани до порта на UART.
3. Процес на дезактивиране
Когато данните се получават от UART, просто трябва да направим обратните стъпки, за да ги декодираме.
4. Референции
Време за публикация: 08-2022 февруари