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