Autor : Torchiotbootcamp
Link : https: //zhuanlan.zhihu.com/p/339700391
Alates : Quora
1. Sissejuhatus
Silicon Labs on pakkunud host+NCP lahendust Zigbee Gateway disaini jaoks. Selles arhitektuuris saab host suhelda NCP -ga UART või SPI liidese kaudu. Kõige sagedamini kasutatakse UART, kuna see on palju lihtsam kui SPI.
Silicon Labs on esitanud ka hostiprogrammi näidisprojekti, mis on valimZ3gatewayhost
. Proov töötab UNIX-laadses süsteemis. Mõned kliendid võivad soovida hostivalimi, mis võib töötada RTOS -is, kuid kahjuks pole praegu RTOS -põhist hostiproovi. Kasutajad peavad välja töötama oma hostprogrammi, mis põhineb RTO -del.
Enne kohandatud hostiprogrammi väljatöötamist on oluline mõista UART lüüsi protokolli. Nii UART -põhise NCP kui ka SPI -põhise NCP jaoks kasutab peremees NCP -ga suhtlemiseks EZSP -protokolli.Ezspon lühikeEmberzneti jadaprotokollja see on määratletud aastalUG100. UART -põhise NCP jaoks rakendatakse madalama kihi protokolli, et kanda EZSP andmeid usaldusväärselt UART -i kaudu, see onTuhkprotokoll, lühikeAsünkroonne seeria peremees. ASH -i kohta lisateabe saamiseks lugege palunUG101jaUG115.
EZSP ja Ashi vahelist suhet saab illustreerida järgmise diagrammiga:
EZSP ja ASH -protokolli andmevormingut saab illustreerida järgmise diagrammiga:
Sellel lehel tutvustame UART -andmete ja mõnda võtmeraami raamimise protsessi, mida kasutatakse sageli Zigbee Gateways.
2. raam
Üldist raamiprotsessi saab illustreerida järgmise diagrammiga:
Selles diagrammis tähendavad andmed EZSP kaadrit. Üldiselt on raamimisprotsessid: | ei | samm | viide |
|:-|:-|:-|
| 1 | Täitke EZSP raam | UG100 |
| 2 | andmete randomiseerimine | UG101 jaotis 4.3 |
| 3 | Lisage juhtimisbait | UG101 peatükk ja 3. peatükk |
| 4 | arvutage CRC | UG101 jaotis 2.3 |
| 5 | BYTE TOTMING | UG101 jaotis 4.2 |
| 6 | lisage lõpplipp | UG101 jaotis 2.4 |
2.1. Täitke EZSP raam
EZSP kaadri vormingut on illustreeritud UG100 3. peatükis.
Pöörake tähelepanu sellele, et SDK uuenemisel võib see vorming muutuda. Kui vorming muutub, anname sellele uue versiooninumbri. Viimane EZSP versiooni number on 8, kui see artikkel on kirjutatud (Emberznet 6.8).
Kuna EZSP kaadri vorming võib erinevate versioonide vahel erineda, on kohustuslik nõue, et host ja NCPPidiTöötage sama EZSP versiooniga. Muidu ei saa nad suhelda ootuspäraselt.
Selle saavutamiseks peab esimene käsk hosti ja NCP vahel olema käsk Versioon. Teisisõnu, host peab enne mis tahes muud suhtlust tagasi NCP EZSP versiooni. Kui EZSP versioon on hosti poole EZSP versiooniga erinev, tuleb suhtlus katkestada.
Selle taga on kaudne nõue, et käsu versiooni vorming saabÄrge kunagi vahetage. EZSP versiooni käsu vorming on nagu allpool:
链接 : https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。
2.2. Andmete randomiseerimine
Üksikasjalikku randomiseerimisprotsessi kirjeldatakse UG101 jaotises 4.3. Terve EZSP kaadri randomiseeritakse. Randomiseerimine on eksklusiivne või EZSP kaadri ja pseudo-juhusliku järjestuse jaoks.
Allpool on pseudojuhusliku järjestuse genereerimise algoritm.
- Rand0 = 0 × 42
- Kui Randi bit 0 on 0, on Randi+1 = randi >> 1
- Kui Randi bit 0 on 1, on Randi+1 = (randi >> 1) ^ 0xb8
2.3. Lisage juhtpõhine
Juhtimisbait on ühe baidi andmed ja see tuleks lisada kaadripeale. Vormingut on illustreeritud alloleva tabeliga:
Täiesti on 6 juhtimisbaiti. Esimesi kolme kasutatakse EZSP andmetega tavaliste raamide jaoks, sealhulgas andmed, ACK ja NAK. Viimast kolme kasutatakse ilma ühiste EZSP andmeteta, sealhulgas RST, RSTACK ja ERROR.
RST, RSTACK ja ERROR -vormingut on kirjeldatud jaotises 3.1 kuni 3.3.
2.4. Arvutage CRC
16-bitine CRC arvutatakse baitidel juhtpõhiselt andmete lõpuni. Standard CRCCCITT (G (x) = x16 + x12 + x5 + 1) lähtestatakse 0xffff. Kõige olulisem bait eelneb kõige vähem olulisele baidile (suurejoone režiim).
2.5. Baitide täidis
Nagu on kirjeldatud UG101 jaotises 4.2, leidub eriotstarbelisi reserveeritud baitväärtusi. Need väärtused leiate järgmises tabelist:
Kui need väärtused kaadris kuvatakse, tehakse andmetele erikoht. - Sisestage reserveeritud baidi ette põgenemisbait 0x7d - pöörake selle reserveeritud baidi bit5 ümber
Allpool on toodud mõned näited selle algoritmi kohta:
2.6. Lisage lõpplipp
Viimane samm on lisada kaadri lõppu lõpplipp 0x7e. Pärast seda saab andmed saata UART -pordi.
3. Framingi protsess
Kui andmed on UART -ist laekunud, peame selle dekodeerimiseks tegema lihtsalt vastupidised sammud.
4. Viited
Postiaeg: veebruar-08-2022