Autorius:TorchIoTBootCamp
Nuoroda: https://zhuanlan.zhihu.com/p/339700391
Nuo:Quora
1. Įvadas
„Silicon Labs“ pasiūlė „host+NCP“ sprendimą „Zigbee“ šliuzo projektavimui. Šioje architektūroje pagrindinis kompiuteris gali bendrauti su NCP per UART arba SPI sąsają. Dažniausiai naudojamas UART, nes jis yra daug paprastesnis nei SPI.
„Silicon Labs“ taip pat pateikė pavyzdinį priimančiosios programos projektą, kuris yra pavyzdysZ3GatewayHost
Pavyzdys veikia „Unix“ tipo sistemoje. Kai kurie klientai gali norėti pagrindinio kompiuterio pavyzdžio, kuris galėtų veikti RTOS aplinkoje, bet, deja, šiuo metu nėra RTOS pagrindu sukurto pagrindinio kompiuterio pavyzdžio. Vartotojai turi sukurti savo pagrindinio kompiuterio programą, pagrįstą RTOS.
Prieš kuriant pritaikytą pagrindinio kompiuterio programą, svarbu suprasti UART šliuzo protokolą. Tiek UART, tiek SPI pagrindu veikiančiuose NCP, pagrindinis kompiuteris naudoja EZSP protokolą bendravimui su NCP.EZSPyra trumpinys nuo„EmberZnet“ nuoseklusis protokolas, ir jis apibrėžtasUG100UART pagrindu veikiančiam NCP yra įdiegtas žemesnio lygio protokolas, skirtas patikimam EZSP duomenų perdavimui per UART, t. y.PELENAIprotokolas, trumpinys nuoAsinchroninis nuoseklusis serverisDaugiau informacijos apie ASH rasiteUG101irUG115.
EZSP ir ASH ryšį galima iliustruoti šia diagrama:
EZSP ir ASH protokolo duomenų formatą galima iliustruoti šia diagrama:
Šiame puslapyje pristatysime UART duomenų kadravimo procesą ir kai kuriuos raktų kadrus, kurie dažnai naudojami „Zigbee“ šliuzuose.
2. Įrėminimas
Bendrą rėminimo procesą galima iliustruoti šia diagrama:
Šioje diagramoje duomenys reiškia EZSP kadrą. Apskritai kadravimo procesai yra šie: |Ne|Žingsnis|Nuoroda|
|:-|:-|:-|:-|
|1|Užpildykite EZSP rėmelį|UG100|
|2|Duomenų atsitiktinė atranka|UG101 4.3 skyrius|
|3|Pridėti UG101 valdymo baitą|2 ir 3 skyrius|
|4|Apskaičiuokite CRC|UG101 2.3 skirsnis|
|5|Baitų užpildymas|UG101 4.2 skyrius|
|6|Pridėti pabaigos vėliavėlę|UG101 2.4 skirsnis|
2.1. Užpildykite EZSP rėmelį
EZSP kadrų formatas pavaizduotas UG100 3 skyriuje.
Atkreipkite dėmesį, kad šis formatas gali pasikeisti atnaujinus SDK. Kai formatas pasikeis, suteiksime jam naują versijos numerį. Naujausia EZSP versijos numeris šio straipsnio rašymo metu yra 8 („EmberZnet 6.8“).
Kadangi EZSP kadrų formatas skirtingose versijose gali skirtis, privaloma, kad pagrindinis kompiuteris ir NCPPRIVALOMAveikia su ta pačia EZSP versija. Priešingu atveju jie negali bendrauti taip, kaip tikėtasi.
Norint tai pasiekti, pirmoji komanda tarp pagrindinio kompiuterio ir NCP turi būti versijos komanda. Kitaip tariant, pagrindinis kompiuteris prieš bet kokį kitą ryšį turi gauti NCP EZSP versiją. Jei EZSP versija skiriasi nuo pagrindinio kompiuterio EZSP versijos, ryšį reikia nutraukti.
Numanomas reikalavimas yra tas, kad versijos komandos formatas gali būtiNIEKADA NESIKEISKITEEZSP versijos komandos formatas yra toks:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注愘凂
2.2. Duomenų atsitiktinė atranka
Išsamus atsitiktinės atrankos procesas aprašytas UG101 4.3 skyriuje. Visas EZSP kadras bus atsitiktinai parinktas. Atsitiktinė atranka atliekama taikant išimtį ARBA EZSP kadrui ir pseudoatsitiktinei sekai.
Žemiau pateikiamas pseudoatsitiktinės sekos generavimo algoritmas.
- rand0 = 0 × 42
- jei randi 0 bitas yra 0, randi+1 = randi >> 1
- jei randi 0 bitas yra 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Pridėkite valdymo baitą
Valdymo baitas yra vieno baito duomenų ir turėtų būti pridėtas prie kadro pradžios. Formatas iliustruotas toliau pateiktoje lentelėje:
Iš viso yra 6 valdymo baitų rūšys. Pirmieji trys naudojami bendriems kadrams su EZSP duomenimis, įskaitant DATA, ACK ir NAK. Paskutiniai trys naudojami be bendrų EZSP duomenų, įskaitant RST, RSTACK ir ERROR.
RST, RSTACK ir ERROR formatai aprašyti 3.1–3.3 skyriuose.
2.4. Apskaičiuokite CRC
16 bitų CRC skaičiuojamas baitams nuo valdymo baito iki duomenų pabaigos. Standartinis CRCCCITT (g(x) = x16 + x12 + x5 + 1) inicijuojamas į 0xFFFF. Reikšmingiausias baitas eina prieš mažiausiai reikšmingą baitą (big-endian režimas).
2.5. Baitų užpildymas
Kaip aprašyta UG101 4.2 skyriuje, kai kurios rezervuotos baitų reikšmės naudojamos specialiems tikslams. Šias reikšmes galite rasti šioje lentelėje:
Kai šios reikšmės atsiranda kadre, duomenys apdorojami specialiai. – Prieš rezervuotą baitą įterpiamas praėjimo baitas 0x7D. – Apverčiamas to rezervuoto baito 5-asis bitas.
Žemiau pateikiami keli šio algoritmo pavyzdžiai:
2.6. Pridėti pabaigos vėliavėlę
Paskutinis žingsnis – pridėti galinę vėliavėlę 0x7E prie kadro galo. Po to duomenis galima siųsti į UART prievadą.
3. Kadrų išėmimo procesas
Kai duomenys gaunami iš UART, mums tereikia atlikti atvirkštinius veiksmus, kad juos dekoduotume.
4. Nuorodos
Įrašo laikas: 2022 m. vasario 8 d.