O Zigbee EZSP UART

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

1. Wprowadzenie

Silicon Labs zaoferowało rozwiązanie host+NCP do projektowania bramek Zigbee. W tej architekturze host może komunikować się z NCP za pośrednictwem interfejsu UART lub SPI. Najczęściej używa się UART, ponieważ jest znacznie prostszy niż SPI.

Silicon Labs udostępnił również przykładowy projekt dla programu hosta, który jest przykłademZ3GatewayHost. Próbka działa w systemie typu Unix. Niektórzy klienci mogą chcieć próbkę hosta, która może działać w systemie RTOS, ale niestety na razie nie ma próbki hosta opartej na systemie RTOS. Użytkownicy muszą opracować własny program hosta oparty na systemie RTOS.

Ważne jest zrozumienie protokołu bramy UART przed opracowaniem dostosowanego 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 w celu niezawodnego przesyłania danych EZSP przez UART zaimplementowano protokół niższej warstwy, czyliPOPIÓŁprotokół, skrót odAsynchroniczny host szeregowy. Więcej szczegółów na temat ASH można znaleźć wUG101IUG115.

Relację pomiędzy EZSP i ASH można zilustrować poniższym diagramem:

1

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

2

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:

3

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 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 przedstawiono w rozdziale 3 podręcznika UG100.

4

Zwróć uwagę, że ten format może ulec zmianie po uaktualnieniu SDK. Gdy format ulegnie zmianie, nadamy mu nowy numer wersji. Najnowszy numer wersji EZSP to 8 w momencie pisania tego artykułu (EmberZnet 6.8).

Ponieważ format ramki EZSP może się różnić w zależności od wersji, istnieje obowiązkowy wymóg, aby host i NCPMUSIEĆpracują z tą samą wersją EZSP. W przeciwnym razie nie mogą się komunikować w oczekiwany sposób.

Aby to osiągnąć, pierwszym poleceniem między hostem a NCP musi być polecenie version. 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, aby format polecenia wersji mógłNIGDY SIĘ NIE ZMIENIAJFormat polecenia wersji EZSP wygląda następująco:

5

Wyjaśnienia pola parametru i formatu odpowiedzi wersji można znaleźć w rozdziale 4 UG100. Pole parametru to wersja EZSP programu hosta. W momencie pisania tego artykułu jest to wersja 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 zostanie zrandomizowana. Randomizacja polega na wyłącznym OR ramce EZSP i pseudolosowej sekwencji.

Poniżej przedstawiono algorytm generowania sekwencji pseudolosowej.

  • rand0 = 0×42
  • jeśli bit 0 w randi 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 jednobajtowe dane i powinien zostać dodany do nagłówka ramki. Format jest zilustrowany poniższą tabelą:

6

Łącznie istnieje 6 rodzajów bajtów kontrolnych. Pierwsze trzy są używane do 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 sekcjach 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 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 celów specjalnych. Wartości te można znaleźć w poniższej tabeli:

7

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:

8

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 de-ramkowania

Po otrzymaniu danych z UART wystarczy wykonać odwrotne kroki, aby je zdekodować.

4. Odniesienia


Czas publikacji: 08-02-2022
Czat online na WhatsAppie!