Om Zigbee EZSP UART

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

1. Introduksjon

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

Silicon Labs har også levert et eksempelprosjekt for vertsprogrammet, som er prøvenZ3GatewayHost. Prøven kjører på et Unix-lignende system. Noen kunder vil kanskje ha en vertsprøve som kan kjøres på en RTOS, men dessverre er det ingen RTOS-basert vertsprøve foreløpig. Brukere må utvikle sitt eget vertsprogram basert på RTOS.

Det er viktig å forstå UART-gatewayprotokollen før du utvikler et tilpasset vertsprogram. For både UART-basert NCP og SPI-basert NCP, bruker verten EZSP-protokollen for å kommunisere med NCP.EZSPer forkortelse forEmberZnet Serial Protocol, og det er definert iUG100. For UART-basert NCP implementeres en lavere lagprotokoll for å overføre EZSP-data pålitelig over UART, det erASKEprotokoll, forkortelse forAsynkron seriell vert. For 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 å ramme UART-dataene 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 innrammingsprosessene: |Nei|Trinn|Referanse|

|:-|:-|:-|

|1|Fyll EZSP-rammen|UG100|

|2|Data randomisering|Seksjon 4.3 av UG101|

|3|Legg til kontrollbyte|kap2 og kap3 av UG101|

|4|Beregn CRC|Seksjon 2.3 av UG101|

|5|Byte Stuffing|Seksjon 4.2 av UG101|

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

2.1. Fyll EZSP-rammen

EZSP-rammeformatet er illustrert i kapittel 3 i 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 siste EZSP-versjonsnummeret er 8 når denne artikkelen er skrevet (EmberZnet 6.8).

Siden EZSP-rammeformatet kan være forskjellig mellom ulike versjoner, er det et obligatorisk krav at verten og NCParbeid med samme EZSP-versjon. Ellers kan de ikke kommunisere som forventet.

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

Det implisitte kravet bak dette er at formatet til versjonskommandoen kanALDRI ENDRE. EZSP-versjonskommandoformatet er som nedenfor:

5

Forklaringene til parameterfeltet og formatet til versjonssvaret finner du i kapittel 4 i UG100. Parameterfeltet er EZSP-versjonen av vertsprogrammet. Når denne artikkelen er skrevet, er den 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 er til eksklusiv-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, randi+1 = randi >> 1
  • hvis bit 0 av randi er 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Legg til kontrollbyte

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

6

Totalt er det 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.

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

2.4. Beregn CRC

En 16-bits 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. Byte Stuffing

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

7

Når disse verdiene vises i rammen, vil det bli gjort en spesiell behandling av dataene. – Sett inn escape-byten 0x7D foran den reserverte byten – Reverser bit5-en 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. De-framing prosess

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

4. Referanser


Innleggstid: 08-02-2022
WhatsApp nettprat!