Автор: TorchIoTBootCamp
Линк:https://zhuanlan.zhihu.com/p/339700391
Од: Quora
1. Вовед
Silicon Labs понуди решение host+NCP за дизајн на Zigbee портал. Во оваа архитектура, хостот може да комуницира со NCP преку UART или SPI интерфејс. Најчесто се користи UART бидејќи е многу поедноставен од SPI.
Силикон Лабс, исто така, обезбеди примерок на проект за програмата домаќин, што е примерокотZ3GatewayHost
Примерокот работи на систем сличен на Unix. Некои клиенти можеби ќе сакаат примерок на домаќин кој може да работи на RTOS, но за жал, засега нема примерок на домаќин базиран на RTOS. Корисниците треба да развијат сопствена програма за домаќин базирана на RTOS.
Важно е да се разбере протоколот UART gateway пред да се развие прилагодена програма за домаќин. И за 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 мора да биде командата version. Со други зборови, домаќинот мора да ја преземе EZSP верзијата на NCP пред која било друга комуникација. Ако верзијата на EZSP е различна од EZSP верзијата на страната на домаќинот, комуникацијата мора да се прекине.
Имплицитниот услов зад ова е дека форматот на командата version можеНИКОГАШ НЕ МЕНУВАЈФорматот на командата за верзијата на 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.02.2022