Auteur: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Vun: Quora
1. Aleedung
Silicon Labs huet eng Host + NCP Léisung fir Zigbee Gateway Design ugebueden.An dëser Architektur kann den Host mat der NCP iwwer UART oder SPI Interface kommunizéieren.Am allgemengen gëtt UART benotzt well et vill méi einfach ass wéi SPI.
Silicon Labs huet och e Probeprojet fir den Hostprogramm geliwwert, wat d'Probe assZ3GatewayHost
.D'Probe leeft op engem Unix-ähnleche System.E puer Cliente kënnen eng Hostprobe wëllen déi op engem RTOS lafen kann, awer leider gëtt et keng RTOS baséiert Hostprobe fir de Moment.D'Benotzer mussen hiren eegene Hostprogramm entwéckelen baséiert op RTOS.
Et ass wichteg den UART Gateway Protokoll ze verstoen ier Dir e personaliséierte Hostprogramm entwéckelt.Fir béid UART baséiert NCP a SPI baséiert NCP benotzt den Host den EZSP Protokoll fir mam NCP ze kommunizéieren.EZSPass kuerz firEmberZnet Serial Protokoll, an et ass definéiert anUG100.Fir UART baséiert NCP gëtt e Protokoll mat méi nidderegen Schicht implementéiert fir EZSP Daten zouverlässeg iwwer UART ze droen, dat ass deASCHProtokoll, kuerz firAsynchronous Serial Host.Fir méi Detailer iwwer ASH, kuckt w.e.g. opUG101anUG115.
D'Relatioun tëscht EZSP an ASH kann duerch folgend Diagramm illustréiert ginn:
Den Dateformat vum EZSP an dem ASH Protokoll kann duerch folgend Diagramm illustréiert ginn:
Op dëser Säit wäerte mir de Prozess vun der Framing vun den UART Daten an e puer Schlësselframes virstellen, déi dacks am Zigbee Gateway benotzt ginn.
2. Kader
Den allgemenge Frameingprozess kann duerch déi folgend Diagramm illustréiert ginn:
An dësem Diagramm bedeit d'Donnéeën den EZSP Frame.Am Allgemengen sinn d'Kaderprozesser: |Nee|Schrëtt|Referenz|
|:-|:-|:-|
|1|Fëllt den EZSP Frame|UG100|
|2|Datenrandomiséierung|Sektioun 4.3 vun UG101|
|3|Füügt de Kontrollbyte|Chap2 a Chap3 vun UG101|
|4|Berechnung vum CRC|Sektioun 2.3 vun UG101|
|5|Byte Stuffing|Sektioun 4.2 vun UG101|
|6|Füügt den Endflagg derbäi|Sektioun 2.4 vun UG101|
2.1.Fëllt den EZSP Frame aus
Den EZSP Frame Format ass am Kapitel 3 vun UG100 illustréiert.
Opgepasst datt dëst Format kann änneren wann d'SDK Upgrades.Wann d'Format ännert, gi mir et eng nei Versiounsnummer.Déi lescht EZSP Versiounsnummer ass 8 wann dësen Artikel geschriwwe gëtt (EmberZnet 6.8).
Well den EZSP Frame Format tëscht verschiddene Versiounen ënnerschiddlech ka sinn, gëtt et eng obligatoresch Fuerderung datt den Host an den NCPMUSSAarbecht mat der selwechter EZSP Versioun.Soss kënne se net wéi erwaart kommunizéieren.
Fir dat z'erreechen, muss den éischte Kommando tëscht dem Host an dem NCP de Versiounskommando sinn.An anere Wierder, de Host muss d'EZSP Versioun vum NCP virun all aner Kommunikatioun zréckzéien.Wann d'EZSP Versioun anescht ass mat der EZSP Versioun vun der Host Säit, muss d'Kommunikatioun ofgebrach ginn.
Déi implizit Fuerderung hannert dësem ass datt d'Format vum Versiounskommando kannNI Änneren.D'EZSP Versioun Kommandoformat ass wéi hei ënnen:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请泤昄凂
2.2.Donnéeën Randomisatioun
Den detailléierte Randomiséierungsprozess gëtt an der Sektioun 4.3 vun UG101 beschriwwen.De ganzen EZSP Frame gëtt randomiséiert.D'Randomiséierung ass exklusiv-ODER den EZSP Frame an eng pseudo-zoufälleg Sequenz.
Drënner ass den Algorithmus fir déi pseudo-zoufälleg Sequenz ze generéieren.
- rand0 = 0×42
- wann Bit 0 vum Randi 0 ass, Randi+1 = Randi >> 1
- wann Bit 0 vum Randi 1 ass, Randi+1 = (randi >> 1) ^ 0xB8
2.3.Füügt de Kontrollbyte derbäi
De Kontrollbyte ass eng Eenbyte Daten, a soll un de Kapp vum Frame bäigefüügt ginn.De Format ass mat der Tabell hei ënnen illustréiert:
Ganz, et gi 6 Aarte vu Kontrollbytes.Déi éischt dräi gi fir gemeinsam Rummen mat EZSP Daten benotzt, dorënner DATA, ACK an NAK.Déi lescht dräi ginn ouni gemeinsam EZSP Daten benotzt, dorënner RST, RSTACK an ERROR.
D'Format vun der RST, RSTACK an ERROR sinn am Abschnitt 3.1 bis 3.3 beschriwwen.
2.4.Berechent den CRC
E 16-Bit CRC gëtt op Bytes vum Kontrollbyte bis zum Enn vun den Donnéeën berechent.De Standard CRCCCITT (g(x) = x16 + x12 + x5 + 1) gëtt initialiséiert op 0xFFFF.De bedeitendsten Byte ass virum mannst bedeitend Byte (Big-endian Modus).
2.5.Byte Stuff
Wéi an der Rubrik beschriwwen 4.2 vun UG101, ginn et e puer reservéiert Byte Wäerter fir speziell Zwecker benotzt.Dës Wäerter kënnen an der folgender Tabell fonnt ginn:
Wann dës Wäerter am Kader erschéngen, gëtt eng speziell Behandlung fir d'Donnéeë gemaach.- Füügt den Escape-Byte 0x7D virum reservéierten Byte an - Ëmgedréit de Bit5 vun deem reservéierten Byte
Drënner sinn e puer Beispiller vun dësem Algorithmus:
2.6.Füügt den Endflagg derbäi
De leschte Schrëtt ass den Enn Fändel 0x7E um Enn vum Frame ze addéieren.Duerno kënnen d'Donnéeën an den UART Hafen geschéckt ginn.
3. De-framing Prozess
Wann Daten aus der UART kritt ginn, brauche mir just déi ëmgedréint Schrëtt ze maachen fir se ze dekodéieren.
4. Referenze
Post Zäit: Feb-08-2022