O Zigbee EZSP UART-u

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

1. Uvod

Silicon Labs je ponudio host+NCP rješenje za dizajn Zigbee gateway-a. U ovoj arhitekturi, host može komunicirati s NCP-om putem UART ili SPI interfejsa. Najčešće se koristi UART jer je mnogo jednostavniji od SPI-ja.

Silicon Labs je također pružio primjer projekta za glavni program, koji jeZ3GatewayHostPrimjer radi na Unix-sličnom sistemu. Neki korisnici možda žele primjer hosta koji može raditi na RTOS-u, ali nažalost, trenutno ne postoji primjer hosta baziran na RTOS-u. Korisnici trebaju razviti vlastiti host program baziran na RTOS-u.

Važno je razumjeti UART gateway protokol prije razvoja prilagođenog host programa. I za UART bazirani NCP i za SPI bazirani NCP, host koristi EZSP protokol za komunikaciju s NCP-om.EZSPje skraćenica zaEmberZnet serijski protokol, i definisan je uUG100Za NCP baziran na UART-u, implementiran je protokol nižeg sloja za pouzdan prenos EZSP podataka preko UART-a, to je...PEPEOprotokol, skraćenica zaAsinhroni serijski hostZa više detalja o ASH-u, pogledajteUG101iUG115.

Odnos između EZSP-a i ASH-a može se ilustrovati sljedećim dijagramom:

1

Format podataka EZSP-a i ASH protokola može se ilustrovati sljedećim dijagramom:

2

Na ovoj stranici ćemo predstaviti proces uokviravanja UART podataka i neke ključne okvire koji se često koriste u Zigbee gateway-u.

2. Uokviravanje

Opći proces uokviravanja može se ilustrirati sljedećom shemom:

3

U ovom grafikonu, podaci označavaju EZSP okvir. Općenito, procesi uokviravanja su: |Ne|Korak|Referenca|

|:-|:-|:-|

|1|Napunite EZSP okvir|UG100|

|2|Randomizacija podataka|Odjeljak 4.3 dokumenta UG101|

|3|Dodaj kontrolni bajt|Poglavlje2 i Poglavlje3 od UG101|

|4|Izračunajte CRC|Odjeljak 2.3 UG101|

|5|Punjenje bajtova|Odjeljak 4.2 dokumenta UG101|

|6|Dodajte zastavicu završetka|Odjeljak 2.4 dokumenta UG101|

2.1. Popunite EZSP okvir

EZSP format okvira je ilustrovan u 3. poglavlju dokumenta UG100.

4

Imajte na umu da se ovaj format može promijeniti kada se SDK nadogradi. Kada se format promijeni, dat ćemo mu novi broj verzije. Najnoviji broj verzije EZSP-a je 8 kada je ovaj članak napisan (EmberZnet 6.8).

Budući da se format EZSP okvira može razlikovati između različitih verzija, postoji obavezni zahtjev da host i NCPMORArade s istom EZSP verzijom. U suprotnom, ne mogu komunicirati kako se očekuje.

Da bi se to postiglo, prva komanda između hosta i NCP-a mora biti komanda verzije. Drugim riječima, host mora preuzeti EZSP verziju NCP-a prije bilo kakve druge komunikacije. Ako se EZSP verzija razlikuje od EZSP verzije na strani hosta, komunikacija se mora prekinuti.

Implicitni zahtjev iza ovoga je da format naredbe verzije možeNIKAD NE MIJENJAJFormat komande za EZSP verziju je prikazan ispod:

5

Objašnjenja polja parametra i formata odgovora o verziji mogu se naći u 4. poglavlju dokumenta UG100. Polje parametra predstavlja EZSP verziju glavnog programa. U trenutku pisanja ovog članka, ima broj 8.
7
Tekst:TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明傂

2.2. Randomizacija podataka

Detaljan proces randomizacije opisan je u odjeljku 4.3 dokumenta UG101. Cijeli EZSP okvir će biti randomiziran. Randomizacija se vrši isključivom ILI operacijom između EZSP okvira i pseudo-nasumičnog niza.

U nastavku slijedi algoritam za generiranje pseudo-slučajnog niza.

  • nasumično0 = 0×42
  • ako je bit 0 randi funkcije 0, randi+1 = randi >> 1
  • Ako je bit 0 randi funkcije 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Dodajte kontrolni bajt

Kontrolni bajt je podatak od jednog bajta i treba ga dodati na početak okvira. Format je ilustrovan u tabeli ispod:

6

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-a, RSTACK-a i ERROR-a opisan je 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. Popunjavanje bajtova

Kao što je opisano u odjeljku 4.2 dokumenta UG101, postoje neke rezervirane vrijednosti bajtova koje se koriste u posebne svrhe. Ove vrijednosti se mogu naći u sljedećoj tabeli:

7

Kada se ove vrijednosti pojave u okviru, podaci će biti tretirani posebno. – Umetnuti escape bajt 0x7D ispred rezervisanog bajta – Obrnuti bit 5 tog rezervisanog bajta

U nastavku su navedeni neki primjeri ovog algoritma:

8

2.6. Dodajte zastavicu za kraj

Posljednji korak je dodavanje zastavice za kraj okvira 0x7E. Nakon toga, podaci se mogu poslati na UART port.

3. Proces deframinga

Kada primimo podatke iz UART-a, potrebno je samo da uradimo obrnute korake da bismo ih dekodirali.

4. Reference


Vrijeme objave: 08.02.2022.
Online chat putem WhatsApp-a!