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:
Dataformatet för EZSP och ASH-protokollet kan illustreras med följande diagram:
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:
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.
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:
链接: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:
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:
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:
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