O Zigbee EZSP UART-u

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

1. Uvod

Silicon Labs je ponudio rješenje host+NCP za dizajn Zigbee pristupnika. U ovoj arhitekturi, host može komunicirati s NCP-om putem UART ili SPI sučelja. 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 je primjerZ3GatewayHostPrimjer se izvodi na Unix-sličnom sustavu. Neki korisnici možda žele primjer hosta koji može raditi na RTOS-u, ali nažalost, trenutno ne postoji primjer hosta temeljen na RTOS-u. Korisnici trebaju razviti vlastiti program hosta temeljen na RTOS-u.

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

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

1

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

2

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

2. Uokvirivanje

Opći postupak oblikovanja može se ilustrirati sljedećom tablicom:

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|Poglavlje 2 i Poglavlje 3 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. Ispunite EZSP okvir

Format okvira EZSP ilustriran je u 3. poglavlju dokumenta UG100.

4

Imajte na umu da se ovaj format može promijeniti prilikom nadogradnje SDK-a. 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 obvezni zahtjev da domaćin i NCPMORArade s istom EZSP verzijom. Inače ne mogu komunicirati kako se očekuje.

Da bi se to postiglo, prva naredba između hosta i NCP-a mora biti naredba verzije. Drugim riječima, host mora dohvatiti 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 SE NE MIJENJAJFormat naredbe za EZSP verziju je sljedeći:

5

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

2.2. Randomizacija podataka

Detaljan postupak randomizacije opisan je u odjeljku 4.3 dokumenta UG101. Cijeli EZSP okvir bit će randomiziran. Randomizacija se provodi isključivom ILI operacijom EZSP okvira i pseudo-slučajnog niza.

U nastavku slijedi algoritam za generiranje pseudoslučajnog niza.

  • nasumično0 = 0×42
  • ako je bit 0 randija jednak 0, randi+1 = randi >> 1
  • ako je bit 0 randija jednak 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 ilustriran u tablici ispod:

6

Ukupno postoji 6 vrsta kontrolnih bajtova. Prva tri se koriste za uobičajene okvire s 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) inicijalizira se na 0xFFFF. Najznačajniji bajt prethodi najmanje značajnom bajtu (big-endian način rada).

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. Te se vrijednosti mogu pronaći u sljedećoj tablici:

7

Kada se ove vrijednosti pojave u okviru, s podacima će se izvršiti poseban tretman. – Umetnuti escape bajt 0x7D ispred rezerviranog bajta – Obrnuti bit 5 tog rezerviranog bajta

U nastavku su navedeni neki primjeri ovog algoritma:

8

2.6. Dodajte zastavicu završetka

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

3. Proces deframinga

Kada se podaci prime s UART-a, potrebno je samo izvršiti obrnute korake za dekodiranje.

4. Reference


Vrijeme objave: 08.02.2022.
Online chat putem WhatsAppa!