Autor: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Z: Quora
1. Wprowadzenie
Firma Silicon Labs zaoferowała rozwiązanie host+NCP do projektowania bramek Zigbee. W tej architekturze host może komunikować się z NCP poprzez interfejs UART lub SPI. Najczęściej używany jest interfejs UART, ponieważ jest znacznie prostszy niż SPI.
Silicon Labs udostępniło również przykładowy projekt dla programu hosta, który jest przykłademZ3GatewayHostPróbka działa w systemie Unix. Niektórzy klienci mogą chcieć próbkę hosta, która może działać w systemie czasu rzeczywistego (RTOS), ale niestety, na razie nie ma dostępnej próbki hosta opartej na systemie RTOS. Użytkownicy muszą opracować własny program hosta oparty na systemie RTOS.
Ważne jest, aby zrozumieć protokół bramy UART przed opracowaniem spersonalizowanego programu hosta. Zarówno w przypadku NCP opartego na UART, jak i NCP opartego na SPI, host używa protokołu EZSP do komunikacji z NCP.EZSPjest skrótem odProtokół szeregowy EmberZneti jest zdefiniowany wUG100W przypadku protokołu NCP opartego na UART wdrożono protokół niższej warstwy, aby niezawodnie przesyłać dane EZSP przez UART, czyliPOPIÓŁprotokół, skrót odAsynchroniczny host szeregowyAby uzyskać więcej informacji na temat ASH, zapoznaj się zUG101IUG115.
Relację pomiędzy EZSP i ASH można zilustrować poniższym diagramem:
Format danych EZSP i protokołu ASH można zilustrować poniższym diagramem:
Na tej stronie przedstawimy proces ramkowania danych UART i niektórych ramek kluczowych, które są często używane w bramce Zigbee.
2. Oprawianie
Ogólny proces tworzenia ram można zilustrować poniższym wykresem:
Na tym wykresie dane oznaczają ramkę EZSP. Ogólnie rzecz biorąc, procesy ramkowania to: |Nr|Krok|Odniesienie|
|:-|:-|:-|
|1|Wypełnij ramkę EZSP|UG100|
|2|Randomizacja danych|Sekcja 4.3 UG101|
|3|Dodaj bajt kontrolny|Rozdział 2 i rozdział 3 UG101|
|4|Oblicz CRC|Sekcja 2.3 UG101|
|5|Wypełnianie bajtów|Sekcja 4.2 UG101|
|6|Dodaj flagę końcową|Sekcja 2.4 UG101|
2.1. Wypełnij ramkę EZSP
Format ramki EZSP zilustrowano w rozdziale 3 podręcznika UG100.
Należy pamiętać, że ten format może ulec zmianie po aktualizacji pakietu SDK. Po zmianie formatu nadamy mu nowy numer wersji. W momencie pisania tego artykułu najnowszy numer wersji EZSP to 8 (EmberZnet 6.8).
Ponieważ format ramki EZSP może się różnić w zależności od wersji, istnieje obowiązkowe wymaganie, aby host i NCPMUSIEĆpracować z tą samą wersją EZSP. W przeciwnym razie nie będą mogły komunikować się w oczekiwany sposób.
Aby to osiągnąć, pierwszym poleceniem między hostem a NCP musi być polecenie wersji. Innymi słowy, host musi pobrać wersję EZSP NCP przed jakąkolwiek inną komunikacją. Jeśli wersja EZSP różni się od wersji EZSP po stronie hosta, komunikacja musi zostać przerwana.
Dorozumianym wymogiem jest to, że format polecenia wersji możeNIGDY SIĘ NIE ZMIENIAJFormat polecenia wersji EZSP wygląda następująco:
Źródło: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Randomizacja danych
Szczegółowy proces randomizacji opisano w rozdziale 4.3 podręcznika UG101. Cała ramka EZSP zostanie zrandomizowana. Randomizacja polega na wyłącznym połączeniu ramki EZSP z sekwencją pseudolosową.
Poniżej przedstawiono algorytm generowania pseudolosowej sekwencji.
- rand0 = 0×42
- jeśli bit 0 Randiego wynosi 0, Randi+1 = Randi >> 1
- jeśli bit 0 w Randi wynosi 1, Randi+1 = (Randi >> 1) ^ 0xB8
2.3. Dodaj bajt kontrolny
Bajt kontrolny to jednobajtowy ciąg danych, który należy dodać do nagłówka ramki. Format ilustruje poniższa tabela:
Łącznie istnieje 6 rodzajów bajtów kontrolnych. Pierwsze trzy są używane dla wspólnych ramek z danymi EZSP, w tym DATA, ACK i NAK. Ostatnie trzy są używane bez wspólnych danych EZSP, w tym RST, RSTACK i ERROR.
Format RST, RSTACK i ERROR opisano w rozdziałach 3.1 do 3.3.
2.4. Oblicz CRC
16-bitowa suma kontrolna (CRC) jest obliczana na podstawie bajtów od bajtu kontrolnego do końca danych. Standardowy CRCCCITT (g(x) = x16 + x12 + x5 + 1) jest inicjowany wartością 0xFFFF. Bajt najbardziej znaczący poprzedza bajt najmniej znaczący (tryb big-endian).
2.5. Wypełnianie bajtów
Jak opisano w sekcji 4.2 dokumentu UG101, istnieją pewne zarezerwowane wartości bajtów, używane do celów specjalnych. Wartości te można znaleźć w poniższej tabeli:
Gdy te wartości pojawią się w ramce, dane zostaną poddane specjalnej obróbce. – Wstaw bajt ucieczki 0x7D przed zarezerwowanym bajtem. – Odwróć bit 5 tego zarezerwowanego bajtu.
Poniżej przedstawiono kilka przykładów tego algorytmu:
2.6. Dodaj flagę końcową
Ostatnim krokiem jest dodanie flagi końcowej 0x7E na końcu ramki. Następnie dane mogą zostać wysłane do portu UART.
3. Proces deramowania
Po otrzymaniu danych z UART wystarczy wykonać odwrotne kroki, aby je zdekodować.
4. Odniesienia
Czas publikacji: 08-02-2022








