Skrywer: 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 UART- of SPI-koppelvlak. Mees algemeen word UART gebruik aangesien dit baie eenvoudiger is as SPI.
Silicon Labs het ook 'n voorbeeldprojek vir die gasheerprogram verskaf, wat die voorbeeld isZ3GatewayHost
. Die monster loop op 'n Unix-agtige stelsel. Sommige kliënte wil dalk 'n gasheermonster hê wat op 'n RTOS kan loop, maar ongelukkig is daar tans geen RTOS-gebaseerde gasheermonster nie. Gebruikers moet hul eie gasheerprogram ontwikkel gebaseer op RTOS.
Dit is belangrik om die UART-poortprotokol te verstaan voordat u 'n pasgemaakte gasheerprogram ontwikkel. Vir beide UART-gebaseerde NCP en SPI-gebaseerde NCP, gebruik die gasheer die EZSP-protokol om met die NCP te kommunikeer.EZSPis kort virEmberZnet Serial Protocol, en dit word gedefinieer inUG100. Vir UART-gebaseerde NCP word 'n laerlaagprotokol geïmplementeer om EZSP-data betroubaar oor UART te dra, dit is dieASprotokol, kort virAsynchrone reeksgasheer. Vir 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 raamwerk van die UART-data en 'n paar sleutelrame bekendstel wat gereeld in Zigbee-poort gebruik word.
2. Raamwerk
Die algemene raamproses kan deur die volgende grafiek geïllustreer word:
In hierdie grafiek beteken die data die EZSP-raam. Oor die algemeen is die raamprosesse: |Nee|Stap|Verwysing|
|:-|:-|:-|
|1|Vul die EZSP-raam|UG100|
|2|Data-randomisering|Afdeling 4.3 van UG101|
|3|Voeg die beheergreep by|Hoofstuk2 en Hoofstuk3 van UG101|
|4|Bereken die CRC|Afdeling 2.3 van UG101|
|5|Briefvulsel|Afdeling 4.2 van UG101|
|6|Voeg die eindvlag by|Afdeling 2.4 van UG101|
2.1. Vul die EZSP-raam
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 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. As 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 NIE. Die EZSP weergawe opdrag formaat is soos hieronder:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注昄凂
2.2. Data Randomisering
Die gedetailleerde ewekansige proses word beskryf in afdeling 4.3 van UG101. Die hele EZSP-raam sal ewekansig gemaak word. Die randomisering is na eksklusiewe-OF die EZSP-raam en 'n pseudo-ewekansige volgorde.
Hieronder is die algoritme om die pseudo-ewekansige volgorde te genereer.
- rand0 = 0×42
- as bietjie 0 van randi 0 is, randi+1 = randi >> 1
- as bietjie 0 van randi 1 is, randi+1 = (randi >> 1) ^ 0xB8
2.3. Voeg die beheergreep by
Die beheergreep is 'n eengreepdata en moet by die kop van die raam gevoeg word. Die formaat word geïllustreer met die tabel hieronder:
In totaal is daar 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 CRC
'n 16-bis CRC word bereken op grepe vanaf die beheergreep tot aan 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 (groot-endian-modus).
2.5. Byte Stuffing
Soos beskryf in afdeling 4.2 van UG101, is daar 'n paar gereserveerde greepwaardes 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 ontsnapgreep 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 te voeg. Daarna kan die data na die UART-poort gestuur word.
3. Ontraamproses
Wanneer data van die UART ontvang word, hoef ons net die omgekeerde stappe te doen om dit te dekodeer.
4. Verwysings
Postyd: Feb-08-2022