Autor:TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
From:Quora
1. Uvod
Silicon Labs je ponudio host+NCP rješenje za Zigbee gateway dizajn. U ovoj arhitekturi, domaćin može komunicirati sa NCP-om preko UART ili SPI interfejsa. Najčešće se koristi UART jer je mnogo jednostavniji od SPI.
Silicon Labs je takođe obezbedio primer projekta za glavni program, koji je primerZ3GatewayHost
. Uzorak radi na sistemu sličnom Unixu. Neki korisnici možda žele uzorak hosta koji može da radi na RTOS-u, ali nažalost, za sada ne postoji RTOS baziran host uzorak. Korisnici treba da razviju sopstveni host program zasnovan na RTOS-u.
Važno je razumjeti UART gateway protokol prije nego što razvijete prilagođeni host program. I za NCP baziran na UART-u i na NCP baziran na SPI, domaćin koristi EZSP protokol za komunikaciju sa NCP-om.EZSPje skraćenica zaEmberZnet serijski protokol, a definiran je uUG100. Za NCP baziran na UART, implementiran je protokol nižeg sloja za pouzdan prijenos EZSP podataka preko UART-a, to jeASHprotokol, skraćeno zaAsinhroni serijski host. Za više detalja o ASH-u, pogledajteUG101iUG115.
Odnos između EZSP i ASH može se ilustrovati sljedećim dijagramom:
Format podataka EZSP i ASH protokola može se ilustrirati sljedećim dijagramom:
Na ovoj stranici ćemo predstaviti proces uokvirivanja UART podataka i neke ključne okvire koji se često koriste u Zigbee gateway-u.
2. Uokvirivanje
Opći proces uokvirivanja može se ilustrirati sljedećim grafikonom:
U ovom grafikonu, podaci označavaju okvir EZSP. Općenito, procesi uokvirivanja su: |Ne|Step|Reference|
|:-|:-|:-|
|1|Popunite EZSP okvir|UG100|
|2|Randomizacija podataka|Sekcija 4.3 od UG101|
|3|Dodaj kontrolni bajt|Chap2 i Chap3 od UG101|
|4|Izračunajte CRC|Odeljak 2.3 od UG101|
|5|Punjenje bajtova|Sekcija 4.2 od UG101|
|6|Dodaj oznaku za kraj|Sekcija 2.4 od UG101|
2.1. Popunite EZSP okvir
Format okvira EZSP je ilustrovan u Poglavlju 3 UG100.
Obratite pažnju da se ovaj format može promijeniti kada se SDK nadogradi. Kada se format promijeni, dat ćemo mu novi broj verzije. Najnovija verzija EZSP-a je 8 kada je ovaj članak napisan (EmberZnet 6.8).
Kako se format okvira EZSP može razlikovati između različitih verzija, postoji obavezan zahtjev da domaćin i NCPMUSTrade s istom EZSP verzijom. U suprotnom, ne mogu komunicirati kako se očekuje.
Da bi se to postiglo, prva naredba između hosta i NCP-a mora biti naredba verzija. Drugim riječima, domaćin mora dohvatiti EZSP verziju NCP-a prije bilo kakve druge komunikacije. Ako se EZSP verzija razlikuje od EZSP verzije na strani domaćina, komunikacija se mora prekinuti.
Implicitni zahtjev iza ovoga je da format naredbe verzija možeNIKADA SE NE MIJENJATI. Format komande verzije EZSP je kao u nastavku:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明傂
2.2. Randomizacija podataka
Detaljan proces randomizacije opisan je u odjeljku 4.3 UG101. Cijeli EZSP okvir će biti nasumično raspoređen. Nasumični odabir je isključiti-ILI EZSP okvir i pseudo-slučajni niz.
Ispod je algoritam generisanja pseudo-slučajnog niza.
- rand0 = 0×42
- ako je bit 0 randi 0, randi+1 = randi >> 1
- ako je bit 0 randi 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Dodajte kontrolni bajt
Kontrolni bajt je jedan bajt podataka i treba ga dodati u glavu okvira. Format je ilustrovan u tabeli ispod:
Ukupno postoji 6 vrsta kontrolnih bajtova. Prva tri se koriste za uobičajene okvire sa EZSP podacima, uključujući DATA, ACK i NAK. Posljednja tri se koriste bez uobičajenih EZSP podataka, uključujući RST, RSTACK i ERROR.
Format RST, RSTACK i ERROR opisani su u odjeljcima 3.1 do 3.3.
2.4. Izračunajte CRC
16-bitni CRC se izračunava na bajtovima od kontrolnog bajta do kraja podataka. Standardni CRCCCITT (g(x) = x16 + x12 + x5 + 1) je inicijaliziran na 0xFFFF. Najznačajniji bajt prethodi najmanje značajnom bajtu (big-endian mod).
2.5. Punjenje bajtova
Kao što je opisano u odjeljku 4.2 UG101, postoje neke rezervirane vrijednosti bajtova koji se koriste za posebne svrhe. Ove vrijednosti možete pronaći u sljedećoj tabeli:
Kada se ove vrijednosti pojave u okviru, podaci će se posebno tretirati. – Umetnite izlazni bajt 0x7D ispred rezerviranog bajta – Obrnite bit 5 tog rezerviranog bajta
Ispod su neki primjeri ovog algoritma:
2.6. Dodajte zastavu za kraj
Poslednji korak je dodavanje krajnje zastavice 0x7E na kraj okvira. Nakon toga, podaci se mogu poslati na UART port.
3. Proces de-framinga
Kada su podaci primljeni od UART-a, samo trebamo uraditi obrnute korake da ih dekodujemo.
4. Reference
Vrijeme objave: Feb-08-2022