Om Zigbee EZSP UART

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

1. Innledning

Silicon Labs har tilbudt en host+NCP-løsning for Zigbee-gatewaydesign. I denne arkitekturen kan verten kommunisere med NCP-en via UART- eller SPI-grensesnitt. Vanligvis brukes UART, da det er mye enklere enn SPI.

Silicon Labs har også levert et eksempelprosjekt for vertsprogrammet, som er eksempeletZ3GatewayHostEksemplet kjører på et Unix-lignende system. Noen kunder ønsker kanskje et vertseksempel som kan kjøre på et RTOS, men dessverre finnes det ikke noe RTOS-basert vertseksempel for øyeblikket. Brukere må utvikle sitt eget vertsprogram basert på RTOS.

Det er viktig å forstå UART-gatewayprotokollen før man utvikler et tilpasset vertsprogram. For både UART-baserte NCP-er og SPI-baserte NCP-er bruker verten EZSP-protokollen for å kommunisere med NCP-en.EZSPer en forkortelse forEmberZnet seriell protokoll, og det er definert iUG100For UART-basert NCP implementeres en lavere lagsprotokoll for å overføre EZSP-data pålitelig over UART, det erASKEprotokoll, forkortelse forAsynkron seriell vertFor mer informasjon om ASH, seUG101ogUG115.

Forholdet mellom EZSP og ASH kan illustreres med følgende diagram:

1

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

2

På denne siden vil vi introdusere prosessen med å lage UART-data og noen nøkkelrammer som ofte brukes i Zigbee-gatewayen.

2. Innramming

Den generelle innrammingsprosessen kan illustreres med følgende diagram:

3

I dette diagrammet betyr dataene EZSP-rammen. Generelt er rammeprosessene: |Ingen|Trinn|Referanse|

|:-|:-|:-|

|1|Fyll EZSP-rammen|UG100|

|2|Datarandomisering|Avsnitt 4.3 av UG101|

|3|Legg til kontrollbyten|Kap. 2 og kap. 3 av UG101|

|4|Beregn CRC|Del 2.3 av UG101|

|5|Bytefylling|Avsnitt 4.2 av UG101|

|6|Legg til sluttflagget|Del 2.4 av UG101|

2.1. Fyll EZSP-rammen

EZSP-rammeformatet er illustrert i kapittel 3 av UG100.

4

Vær oppmerksom på at dette formatet kan endres når SDK-en oppgraderes. Når formatet endres, vil vi gi det et nytt versjonsnummer. Det nyeste EZSP-versjonsnummeret er 8 når denne artikkelen er skrevet (EmberZnet 6.8).

Ettersom EZSP-rammeformatet kan variere mellom ulike versjoner, er det et obligatorisk krav at verten og NCP-enfungere med samme EZSP-versjon. Ellers kan de ikke kommunisere som forventet.

For å oppnå dette, må den første kommandoen mellom verten og NCP-en være version-kommandoen. Med andre ord, verten må hente EZSP-versjonen av NCP-en før noen annen kommunikasjon. Hvis EZSP-versjonen er forskjellig fra EZSP-versjonen på vertssiden, må kommunikasjonen avbrytes.

Det implisitte kravet bak dette er at formatet til versjonskommandoen kanALDRI ENDREEZSP-versjonskommandoformatet er som følger:

5

Forklaringene av parameterfeltet og formatet på versjonssvaret finnes i kapittel 4 i UG100. Parameterfeltet er EZSP-versjonen av vertsprogrammet. Når denne artikkelen er skrevet, er det versjon 8.
7
Av: TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请泤儎凂

2.2. Datarandomisering

Den detaljerte randomiseringsprosessen er beskrevet i avsnitt 4.3 i UG101. Hele EZSP-rammen vil bli randomisert. Randomiseringen skjer til å ekskludere ELLER EZSP-rammen og en pseudo-tilfeldig sekvens.

Nedenfor er algoritmen for å generere den pseudo-tilfeldige sekvensen.

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

2.3. Legg til kontrollbyten

Kontrollbyten er én byte data, og bør legges til rammehodet. Formatet er illustrert med tabellen nedenfor:

6

Det finnes totalt 6 typer kontrollbyte. De tre første brukes for vanlige rammer med EZSP-data, inkludert DATA, ACK og NAK. De tre siste brukes uten vanlige EZSP-data, inkludert RST, RSTACK og ERROR.

Formatene til RST, RSTACK og ERROR er beskrevet i avsnitt 3.1 til 3.3.

2.4. Beregn CRC

En 16-bit CRC beregnes på byte fra kontrollbyten til slutten av dataene. Standard CRCCCITT (g(x) = x16 + x12 + x5 + 1) initialiseres til 0xFFFF. Den mest signifikante byten går foran den minst signifikante byten (big-endian-modus).

2.5. Bytefylling

Som beskrevet i avsnitt 4.2 i UG101, finnes det noen reserverte byteverdier som brukes til spesielle formål. Disse verdiene finnes i følgende tabell:

7

Når disse verdiene vises i rammen, vil dataene bli behandlet spesielt. – Sett inn escape-byten 0x7D foran den reserverte byten – Reverser bit5 til den reserverte byten

Nedenfor er noen eksempler på denne algoritmen:

8

2.6. Legg til sluttflagget

Det siste trinnet er å legge til sluttflagget 0x7E på slutten av rammen. Etter det kan dataene sendes til UART-porten.

3. Deframing-prosess

Når data mottas fra UART-en, trenger vi bare å gjøre de omvendte trinnene for å dekode dem.

4. Referanser


Publisert: 08.02.2022
WhatsApp online chat!