Om Zigbee EZSP UART

Forfatter: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Fra: Quora

1. Introduktion

Silicon Labs har tilbudt en vært+NCP-løsning til Zigbee-gatewaydesign.I denne arkitektur kan værten kommunikere med NCP'en via UART- eller SPI-interface.Oftest bruges UART, da det er meget enklere end SPI.

Silicon Labs har også leveret et prøveprojekt til værtsprogrammet, som er prøvenZ3GatewayHost.Prøven kører på et Unix-lignende system.Nogle kunder vil måske have en værtsprøve, som kan køre på en RTOS, men desværre er der ingen RTOS-baseret værtsprøve i øjeblikket.Brugere skal udvikle deres eget værtsprogram baseret på RTOS.

Det er vigtigt at forstå UART-gateway-protokollen, før du udvikler et tilpasset værtsprogram.For både UART-baseret NCP og SPI-baseret NCP bruger værten EZSP-protokollen til at kommunikere med NCP.EZSPer en forkortelse forEmberZnet seriel protokol, og det er defineret iUG100.For UART-baseret NCP implementeres en lavere lag-protokol til at overføre EZSP-data pålideligt over UART, det erASKEprotokol, forkortelse forAsynkron seriel vært.For flere detaljer om ASH, se venligstUG101ogUG115.

Forholdet mellem EZSP og ASH kan illustreres ved følgende diagram:

1

Dataformatet for EZSP og ASH-protokollen kan illustreres med følgende diagram:

2

På denne side vil vi introducere processen med indramning af UART-data og nogle nøglerammer, som ofte bruges i Zigbee-gateway.

2. Indramning

Den generelle rammeproces kan illustreres ved følgende diagram:

3

I dette diagram betyder dataene EZSP-rammen.Generelt er rammeprocesserne: |Nej|Trin|Reference|

|:-|:-|:-|

|1|Fyld EZSP-rammen|UG100|

|2|Datarandomisering|Afsnit 4.3 i UG101|

|3|Tilføj kontrolbyten|Kapitel2 og Kap3 af UG101|

|4|Beregn CRC|Afsnit 2.3 i UG101|

|5|Byte Stuffing|Afsnit 4.2 af UG101|

|6|Tilføj slutflaget|Afsnit 2.4 af UG101|

2.1.Fyld EZSP-rammen

EZSP-rammeformatet er illustreret i kapitel 3 i UG100.

4

Vær opmærksom på, at dette format kan ændre sig, når SDK'en opgraderes.Når formatet ændres, giver vi det et nyt versionsnummer.Det seneste EZSP-versionsnummer er 8, når denne artikel er skrevet (EmberZnet 6.8).

Da EZSP-rammeformatet kan være forskelligt mellem forskellige versioner, er der et obligatorisk krav om, at værten og NCPSKALarbejde med den samme EZSP-version.Ellers kan de ikke kommunikere som forventet.

For at opnå dette skal den første kommando mellem værten og NCP være versionskommandoen.Med andre ord skal værten hente EZSP-versionen af ​​NCP'en før enhver anden kommunikation.Hvis EZSP-versionen er anderledes end EZSP-versionen af ​​værtssiden, skal kommunikationen afbrydes.

Det implicitte krav bag dette er, at formatet på versionskommandoen kanFORANDRING ALDRIG.EZSP-versionens kommandoformat er som nedenfor:

5

Forklaringerne af parameterfeltet og formatet af versionsvaret kan findes i kapitel 4 i UG100.Parameterfeltet er EZSP-versionen af ​​værtsprogrammet.Når denne artikel er skrevet, er det 8.
7
Af: TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请泤儎凂

2.2.Datarandomisering

Den detaljerede randomiseringsproces er beskrevet i afsnit 4.3 i UG101.Hele EZSP-rammen vil blive randomiseret.Randomiseringen er til eksklusiv-ELLER EZSP-rammen og en pseudo-tilfældig sekvens.

Nedenfor er algoritmen til at generere den pseudo-tilfældige sekvens.

  • rand0 = 0×42
  • hvis bit 0 i randi er 0, randi+1 = randi >> 1
  • hvis bit 0 i randi er 1, randi+1 = (randi >> 1) ^ 0xB8

2.3.Tilføj kontrolbyten

Kontrolbyten er data på én byte og bør tilføjes til rammens hoved.Formatet er illustreret med nedenstående tabel:

6

I alt er der 6 slags kontrolbytes.De første tre bruges til almindelige rammer med EZSP-data, inklusive DATA, ACK og NAK.De sidste tre bruges uden almindelige EZSP-data, inklusive RST, RSTACK og ERROR.

Formatet af RST, RSTACK og ERROR er beskrevet i afsnit 3.1 til 3.3.

2.4.Beregn CRC

En 16-bit CRC beregnes på bytes fra kontrolbyten til slutningen af ​​dataene.Standard CRCCCITT (g(x) = x16 + x12 + x5 + 1) initialiseres til 0xFFFF.Den mest signifikante byte går forud for den mindst signifikante byte (big-endian mode).

2.5.Byte Stuffing

Som beskrevet i afsnit 4.2 i UG101 er der nogle reserverede byteværdier, der bruges til specielle formål.Disse værdier kan findes i følgende tabel:

7

Når disse værdier vises i rammen, vil der blive foretaget en særlig behandling af dataene.– Indsæt escape-byten 0x7D foran den reserverede byte – Vend om på bit5 af den reserverede byte

Nedenfor er nogle eksempler på denne algoritme:

8

2.6.Tilføj slutflaget

Det sidste trin er at tilføje slutflaget 0x7E til slutningen af ​​rammen.Derefter kan dataene sendes til UART-porten.

3. De-framing proces

Når data modtages fra UART, skal vi bare gøre de omvendte trin for at afkode dem.

4. Referencer


Indlægstid: 08-02-2022
WhatsApp online chat!