Автор: 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 и псевдо-случајна секвенца.
Подолу е алгоритмот за генерирање на псевдо-случајна секвенца.
- ранд0 = 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.Најзначајниот бајт претходи на најмалку значајниот бајт (голем-ендијански режим).
2.5.Бајти полнење
Како што е опишано во делот 4.2 од UG101, има некои резервирани вредности на бајти кои се користат за посебна намена.Овие вредности може да се најдат во следната табела:
Кога овие вредности ќе се појават во рамката, ќе се направи посебен третман на податоците.– Вметнете го бегство бајт 0x7D пред резервираниот бајт – Превртете го битот5 на тој резервиран бајт
Подолу се дадени неколку примери на овој алгоритам:
2.6.Додадете го крајното знаме
Последниот чекор е да го додадете крајното знаменце 0x7E на крајот на рамката.После тоа, податоците може да се испратат до пристаништето UART.
3. Процес на де-кадрирање
Кога се примаат податоци од UART, само треба да ги направиме обратните чекори за да ги декодираме.
4. Референци
Време на објавување: 08-02-2022 година