Om Zigbee EZSP UART

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

1. Introduktion

Silicon Labs har tilbudt en host+NCP-løsning til Zigbee gateway-design. I denne arkitektur kan værten kommunikere med NCP'en via en UART- eller SPI-grænseflade. UART bruges oftest, da det er meget enklere end SPI.

Silicon Labs har også leveret et eksempelprojekt til værtsprogrammet, som er eksempletZ3GatewayHostEksemplet kører på et Unix-lignende system. Nogle kunder ønsker måske et værtseksempel, der kan køre på et RTOS, men desværre er der ikke et RTOS-baseret værtseksempel på nuværende tidspunkt. Brugere skal udvikle deres eget værtsprogram baseret på RTOS.

Det er vigtigt at forstå UART-gatewayprotokollen, før man udvikler et brugerdefineret værtsprogram. For både UART-baseret NCP og SPI-baseret NCP bruger værten EZSP-protokollen til at kommunikere med NCP'en.EZSPer en forkortelse forEmberZnet seriel protokol, og det er defineret iUG100For UART-baseret NCP implementeres en lavere lagsprotokol til pålideligt at overføre EZSP-data over UART, det erASKEprotokol, forkortelse forAsynkron seriel værtFor yderligere oplysninger om ASH henvises tilUG101ogUG115.

Forholdet mellem EZSP og ASH kan illustreres ved hjælp af følgende diagram:

1

Dataformatet for EZSP og ASH-protokollen kan illustreres ved hjælp af følgende diagram:

2

På denne side introducerer vi processen med at frame UART-data og nogle nøglerammer, der ofte bruges i Zigbee-gatewayen.

2. Indramning

Den generelle rammeproces kan illustreres ved hjælp af følgende skema:

3

I dette diagram betyder dataene EZSP-rammen. Generelt er framingprocesserne: |Ingen|Trin|Reference|

|:-|:-|:-|

|1|Udfyld EZSP-rammen|UG100|

|2|Datarandomisering|Afsnit 4.3 af UG101|

|3|Tilføj kontrolbyten|Kapitel 2 og kapitel 3 af UG101|

|4|Beregn CRC|Afsnit 2.3 af UG101|

|5|Byte-fyldning|Afsnit 4.2 af UG101|

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

2.1. Udfyld EZSP-rammen

EZSP-rammeformatet er illustreret i kapitel 3 i UG100.

4

Vær opmærksom på, at dette format kan ændres, når SDK'et 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 NCP'enSKALarbejde 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'en være versionskommandoen. Med andre ord skal værten hente EZSP-versionen af ​​NCP'en før enhver anden kommunikation. Hvis EZSP-versionen er forskellig fra EZSP-versionen på værtsiden, skal kommunikationen afbrydes.

Det implicitte krav bag dette er, at formatet af versionskommandoen kanALDRIG ÆNDRE DIGEZSP-versionens kommandoformat er som følger:

5

Forklaringerne af parameterfeltet og formatet for versionssvaret kan findes i kapitel 4 i UG100. Parameterfeltet er EZSP-versionen af ​​værtsprogrammet. Når denne artikel er skrevet, er det version 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 sker til at udelukke 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 af randi er 0, er randi+1 = randi >> 1
  • Hvis bit 0 af randi er 1, er randi+1 = (randi >> 1) ^ 0xB8

2.3. Tilføj kontrolbyten

Kontrolbyten er én byte data og skal tilføjes til rammens hoved. Formatet er illustreret i tabellen nedenfor:

6

Der er i alt 6 typer kontrolbytes. De første tre bruges til almindelige frames med EZSP-data, herunder DATA, ACK og NAK. De sidste tre bruges uden almindelige EZSP-data, herunder RST, RSTACK og ERROR.

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

2.4. Beregn CRC'en

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 betydende byte går forud for den mindst betydende byte (big-endian-tilstand).

2.5. Byte-fyldning

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

7

Når disse værdier vises i rammen, vil dataene blive behandlet særligt. – Indsæt escape-byten 0x7D foran den reserverede byte – Vend bit5 om for 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. Deframing-processen

Når data modtages fra UART'en, skal vi blot udføre de omvendte trin for at afkode dem.

4. Referencer


Opslagstidspunkt: 8. februar 2022
WhatsApp onlinechat!