O Zigbee EZSP UART

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:

1

Format danych EZSP i protokołu 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 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.

4

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:

5

Objaśnienia dotyczące pola parametru i formatu odpowiedzi wersji można znaleźć w rozdziale 4 podręcznika 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 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:

6

Łą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:

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 deramowania

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

4. Odniesienia


Czas publikacji: 08-02-2022
Czat online WhatsApp!