Outeur:TorchIoTBootCamp
Skakel: https://zhuanlan.zhihu.com/p/339700391
Van: Quora
1. Inleiding
Silicon Labs het 'n gasheer+NCP-oplossing vir Zigbee-poortontwerp aangebied. In hierdie argitektuur kan die gasheer met die NCP kommunikeer deur 'n UART- of SPI-koppelvlak. Meestal word UART gebruik omdat dit baie eenvoudiger as SPI is.
Silicon Labs het ook 'n voorbeeldprojek vir die gasheerprogram verskaf, wat die voorbeeld isZ3GatewayHost
Die voorbeeld loop op 'n Unix-agtige stelsel. Sommige kliënte wil dalk 'n gasheervoorbeeld hê wat op 'n RTOS kan loop, maar ongelukkig is daar tans geen RTOS-gebaseerde gasheervoorbeeld nie. Gebruikers moet hul eie gasheerprogram ontwikkel gebaseer op RTOS.
Dit is belangrik om die UART-gatewayprotokol te verstaan voordat 'n aangepaste gasheerprogram ontwikkel word. Vir beide UART-gebaseerde NCP en SPI-gebaseerde NCP gebruik die gasheer die EZSP-protokol om met die NCP te kommunikeer.EZSPis kort virEmberZnet Seriële Protokol, en dit word gedefinieer inUG100Vir UART-gebaseerde NCP word 'n laerlaagprotokol geïmplementeer om EZSP-data betroubaar oor UART te dra, dit is dieASHprotokol, afkorting virAsinchrone seriële gasheerVir meer besonderhede oor ASH, verwys asseblief naUG101enUG115.
Die verband tussen EZSP en ASH kan deur die volgende diagram geïllustreer word:
Die dataformaat van die EZSP en die ASH-protokol kan deur die volgende diagram geïllustreer word:
Op hierdie bladsy sal ons die proses van die raamwerk van die UART-data en 'n paar sleutelrame wat gereeld in Zigbee-gateway gebruik word, bekendstel.
2. Raamwerk
Die algemene raamwerkproses kan deur die volgende tabel geïllustreer word:
In hierdie grafiek beteken die data die EZSP-raam. Oor die algemeen is die raamprosesse: |Geen|Stap|Verwysing|
|:-|:-|:-|
|1|Vul die EZSP-raamwerk|UG100|
|2|Data-randomisering|Afdeling 4.3 van UG101|
|3|Voeg die Beheergreep|Hoofstuk 2 en Hoofstuk 3 van UG101 by|
|4|Bereken die KVK|Afdeling 2.3 van UG101|
|5|Greepvulsel|Afdeling 4.2 van UG101|
|6|Voeg die Eindvlaggie by|Afdeling 2.4 van UG101|
2.1. Vul die EZSP-raamwerk in
Die EZSP-raamformaat word in Hoofstuk 3 van UG100 geïllustreer.
Let daarop dat hierdie formaat kan verander wanneer die SDK opgradeer. Wanneer die formaat verander, sal ons dit 'n nuwe weergawenommer gee. Die nuutste EZSP-weergawenommer is 8 wanneer hierdie artikel geskryf word (EmberZnet 6.8).
Aangesien die EZSP-raamformaat tussen verskillende weergawes kan verskil, is daar 'n verpligte vereiste dat die gasheer en NCPMOETwerk met dieselfde EZSP-weergawe. Andersins kan hulle nie soos verwag kommunikeer nie.
Om dit te bereik, moet die eerste opdrag tussen die gasheer en die NCP die weergawe-opdrag wees. Met ander woorde, die gasheer moet die EZSP-weergawe van die NCP herwin voor enige ander kommunikasie. Indien die EZSP-weergawe verskil van die EZSP-weergawe van die gasheerkant, moet die kommunikasie gestaak word.
Die implisiete vereiste hieragter is dat die formaat van die weergawe-opdrag kanMOET NOOIT VERANDER NIEDie EZSP-weergawe-opdragformaat is soos volg:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注昄凂
2.2. Data-randomisering
Die gedetailleerde ewekansige proses word in afdeling 4.3 van UG101 beskryf. Die hele EZSP-raamwerk sal gerandomiseer word. Die ewekansige bepaling is om die EZSP-raamwerk en 'n pseudo-ewekansige reeks uit te sluit OF te gebruik.
Hieronder is die algoritme vir die generering van die pseudo-ewekansige reeks.
- rand0 = 0×42
- as bit 0 van randi 0 is, dan is randi+1 = randi >> 1
- as bit 0 van randi 1 is, is randi+1 = (randi >> 1) ^ 0xB8
2.3. Voeg die Beheergreep by
Die beheergreep is eengreepsdata en moet by die kop van die raam gevoeg word. Die formaat word met die tabel hieronder geïllustreer:
Daar is altesaam 6 soorte beheergrepe. Die eerste drie word gebruik vir algemene rame met EZSP-data, insluitend DATA, ACK en NAK. Die laaste drie word gebruik sonder algemene EZSP-data, insluitend RST, RSTACK en ERROR.
Die formaat van die RST, RSTACK en ERROR word in afdeling 3.1 tot 3.3 beskryf.
2.4. Bereken die KVK
'n 16-bis CRC word bereken op grepe vanaf die beheergreep tot die einde van die data. Die standaard CRCCCITT (g(x) = x16 + x12 + x5 + 1) word geïnisialiseer na 0xFFFF. Die mees beduidende greep gaan die minste beduidende greep vooraf (big-endian modus).
2.5. Greepvulsel
Soos beskryf in afdeling 4.2 van UG101, is daar 'n paar gereserveerde bytewaardes wat vir spesiale doeleindes gebruik word. Hierdie waardes kan in die volgende tabel gevind word:
Wanneer hierdie waardes in die raam verskyn, sal 'n spesiale behandeling aan die data gedoen word. – Voeg die ontsnappingsgreep 0x7D voor die gereserveerde greep in – Keer die bit5 van daardie gereserveerde greep om
Hieronder is 'n paar voorbeelde van hierdie algoritme:
2.6. Voeg die eindvlag by
Die laaste stap is om die eindvlag 0x7E aan die einde van die raam by te voeg. Daarna kan die data na die UART-poort gestuur word.
3. De-raamproses
Wanneer data van die UART ontvang word, hoef ons net die omgekeerde stappe te doen om dit te dekodeer.
4. Verwysings
Plasingstyd: 8 Februarie 2022