Avtor: TorchIoTBootCamp
Povezava: https://zhuanlan.zhihu.com/p/339700391
Od: Quora
1. Uvod
Silicon Labs je ponudil rešitev gostitelj + NCP za načrtovanje prehoda Zigbee. V tej arhitekturi lahko gostitelj komunicira z NCP prek vmesnika UART ali SPI. Najpogosteje se uporablja UART, saj je veliko preprostejši od SPI.
Silicon Labs je zagotovil tudi vzorec projekta za gostiteljski program, ki je vzorecZ3GatewayHost
. Vzorec deluje v sistemu, podobnem Unixu. Nekatere stranke bodo morda želele vzorec gostitelja, ki lahko deluje na RTOS, vendar na žalost trenutno ni vzorca gostitelja na osnovi RTOS. Uporabniki morajo razviti lasten gostiteljski program, ki temelji na RTOS.
Pred razvojem prilagojenega gostiteljskega programa je pomembno razumeti protokol prehoda UART. Za NCP, ki temelji na UART, in NCP, ki temelji na SPI, gostitelj za komunikacijo z NCP uporablja protokol EZSP.EZSPje okrajšava zaSerijski protokol EmberZnet, in je opredeljen vUG100. Za NCP, ki temelji na UART, je implementiran protokol nižje plasti za zanesljiv prenos podatkov EZSP preko UART, to jePEPELprotokol, okrajšava zaAsinhroni serijski gostitelj. Za več podrobnosti o ASH glejteUG101inUG115.
Razmerje med EZSP in ASH je mogoče ponazoriti z naslednjim diagramom:
Format podatkov protokola EZSP in ASH je mogoče ponazoriti z naslednjim diagramom:
Na tej strani bomo predstavili postopek okvirjanja podatkov UART in nekaj ključnih okvirjev, ki se pogosto uporabljajo v prehodu Zigbee.
2. Okvirjanje
Splošni postopek okvirjanja je mogoče ponazoriti z naslednjo tabelo:
V tem grafikonu podatki pomenijo okvir EZSP. Na splošno so postopki okvirjanja: |No|Step|Reference|
|:-|:-|:-|
|1|Napolnite okvir EZSP|UG100|
|2|Randomizacija podatkov|Razdelek 4.3 UG101|
|3|Dodajte kontrolni bajt|Chap2 in Chap3 za UG101|
|4|Izračunajte CRC|razdelek 2.3 UG101|
|5|Byte Stuffing|Razdelek 4.2 UG101|
|6|Dodajte končno zastavico|Razdelek 2.4 UG101|
2.1. Napolnite okvir EZSP
Format okvirja EZSP je prikazan v 3. poglavju UG100.
Bodite pozorni, da se lahko ta oblika spremeni, ko se SDK nadgradi. Ko se format spremeni, mu bomo dali novo številko različice. Številka najnovejše različice EZSP je 8, ko je ta članek napisan (EmberZnet 6.8).
Ker se format okvirja EZSP lahko razlikuje med različnimi različicami, obstaja obvezna zahteva, da gostitelj in NCPMORAdelo z isto različico EZSP. V nasprotnem primeru ne morejo komunicirati po pričakovanjih.
Da bi to dosegli, mora biti prvi ukaz med gostiteljem in NCP ukaz različice. Z drugimi besedami, gostitelj mora pridobiti EZSP različico NCP pred kakršno koli drugo komunikacijo. Če se različica EZSP razlikuje od različice EZSP strani gostitelja, je treba komunikacijo prekiniti.
Implicitna zahteva za tem je, da lahko format ukaza za različicoNIKOLI NE SPREMENI. Format ukaza za različico EZSP je podoben:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Randomizacija podatkov
Podroben postopek randomizacije je opisan v razdelku 4.3 UG101. Celoten okvir EZSP bo naključno izbran. Naključna izbira je izključni ALI okvir EZSP in psevdonaključno zaporedje.
Spodaj je algoritem generiranja psevdonaključnega zaporedja.
- rand0 = 0×42
- če je bit 0 ranija 0, je randi+1 = randi >> 1
- če je bit 0 ranija 1, je randi+1 = (randi >> 1) ^ 0xB8
2.3. Dodajte kontrolni bajt
Kontrolni bajt je enobajtni podatek in ga je treba dodati v glavo okvira. Oblika je prikazana v spodnji tabeli:
Skupaj obstaja 6 vrst kontrolnih bajtov. Prvi trije se uporabljajo za običajne okvire s podatki EZSP, vključno z DATA, ACK in NAK. Zadnji trije se uporabljajo brez običajnih podatkov EZSP, vključno z RST, RSTACK in ERROR.
Format RST, RSTACK in ERROR je opisan v razdelkih 3.1 do 3.3.
2.4. Izračunajte CRC
16-bitni CRC se izračuna na bajtih od kontrolnega bajta do konca podatkov. Standardni CRCCCITT (g(x) = x16 + x12 + x5 + 1) je inicializiran na 0xFFFF. Najpomembnejši bajt je pred najmanj pomembnim bajtom (big-endian način).
2.5. Bajtno nadev
Kot je opisano v razdelku 4.2 UG101, obstaja nekaj rezerviranih vrednosti bajtov, ki se uporabljajo za posebne namene. Te vrednosti najdete v naslednji tabeli:
Ko se te vrednosti pojavijo v okvirju, bodo podatki posebej obdelani. – Vstavite ubežni bajt 0x7D pred rezervirani bajt – Obrnite bit5 tega rezerviranega bajta
Spodaj je nekaj primerov tega algoritma:
2.6. Dodajte končno zastavo
Zadnji korak je dodajanje končne zastavice 0x7E na konec okvira. Po tem se lahko podatki pošljejo na vrata UART.
3. Postopek deframinga
Ko so podatki prejeti iz UART-a, moramo samo narediti obratne korake, da jih dekodiramo.
4. Reference
Čas objave: 8. februarja 2022