Avtor:TorchIoTBootCamp
Povezava: https://zhuanlan.zhihu.com/p/339700391
Iz:Quora
1. Uvod
Silicon Labs je ponudil rešitev gostitelj+NCP za zasnovo Zigbee prehoda. V tej arhitekturi lahko gostitelj komunicira z NCP prek vmesnika UART ali SPI. Najpogosteje se uporablja UART, ker je veliko enostavnejši od SPI.
Silicon Labs je za gostiteljski program zagotovil tudi vzorčni projekt, ki je vzorecZ3GatewayHost
Vzorec deluje na sistemu, podobnem Unixu. Nekatere stranke bodo morda želele vzorec gostitelja, ki lahko deluje na RTOS-u, vendar žal trenutno ni na voljo vzorca gostitelja, ki bi temeljil na RTOS-u. Uporabniki morajo razviti svoj lasten program gostitelja, ki temelji na RTOS-u.
Preden razvijete prilagojen gostiteljski program, je pomembno razumeti protokol prehoda UART. Tako za NCP, ki temelji na UART, kot za NCP, ki temelji na SPI, gostitelj za komunikacijo z NCP uporablja protokol EZSP.EZSPje okrajšava zaSerijski protokol EmberZnet, in je definirano vUG100Za NCP, ki temelji na UART-u, je implementiran protokol nižje plasti za zanesljiv prenos podatkov EZSP prek UART-a, to je ...PEPELprotokol, okrajšava zaAsinhroni serijski gostiteljZa več podrobnosti o ASH glejteUG101inUG115.
Razmerje med EZSP in ASH lahko ponazorimo z naslednjim diagramom:
Format podatkov protokolov EZSP in ASH lahko ponazorimo z naslednjim diagramom:
Na tej strani bomo predstavili postopek uokvirjanja podatkov UART in nekaj ključnih okvirjev, ki se pogosto uporabljajo v prehodu Zigbee.
2. Uokvirjanje
Splošni postopek oblikovanja okvirja lahko ponazorimo z naslednjo tabelo:
V tem grafikonu podatki pomenijo okvir EZSP. Na splošno so postopki uokvirjanja naslednji: |Številka|Korak|Referenca|
|:-|:-|:-|
|1|Napolnite okvir EZSP|UG100|
|2|Randomizacija podatkov|Oddelek 4.3 dokumenta UG101|
|3|Dodaj kontrolni bajt|Poglavje 2 in poglavje 3 za UG101|
|4|Izračunajte CRC|Oddelek 2.3 dokumenta UG101|
|5|Zapolnjevanje bajtov|Oddelek 4.2 dokumenta UG101|
|6|Dodaj končno zastavico|Oddelek 2.4 dokumenta UG101|
2.1. Izpolnite okvir EZSP
Format okvirja EZSP je prikazan v 3. poglavju dokumenta UG100.
Upoštevajte, da se ta oblika zapisa lahko spremeni, ko se nadgradi SDK. Ko se oblika zapisa spremeni, ji bomo dodelili novo številko različice. Najnovejša številka različice EZSP je bila v času pisanja tega članka 8 (EmberZnet 6.8).
Ker se format okvirja EZSP lahko razlikuje med različnimi različicami, je obvezna zahteva, da gostitelj in NCPOBVEZNOdelujejo z isto različico EZSP. Sicer ne morejo komunicirati po pričakovanjih.
Da bi to dosegli, mora biti prvi ukaz med gostiteljem in NCP ukaz za različico. Z drugimi besedami, gostitelj mora pred kakršno koli komunikacijo pridobiti različico EZSP NCP. Če se različica EZSP razlikuje od različice EZSP na gostiteljski strani, je treba komunikacijo prekiniti.
Implicitna zahteva za tem je, da lahko format ukaza za različicoNIKOLI SE NE SPREMENIFormat ukaza za različico EZSP je naslednji:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Randomizacija podatkov
Podroben postopek randomizacije je opisan v poglavju 4.3 dokumenta UG101. Celoten okvir EZSP bo randomiziran. Randomizacija se izvede z izključujočim ALI okvirjem EZSP in psevdonaključnim zaporedjem.
Spodaj je algoritem za generiranje psevdonaključnega zaporedja.
- naključje0 = 0×42
- če je bit 0 funkcije randi enak 0, je randi+1 = randi >> 1
- če je bit 0 funkcije randi enak 1, je randi+1 = (randi >> 1) ^ 0xB8
2.3. Dodajte kontrolni bajt
Kontrolni bajt so enobajtni podatki in ga je treba dodati na začetek okvirja. Oblika je prikazana v spodnji tabeli:
Skupaj obstaja 6 vrst kontrolnih bajtov. Prvi trije se uporabljajo za običajne okvirje 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 zapisov RST, RSTACK in ERROR je opisan v poglavjih 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 predhodi najmanj pomembnemu bajtu (način big-endian).
2.5. Polnjenje bajtov
Kot je opisano v poglavju 4.2 dokumenta UG101, obstajajo nekatere rezervirane vrednosti bajtov, ki se uporabljajo za posebne namene. Te vrednosti najdete v naslednji tabeli:
Ko se te vrednosti pojavijo v okvirju, se podatki posebej obravnavajo. – Vstavi se ubežni bajt 0x7D pred rezervirani bajt – Obrne se bit 5 rezerviranega bajta
Spodaj je nekaj primerov tega algoritma:
2.6. Dodajte končno zastavico
Zadnji korak je dodajanje končne zastavice 0x7E na konec okvirja. Po tem se lahko podatki pošljejo na vrata UART.
3. Postopek razokvirjanja
Ko prejmemo podatke iz UART-a, moramo za dekodiranje izvesti le obratne korake.
4. Reference
Čas objave: 8. februar 2022