Om Zigbee EZSP UART

Författare: TorchIoTBootCamp
Länk: https://zhuanlan.zhihu.com/p/339700391
Från: Quora

1. Introduktion

Silicon Labs har erbjudit en host+NCP-lösning för Zigbee-gatewaydesign. I denna arkitektur kan värden kommunicera med NCP:n via UART- eller SPI-gränssnitt. Vanligtvis används UART eftersom det är mycket enklare än SPI.

Silicon Labs har också tillhandahållit ett exempelprojekt för värdprogrammet, vilket är exempelprojektetZ3GatewayHostExemplet körs på ett Unix-liknande system. Vissa kunder kanske vill ha ett värdexempel som kan köras på ett RTOS, men tyvärr finns det inget RTOS-baserat värdexempel för närvarande. Användare måste utveckla sina egna värdprogram baserat på RTOS.

Det är viktigt att förstå UART-gatewayprotokollet innan man utvecklar ett anpassat värdprogram. För både UART-baserade NCP och SPI-baserade NCP använder värden EZSP-protokollet för att kommunicera med NCP:n.EZSPär en förkortning förEmberZnet seriellt protokoll, och det definieras iUG100För UART-baserad NCP implementeras ett protokoll på lägre lager för att tillförlitligt överföra EZSP-data över UART, det vill sägaASKAprotokoll, förkortning förAsynkron seriell värdFör mer information om ASH, seUG101ochUG115.

Sambandet mellan EZSP och ASH kan illustreras med följande diagram:

1

Dataformatet för EZSP och ASH-protokollet kan illustreras med följande diagram:

2

På den här sidan presenterar vi processen för att skapa UART-data och några nyckelbilder som ofta används i Zigbee-gatewayen.

2. Inramning

Den allmänna inramningsprocessen kan illustreras med följande diagram:

3

I det här diagrammet avser data EZSP-ramen. Generellt sett är ramprocesserna: |Inget|Steg|Referens|

|:-|:-|:-|

|1|Fyll EZSP-ramen|UG100|

|2|Datarandomisering|Avsnitt 4.3 i UG101|

|3|Lägg till kontrollbyte|Kapitel 2 och kapitel 3 i UG101|

|4|Beräkna CRC|Avsnitt 2.3 i UG101|

|5|Bytefyllning|Avsnitt 4.2 i UG101|

|6|Lägg till slutflaggan|Avsnitt 2.4 i UG101|

2.1. Fyll EZSP-ramen

EZSP-ramformatet illustreras i kapitel 3 i UG100.

4

Observera att detta format kan ändras när SDK:et uppgraderas. När formatet ändras kommer vi att ge det ett nytt versionsnummer. Det senaste EZSP-versionsnumret är 8 när den här artikeln skrivs (EmberZnet 6.8).

Eftersom EZSP-ramformatet kan skilja sig mellan olika versioner finns det ett obligatoriskt krav att värden och NCP:nMÅSTEfungera med samma EZSP-version. Annars kan de inte kommunicera som förväntat.

För att uppnå detta måste det första kommandot mellan värden och NCP:n vara versionskommandot. Med andra ord måste värden hämta EZSP-versionen av NCP:n innan någon annan kommunikation sker. Om EZSP-versionen skiljer sig från EZSP-versionen på värdsidan måste kommunikationen avbrytas.

Det implicita kravet bakom detta är att formatet för versionskommandot kanÄNDRA ALDRIGEZSP-versionens kommandoformat är som följer:

5

Förklaringarna av parameterfältet och formatet för versionssvaret finns i kapitel 4 i UG100. Parameterfältet är EZSP-versionen av värdprogrammet. När den här artikeln skrivs är det version 8.
7
Av: TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请泤儎凂

2.2. Datarandomisering

Den detaljerade randomiseringsprocessen beskrivs i avsnitt 4.3 i UG101. Hela EZSP-ramen kommer att randomiseras. Randomiseringen sker för att exklusivt ELLER välja EZSP-ramen och en pseudoslumpmässig sekvens.

Nedan visas algoritmen för att generera den pseudoslumpmässiga sekvensen.

  • rand0 = 0×42
  • Om bit 0 av randi är 0, randi+1 = randi >> 1
  • Om bit 0 av randi är 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Lägg till kontrollbyten

Kontrollbyten är en byte lång data och ska läggas till i ramens huvud. Formatet illustreras med tabellen nedan:

6

Totalt finns det 6 typer av kontrollbyte. De tre första används för vanliga ramar med EZSP-data, inklusive DATA, ACK och NAK. De tre sista används utan vanliga EZSP-data, inklusive RST, RSTACK och ERROR.

Formaten för RST, RSTACK och ERROR beskrivs i avsnitt 3.1 till 3.3.

2.4. Beräkna CRC

En 16-bitars CRC beräknas på byte från kontrollbyten till slutet av data. Standard CRCCCITT (g(x) = x16 + x12 + x5 + 1) initieras till 0xFFFF. Den mest signifikanta byten föregår den minst signifikanta byten (big-endian-läge).

2.5. Bytefyllning

Som beskrivs i avsnitt 4.2 i UG101 finns det några reserverade bytevärden som används för speciella ändamål. Dessa värden finns i följande tabell:

7

När dessa värden visas i ramen kommer en särskild behandling att göras av data. – Infoga escape-byten 0x7D framför den reserverade byten – Vänd bit5 för den reserverade byten

Nedan följer några exempel på denna algoritm:

8

2.6. Lägg till slutflaggan

Det sista steget är att lägga till slutflaggan 0x7E i slutet av ramen. Därefter kan data skickas till UART-porten.

3. Avramningsprocessen

När data tas emot från UART:en behöver vi bara göra omvända steg för att avkoda den.

4. Referenser


Publiceringstid: 8 februari 2022
WhatsApp onlinechatt!