Over Zigbee EZSP UART

Auteur: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Bron: Quora

1. Inleiding

Silicon Labs heeft een host+NCP-oplossing aangeboden voor het ontwerpen van Zigbee-gateways. In deze architectuur kan de host met de NCP communiceren via een UART- of SPI-interface. Meestal wordt UART gebruikt, omdat dit veel eenvoudiger is dan SPI.

Silicon Labs heeft ook een voorbeeldproject beschikbaar gesteld voor het gastprogramma, namelijk het voorbeeld.Z3GatewayHostHet voorbeeld draait op een Unix-achtig systeem. Sommige klanten willen wellicht een host-voorbeeld dat op een RTOS kan draaien, maar helaas is er momenteel geen host-voorbeeld beschikbaar dat op een RTOS is gebaseerd. Gebruikers moeten zelf een hostprogramma ontwikkelen dat op een RTOS is gebaseerd.

Het is belangrijk om het UART-gatewayprotocol te begrijpen voordat je een aangepast hostprogramma ontwikkelt. Zowel voor UART-gebaseerde als SPI-gebaseerde NCP's gebruikt de host het EZSP-protocol om met de NCP te communiceren.EZSPis een afkorting voorEmberZnet serieel protocolen het is gedefinieerd inUG100Voor op UART gebaseerde NCP wordt een protocol op een lager niveau geïmplementeerd om EZSP-gegevens betrouwbaar via UART te verzenden, dat is hetASprotocol, een afkorting voorAsynchrone seriële hostVoor meer informatie over ASH kunt u terecht bij...UG101EnUG115.

De relatie tussen EZSP en ASH kan worden geïllustreerd met behulp van het volgende diagram:

1

Het dataformaat van het EZSP- en het ASH-protocol kan worden geïllustreerd met het volgende diagram:

2

Op deze pagina introduceren we het proces van het framen van UART-data en enkele veelgebruikte sleutelframes in Zigbee-gateways.

2. Inlijsten

Het algemene kaderproces kan worden geïllustreerd met behulp van de volgende grafiek:

3

In deze grafiek verwijzen de gegevens naar het EZSP-frame. Over het algemeen zijn de framingprocessen als volgt: |Geen|Stap|Referentie|

|:-|:-|:-|

|1|Vul het EZSP-frame|UG100|

|2|Data randomisatie|Sectie 4.3 van UG101|

|3|Voeg de besturingsbyte toe|Hoofdstuk 2 en 3 van UG101|

|4|Bereken de CRC|Sectie 2.3 van UG101|

|5|Byte Stuffing|Sectie 4.2 van UG101|

|6|Voeg de eindvlag toe|Sectie 2.4 van UG101|

2.1. Vul het EZSP-frame in.

Het EZSP-frameformaat wordt geïllustreerd in hoofdstuk 3 van UG100.

4

Let op: dit formaat kan veranderen bij een SDK-update. Wanneer het formaat verandert, geven we het een nieuw versienummer. Het meest recente EZSP-versienummer is 8 op het moment dat dit artikel wordt geschreven (EmberZnet 6.8).

Aangezien het EZSP-frameformaat kan verschillen tussen verschillende versies, is het een verplichte vereiste dat de host en NCPMOETENZe moeten met dezelfde EZSP-versie werken. Anders kunnen ze niet naar behoren communiceren.

Om dat te bereiken, moet het eerste commando tussen de host en de NCP het versiecommando zijn. Met andere woorden, de host moet de EZSP-versie van de NCP ophalen voordat er verdere communicatie plaatsvindt. Als de EZSP-versie verschilt van de EZSP-versie aan de hostzijde, moet de communicatie worden afgebroken.

De impliciete voorwaarde hierachter is dat het formaat van het versiecommando kanVERANDER NOOITHet EZSP-versiecommandoformaat ziet er als volgt uit:

5

De uitleg over het parameterveld en de opmaak van het versieantwoord is te vinden in hoofdstuk 4 van UG100. Het parameterveld is de EZSP-versie van het hostprogramma. Op het moment van schrijven is dat versie 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 volledige EZSP-frame wordt gerandomiseerd. De randomisatie bestaat uit een exclusieve-OR-bewerking tussen het EZSP-frame en een pseudo-willekeurige reeks.

Hieronder staat het algoritme voor het genereren van de pseudo-willekeurige reeks.

  • rand0 = 0×42
  • als bit 0 van randi 0 is, randi+1 = randi >> 1
  • als bit 0 van randi 1 is, randi+1 = (randi >> 1) ^ 0xB8

2.3. Voeg de besturingsbyte toe

De besturingsbyte is een gegevensbyte van één byte en moet aan het begin van het frame worden toegevoegd. Het formaat wordt geïllustreerd in de onderstaande tabel:

6

In totaal zijn er 6 soorten besturingsbytes. De eerste drie worden gebruikt voor frames met EZSP-gegevens, namelijk DATA, ACK en NAK. De laatste drie worden gebruikt zonder EZSP-gegevens, namelijk RST, RSTACK en ERROR.

De indeling van de RST-, RSTACK- en ERROR-bestanden wordt beschreven in paragraaf 3.1 tot en met 3.3.

2.4. Bereken de CRC

Een 16-bits CRC wordt berekend op de bytes vanaf de besturingsbyte tot het einde van de data. 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 Stuffing

Zoals beschreven in paragraaf 4.2 van UG101, zijn er enkele gereserveerde byte-waarden die voor speciale doeleinden worden gebruikt. Deze waarden zijn te vinden in de volgende tabel:

7

Wanneer deze waarden in het frame verschijnen, worden de gegevens op een speciale manier verwerkt. – Voeg de escape-byte 0x7D in vóór de gereserveerde byte – Keer bit 5 van die gereserveerde byte om

Hieronder volgen 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. Proces van het loskoppelen van kaders

Wanneer we gegevens via de UART ontvangen, hoeven we alleen maar de stappen in omgekeerde volgorde uit te voeren om ze te decoderen.

4. Referenties


Geplaatst op: 8 februari 2022
WhatsApp online chat!