Informacje o Zigbee EZSP UART

Autor:TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Od: Quora

1. Wstęp

Silicon Labs zaoferowało rozwiązanie host + NCP do projektowania bram Zigbee.W tej architekturze host może komunikować się z NCP poprzez interfejs UART lub SPI.Najczęściej używany jest UART, ponieważ jest znacznie prostszy niż SPI.

Silicon Labs udostępniło także przykładowy projekt dla programu głównego, który jest próbkąHost Z3Gateway.Przykład działa w systemie podobnym do Uniksa.Niektórzy klienci mogą potrzebować przykładowego hosta, który można uruchomić w systemie RTOS, ale niestety na razie nie ma przykładowego hosta opartego na systemie RTOS.Użytkownicy muszą opracować własny program hosta oparty na systemie RTOS.

Przed opracowaniem dostosowanego programu hosta ważne jest zrozumienie protokołu bramy UART.Zarówno w przypadku NCP opartych na UART, jak i NCP opartych na SPI, host używa protokołu EZSP do komunikacji z NCP.EZSPjest skrótem odProtokół szeregowy EmberZneti jest zdefiniowany wUG100.W przypadku NCP opartego na UART zaimplementowano protokół niższej warstwy, aby niezawodnie przesyłać dane EZSP przez UART, to jestPOPIÓŁprotokół, skrót odAsynchroniczny host szeregowy.Więcej informacji na temat ASH można znaleźć w artykuleUG101IUG115.

Zależność pomiędzy EZSP i ASH można zilustrować poniższym diagramem:

1

Format danych protokołu EZSP i ASH można zilustrować na poniższym diagramie:

2

Na tej stronie przedstawimy proces ramkowania danych UART i niektóre klatki kluczowe, które są często używane w bramce Zigbee.

2. Kadrowanie

Ogólny proces tworzenia ramek można zilustrować na poniższym wykresie:

3

Na tym wykresie dane oznaczają ramkę EZSP.Ogólnie rzecz biorąc, procesy ramkowania są następujące: |Nie|Krok|Odniesienie|

|:-|:-|:-|

|1|Wypełnij ramkę EZSP|UG100|

|2|Losowość danych|Sekcja 4.3 UG101|

|3|Dodaj bajt kontrolny|Rozdział 2 i Rozdz. 3 UG101|

|4|Oblicz CRC|Sekcja 2.3 UG101|

|5|Upychanie bajtów|Sekcja 4.2 UG101|

|6|Dodaj flagę końcową|Sekcja 2.4 UG101|

2.1.Wypełnij ramkę EZSP

Format ramki EZSP przedstawiono w Rozdziale 3 UG100.

4

Zwróć uwagę, że ten format może ulec zmianie po aktualizacji pakietu SDK.Gdy format się zmieni, nadamy mu nowy numer wersji.W chwili pisania tego artykułu najnowszy numer wersji EZSP to 8 (EmberZnet 6.8).

Ponieważ format ramki EZSP może się różnić w różnych wersjach, istnieje obowiązkowy wymóg, aby host i NCPMUSIEĆpracować z tą samą wersją EZSP.W przeciwnym razie nie będą mogli komunikować się zgodnie z oczekiwaniami.

Aby to osiągnąć, pierwszym poleceniem przesyłanym między hostem a NCP musi być polecenie wersji.Innymi słowy, host musi pobrać wersję EZSP NCP przed jakąkolwiek inną komunikacją.Jeżeli wersja EZSP różni się od wersji EZSP po stronie hosta, należy przerwać komunikację.

Niejawnym wymaganiem jest to, że format polecenia wersji możeNIGDY SIĘ NIE ZMIENIAJ.Format polecenia wersji EZSP jest następujący:

5

Objaśnienia dotyczące pola parametrów i formatu odpowiedzi dotyczącej wersji można znaleźć w Rozdziale 4 UG100.Pole parametru to wersja EZSP programu hosta.Kiedy ten artykuł jest pisany, jest 8.
7
Książka: TorchIoTBootCamp
Źródło: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.2.Randomizacja danych

Szczegółowy proces randomizacji opisano w sekcji 4.3 UG101.Cała ramka EZSP będzie losowa.Randomizacja polega na wyłącznym OR ramce EZSP i sekwencji pseudolosowej.

Poniżej znajduje się algorytm generowania sekwencji pseudolosowej.

  • Rand0 = 0×42
  • jeśli bit 0 randi wynosi 0, randi+1 = randi >> 1
  • jeśli bit 0 randi wynosi 1, randi+1 = (randi >> 1) ^ 0xB8

2.3.Dodaj bajt kontrolny

Bajt kontrolny jest danymi jednobajtowymi i powinien zostać dodany do nagłówka ramki.Format ilustruje poniższa tabela:

6

W sumie 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.

Formaty RST, RSTACK i ERROR opisano w sekcjach 3.1 do 3.3.

2.4.Oblicz CRC

16-bitowa suma CRC jest obliczana na bajtach od bajtu kontrolnego do końca danych.Standardowy CRCCCITT (g(x) = x16 + x12 + x5 + 1) jest inicjowany na 0xFFFF.Najbardziej znaczący bajt poprzedza najmniej znaczący bajt (tryb big-endian).

2.5.Wypełnianie bajtów

Jak opisano w sekcji 4.2 UG101, istnieją pewne zarezerwowane wartości bajtów używane do specjalnych celów.Wartości te można znaleźć w poniższej tabeli:

7

Kiedy te wartości pojawią się w ramce, dane zostaną poddane specjalnej obróbce.– Wstaw bajt ucieczki 0x7D przed zarezerwowanym bajtem – Odwróć bit5 tego zarezerwowanego bajtu

Poniżej kilka przykładów tego algorytmu:

8

2.6.Dodaj flagę końca

Ostatnim krokiem jest dodanie flagi końca 0x7E na końcu ramki.Następnie dane można przesłać do portu UART.

3. Proces usuwania kadru

Kiedy dane zostaną odebrane z UART, wystarczy wykonać kroki odwrotne, aby je zdekodować.

4. Referencje


Czas publikacji: 08 lutego 2022 r
Czat online WhatsApp!