Over Zigbee EZSP UART

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:

1

Het gegevensformaat van het EZSP- en het ASH-protocol kan worden geïllustreerd aan de hand van het volgende diagram:

2

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:

3

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.

4

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:

5

De uitleg van het parameterveld en het formaat van het versieantwoord kunt u vinden in hoofdstuk 4 van UG100.Het parameterveld is de EZSP-versie van het hostprogramma.Wanneer dit artikel wordt geschreven, zijn het er 8.
7
Bijvoorbeeld: TorchIoTBootCamp
链接: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:

6

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:

7

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:

8

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
WhatsApp Onlinechat!