Autor : Torchiotbootcamp
Link : https: //zhuanlan.zhihu.com/p/339700391
Z : Quora
1. Wprowadzenie
Silicon Labs zaoferował rozwiązanie gospodarza+NCP do projektowania bramy Zigbee. W tej architekturze gospodarz może komunikować się z NCP przez interfejs UART lub SPI. Najczęściej UART jest używany jako znacznie prostszy niż SPI.
Silicon Labs dostarczył również przykładowy projekt dla programu hosta, który jest próbkąZ3gatewayhost
. Próbka działa w systemie podobnym do UNIX. Niektórzy klienci mogą chcieć próbki hosta, która może działać na RTOS, ale niestety na razie nie ma próbki hosta opartej na RTOS. Użytkownicy muszą opracować własny program hosta na podstawie RTO.
Ważne jest, aby zrozumieć protokół UART Gateway przed opracowaniem dostosowanego programu hosta. Zarówno dla NCP opartego na UART, jak i NCP opartych na SPI, host używa protokołu EZSP do komunikacji z NCP.EZSPjest skrót odProtokół szeregowy Emberznet, i jest zdefiniowany wUG100. W przypadku NCP opartego na UART wdrażany jest protokół niższej warstwy w celu wiarygodnego przenoszenia danych EZSP nad UART, to jestPOPIÓŁProtokół, skrót odAsynchroniczny gospodarz seryjny. Aby uzyskać więcej informacji na temat Ash, zapoznaj sięUG101IUG115.
Relację między EZSP a popiołem można zilustrować następujący schemat:
Format danych EZSP i protokołu popiołu można zilustrować następującym schematem:
Na tej stronie wprowadzimy proces kadrowania danych UART i niektóre kluczowe ramki, które są często używane w Zigbee Gateway.
2. Ramka
Ogólny proces ramy można zilustrować następującą tabelą:
Na tym wykresie dane oznaczają ramkę EZSP. Ogólnie rzecz biorąc, procesy kadrowania to: | nie | krok | Odniesienie |
|:-|:-|:-|
| 1 | Wypełnij ramkę EZSP | UG100 |
| 2 | Randomizacja danych | Sekcja 4.3 UG101 |
| 3 | Dodaj bajt kontrolny | Chap2 i Chap3 z UG101 |
| 4 | Oblicz CRC | Sekcja 2.3 UG101 |
| 5 | Składanie bajtów | Sekcja 4.2 UG101 |
| 6 | Dodaj flagę końcową | Sekcja 2.4 UG101 |
2.1. Wypełnij ramkę EZSP
Format ramki EZSP ilustruje się w rozdziale 3 UG100.
Zwróć uwagę, że ten format może się zmienić, gdy SDK uaktualni. Po zmianie formatu podamy nowy numer wersji. Najnowszy numer wersji EZSP to 8, gdy ten artykuł jest napisany (Emberznet 6.8).
Ponieważ format ramki EZSP może być różny między różnymi wersjami, istnieje obowiązkowy wymóg, aby host i NCPMUSIEĆPracuj z tą samą wersją EZSP. W przeciwnym razie nie mogą komunikować się zgodnie z oczekiwaniami.
Aby to osiągnąć, pierwszym poleceniem między hostem a NCP musi być polecenie wersji. Innymi słowy, host musi odzyskać wersję EZSP NCP przed jakąkolwiek inną komunikacją. Jeśli wersja EZSP różni się od wersji EZSP strony hosta, komunikacja musi zostać przerwana.
Niejawnym wymogiem jest to, że format polecenia wersji możeNigdy nie zmieniaj. Format polecenia wersji EZSP jest jak poniżej:
链接 : 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 losowo losowo. Randomizacja polega na wyłączeniu ramce EZSP i sekwencji pseudo-randomowej.
Poniżej znajduje się algorytm generowania sekwencji pseudo-randomowej.
- 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 o jeden bajt i powinien być dodany do głowy ramy. Format jest zilustrowany z poniższą tabelą:
Całkowicie istnieje 6 rodzajów bajtów kontrolnych. Pierwsze trzy są używane do wspólnych ram z danymi EZSP, w tym danych, ACK i NAK. Ostatnie trzy są używane bez wspólnych danych EZSP, w tym RST, RSTACK i Błąd.
Format RST, RSTACK i błąd opisano w rozdziale 3.1 do 3.3.
2.4. Oblicz CRC
16-bitowy CRC jest obliczany na bajtach z bajtu kontrolnego do końca danych. Standardowy crcccitt (g (x) = x16 + x12 + x5 + 1) jest inicjowany do 0xffff. Najważniejszy bajt poprzedza najmniej znaczący bajt (tryb dużych end).
2.5. Składanie bajtów
Jak opisano w sekcji 4.2 UG101, istnieją pewne zarezerwowane wartości bajtów wykorzystywane dla specjalnego celu. Wartości te można znaleźć w poniższej tabeli:
Gdy te wartości pojawią się w ramce, specjalne leczenie zostanie wykonane z danymi. - Włóż bajt ucieczki 0x7D przed zarezerwowanym bajtem - Odwróć Bit5 tego zarezerwowanego bajtu
Poniżej kilka przykładów tego algorytmu:
2.6. Dodaj flagę końcową
Ostatnim krokiem jest dodanie flagi końcowej 0x7e na koniec ramki. Następnie dane można wysłać do portu UART.
3. Proces de-framing
Po otrzymaniu danych z UART musimy tylko wykonać odwrotne kroki, aby je zdekodować.
4. Referencje
Czas postu: luty-08-2022