Auteur: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Van: Quora
1. Inleiding
Silicon Labs heeft een host+NCP-oplossing aangeboden voor het ontwerp van de Zigbee-gateway.In deze architectuur kan de host communiceren met de NCP via de UART- of SPI-interface.Meestal wordt UART gebruikt omdat het veel eenvoudiger is dan SPI.
Silicon Labs heeft ook een voorbeeldproject voor het hostprogramma geleverd, namelijk het voorbeeldZ3GatewayHost
.Het voorbeeld draait op een Unix-achtig systeem.Sommige klanten willen misschien een host-sample die op een RTOS kan draaien, maar helaas is er voorlopig geen op RTOS gebaseerd host-sample.Gebruikers moeten hun eigen hostprogramma ontwikkelen op basis van RTOS.
Het is belangrijk om het UART-gatewayprotocol te begrijpen voordat u een aangepast hostprogramma ontwikkelt.Voor zowel op UART gebaseerde NCP als op SPI gebaseerde NCP gebruikt de host het EZSP-protocol om met de NCP te communiceren.EZSPis een afkorting voorEmberZnet serieel protocol, en het is gedefinieerd inUG100.Voor op UART gebaseerde NCP wordt een lager protocol geïmplementeerd om EZSP-gegevens betrouwbaar over UART te transporteren, dat is deASprotocol, afkorting vanAsynchrone seriële host.Voor meer informatie over ASH verwijzen wij u naarUG101EnUG115.
De relatie tussen EZSP en ASH kan worden geïllustreerd aan de hand van het volgende diagram:
Het gegevensformaat van het EZSP- en het ASH-protocol kan worden geïllustreerd aan de hand van het volgende diagram:
Op deze pagina introduceren we het proces van het inlijsten van de UART-gegevens en enkele sleutelframes die vaak worden gebruikt in de Zigbee-gateway.
2. Inlijsten
Het algemene frameringsproces kan worden geïllustreerd aan de hand van het volgende diagram:
In dit diagram betekenen de gegevens het EZSP-frame.Over het algemeen zijn de frameprocessen: |No|Step|Reference|
|:-|:-|:-|
|1|Vul het EZSP-frame|UG100|
|2|Gegevensrandomisatie|Paragraaf 4.3 van UG101|
|3|Voeg de besturingsbyte|Chap2 en Chap3 van UG101| toe
|4|Bereken de CRC|Paragraaf 2.3 van UG101|
|5|Byte-opvulling|Sectie 4.2 van UG101|
|6|Voeg de eindvlag toe|Paragraaf 2.4 van UG101|
2.1.Vul het EZSP-frame
Het EZSP-frameformaat wordt geïllustreerd in hoofdstuk 3 van UG100.
Houd er rekening mee dat dit formaat kan veranderen wanneer de SDK wordt geüpgraded.Wanneer het formaat verandert, geven wij het een nieuw versienummer.Het nieuwste EZSP-versienummer is 8 op het moment dat dit artikel wordt geschreven (EmberZnet 6.8).
Omdat het EZSP-frameformaat tussen verschillende versies kan verschillen, is er een verplichte vereiste dat de host en NCPMOETENwerken met dezelfde EZSP-versie.Anders kunnen ze niet communiceren zoals verwacht.
Om dat te bereiken moet het eerste commando tussen de host en het NCP het versiecommando zijn.Met andere woorden: de host moet de EZSP-versie van het NCP ophalen voordat enige andere communicatie plaatsvindt.Als de EZSP-versie verschilt van de EZSP-versie van de hostzijde, moet de communicatie worden afgebroken.
De impliciete vereiste hierachter is dat het formaat van de versieopdracht dat wel kanVERANDER NOOIT.Het opdrachtformaat van de EZSP-versie ziet er als volgt uit:
链接:https://zhuanlan.zhihu.com/p/339700391
Ik bedoel: 知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2.Randomisatie van gegevens
Het gedetailleerde randomisatieproces wordt beschreven in paragraaf 4.3 van UG101.Het hele EZSP-frame wordt gerandomiseerd.De randomisatie vindt plaats door exclusieve OF het EZSP-frame en een pseudo-willekeurige reeks.
Hieronder ziet u het algoritme voor het genereren van de pseudo-willekeurige reeks.
- rand0 = 0×42
- als bit 0 van randi 0 is, dan is randi+1 = randi >> 1
- als bit 0 van randi 1 is, randi+1 = (randi >> 1) ^ 0xB8
2.3.Voeg de controlebyte toe
De besturingsbyte bestaat uit gegevens van één byte en moet aan de kop van het frame worden toegevoegd.Het formaat wordt geïllustreerd met de onderstaande tabel:
In totaal zijn er 6 soorten besturingsbytes.De eerste drie worden gebruikt voor algemene frames met EZSP-gegevens, waaronder DATA, ACK en NAK.De laatste drie worden gebruikt zonder gemeenschappelijke EZSP-gegevens, waaronder RST, RSTACK en ERROR.
Het formaat van RST, RSTACK en ERROR wordt beschreven in paragraaf 3.1 tot 3.3.
2.4.Bereken de CRC
Een 16-bits CRC wordt berekend op basis van bytes vanaf de besturingsbyte tot het einde van de gegevens.De standaard CRCCCITT (g(x) = x16 + x12 + x5 + 1) wordt geïnitialiseerd op 0xFFFF.De meest significante byte gaat vooraf aan de minst significante byte (big-endian-modus).
2.5.Byte-vulling
Zoals beschreven in sectie 4.2 van UG101, zijn er enkele gereserveerde bytewaarden die voor speciale doeleinden worden gebruikt.Deze waarden zijn te vinden in de volgende tabel:
Wanneer deze waarden in het frame verschijnen, wordt er een speciale behandeling op de gegevens uitgevoerd.– Plaats de escape-byte 0x7D vóór de gereserveerde byte – Keer bit5 van die gereserveerde byte om
Hieronder staan enkele voorbeelden van dit algoritme:
2.6.Voeg de eindvlag toe
De laatste stap is het toevoegen van de eindvlag 0x7E aan het einde van het frame.Daarna kunnen de gegevens naar de UART-poort worden verzonden.
3. Deframingproces
Wanneer gegevens van de UART worden ontvangen, hoeven we alleen maar de omgekeerde stappen uit te voeren om deze te decoderen.
4. Referenties
Posttijd: 08-02-2022