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 Gateway -design. I denna arkitektur kan värden kommunicera med NCP via UART- eller SPI -gränssnittet. Vanligtvis används UART eftersom det är mycket enklare än SPI.

Silicon Labs har också tillhandahållit ett provprojekt för värdprogrammet, vilket är urvaletZ3gatewayhost. 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 tillfället. Användare måste utveckla sitt eget värdprogram baserat på RTO: er.

Det är viktigt att förstå UART -gateway -protokollet innan du 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.Ezspär kort förEmberznet seriellt protokolloch det definieras iUG100. För UART -baserad NCP implementeras ett lägre skiktprotokoll för att transportera EZSP -data pålitligt över UART, det är denASKAprotokoll, kort förAsynkron serievärd. För mer information om Ash, seUG101ochUg115.

Förhållandet mellan EZSP och Ash kan illustreras av följande diagram:

1

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

2

På den här sidan kommer vi att introducera processen för att inrama UART -data och några nyckelramar som ofta används i Zigbee Gateway.

2. Ram

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

3

I detta diagram betyder data EZSP -ramen. I allmänhet är inramningsprocesserna: | Nej | Steg | Referens |

|:-|:-|:-|

| 1 | Fyll EZSP -ramen | UG100 |

| 2 | Data randomisering | Avsnitt 4.3 i UG101 |

| 3 | Lägg till kontrollbyten | Chap2 och Chap3 i UG101 |

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

| 5 | BYTE STYCKING | Avsnitt 4.2 i UG101 |

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

2.1. Fyll EZSP -ramen

EZSP -ramformatet illustreras i kap 3 av UG100.

4

Var uppmärksam på att detta format kan ändras när SDK -uppgraderingarna. När formatet ändras kommer vi att ge det ett nytt versionnummer. Det senaste EZSP -versionnumret är 8 när den här artikeln är skriven (Emberznet 6.8).

Eftersom EZSP -ramformatet kan vara olika mellan olika versioner, finns det ett obligatoriskt krav att värden och NCPMÅSTEArbeta 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 vara versionskommandot. Med andra ord måste värden återkalla EZSP -versionen av NCP före någon annan kommunikation. Om EZSP -versionen är annorlunda med EZSP -versionen av värdsidan måste kommunikationen avbrytas.

Det implicita kravet bakom detta är att formatet för versionskommandot kanFörändras aldrig. EZSP -versionskommandoformatet är som nedan:

5

Förklaringarna av parameterfältet och formatet för versionens svar finns i kap 4 av UG100. Parameterfältet är EZSP -versionen av värdprogrammet. När den här artikeln är skriven är den 8.
7
作者 : Torchiotbootcamp
链接 : https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。

2.2. Data randomisering

Den detaljerade randomiseringsprocessen beskrivs i avsnitt 4.3 i UG101. Hela EZSP -ramen kommer att randomiseras. Randomiseringen är att exklusivt eller EZSP-ramen och en pseudo-slumpmässig sekvens.

Nedan är algoritmen för att generera pseudo-slumpmässig sekvens.

  • 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 -data och bör läggas till ramhuvudet. Formatet illustreras med tabellen nedan:

6

Helt, det finns 6 typer av kontrollbyte. De första tre 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 fel.

Formatet för RST, RStack och fel 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) initialiseras till 0xffff. Den mest signifikanta byten föregår den minst signifikanta byten (Big-Endian-läge).

2.5. Byte fyllning

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

7

När dessa värden visas i ramen kommer en speciell behandling att göras för data. - Sätt in Escape Byte 0x7d framför den reserverade byten - Vänd bit5 på 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 till slutet av ramen. Därefter kan uppgifterna skickas till UART -porten.

3. Avramningsprocess

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

4. Referenser


Posttid: Feb-08-2022
Whatsapp online chatt!