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 värd+NCP-lösning för Zigbee-gatewaydesign. I den här arkitekturen kan värden kommunicera med NCP:n via UART- eller SPI-gränssnitt. Oftast används UART eftersom det är mycket enklare än SPI.

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

Det är viktigt att förstå UART-gatewayprotokollet innan du utvecklar ett anpassat värdprogram. För både UART-baserad NCP och SPI-baserad NCP använder värden EZSP-protokollet för att kommunicera med NCP.EZSPär förkortning förEmberZnet Serial Protocol, och det definieras iUG100. För UART-baserad NCP implementeras ett lägre lagerprotokoll för att överföra EZSP-data på ett tillförlitligt sätt över UART, det ärASKAprotokoll, förkortning avAsynkron seriell värd. För mer information om ASH, seUG101ochUG115.

Relationen 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 kommer vi att introducera processen att rama in UART-data och några nyckelramar som ofta används i Zigbee gateway.

2. Inramning

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

3

I det här diagrammet betyder data EZSP-ramen. I allmänhet är inramningsprocesserna: |Nej|Steg|Referens|

|:-|:-|:-|

|1|Fyll EZSP-ramen|UG100|

|2|Datasrandomisering|Avsnitt 4.3 i UG101|

|3|Lägg till kontrollbyten|kap2 och kap3 i UG101|

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

|5|Byte Stuffing|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:n uppgraderas. När formatet ändras kommer vi att ge det ett nytt versionsnummer. Det senaste versionsnumret för EZSP är 8 när denna artikel skrivs (EmberZnet 6.8).

Eftersom EZSP-ramformatet kan vara olika mellan olika versioner, finns det ett obligatoriskt krav på att värden och NCPMÅSTEarbeta med samma EZSP-version. Annars kan de inte kommunicera som förväntat.

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

Det implicita kravet bakom detta är att formatet på versionskommandot kanÄNDRA ALDRIG. EZSP-versionens kommandoformat är som nedan:

5

Förklaringarna av parameterfältet och formatet på versionssvaret finns i kapitel 4 i UG100. Parameterfältet är EZSP-versionen av värdprogrammet. När den här artikeln är skriven är det 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 är till exklusiv-ELLER EZSP-ramen och en pseudo-slumpmässig sekvens.

Nedan är algoritmen för att generera den pseudo-slumpmässiga sekvensen.

  • rand0 = 0×42
  • om bit 0 i randi är 0, är ​​randi+1 = randi >> 1
  • om bit 0 i randi är 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Lägg till kontrollbyten

Kontrollbyten är en enbyte-data och bör läggas till i ramens huvud. Formatet illustreras med tabellen nedan:

6

Totalt finns det 6 typer av kontrollbytes. 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.

Formatet 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å bytes från kontrollbyten till slutet av datan. 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. Byte Stuffing

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 speciell behandling att göras av data. – Infoga escape-byten 0x7D framför den reserverade byten – Vänd om 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. Efter det kan data skickas till UART-porten.

3. De-framing Process

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

4. Referenser


Posttid: 2022-08-08
WhatsApp onlinechatt!