Auteur: TorchIoTBootCamp
Keppeling: https://zhuanlan.zhihu.com/p/339700391
Fan: Quora
1. Ynlieding
Silicon Labs hat in host+NCP-oplossing oanbean foar Zigbee-gateway-ûntwerp. Yn dizze arsjitektuer kin de host mei de NCP kommunisearje fia in UART- of SPI-ynterface. Meastentiids wurdt UART brûkt, om't it folle ienfâldiger is as SPI.
Silicon Labs hat ek in foarbyldprojekt levere foar it hostprogramma, dat is it foarbyldZ3GatewayHost
It foarbyld rint op in Unix-eftich systeem. Guon klanten wolle miskien in hostfoarbyld dat op in RTOS kin rinne, mar spitigernôch is der op it stuit gjin RTOS-basearre hostfoarbyld. Brûkers moatte har eigen hostprogramma ûntwikkelje op basis fan RTOS.
It is wichtich om it UART-gatewayprotokol te begripen foardat jo in oanpast hostprogramma ûntwikkelje. Foar sawol UART-basearre NCP as SPI-basearre NCP brûkt de host it EZSP-protokol om te kommunisearjen mei de NCP.EZSPis koart foarEmberZnet Seriële Protokol, en it is definiearre ynUG100Foar UART-basearre NCP wurdt in legere laachprotokol ymplementearre om EZSP-gegevens betrouber oer UART te dragen, dat is deJiskeprotokol, koart foarAsynchrone seriële hostFoar mear details oer ASH, sjochUG101enUG115.
De relaasje tusken EZSP en ASH kin yllustrearre wurde troch it folgjende diagram:
It gegevensformaat fan 'e EZSP en it ASH-protokol kin yllustrearre wurde troch it folgjende diagram:
Op dizze side sille wy it proses fan it framen fan 'e UART-gegevens en guon kaaiframes yntrodusearje dy't faak brûkt wurde yn Zigbee-gateway.
2. Framing
It algemiene framingproses kin yllustrearre wurde troch de folgjende tabel:
Yn dizze grafyk betsjut de data it EZSP-frame. Yn 't algemien binne de framingprosessen: |Gjin|Stap|Referinsje|
|:-|:-|:-|
|1|Folje it EZSP-frame|UG100|
|2|Datarandomisaasje|Paragraaf 4.3 fan UG101|
|3|Foegje de kontrôlebyte ta|Haadstik 2 en haadstik 3 fan UG101|
|4|Berekenje de CRC|Paragraaf 2.3 fan UG101|
|5|Byte Stuffing|Paragraaf 4.2 fan UG101|
|6|Foegje de einflagge ta|Paragraaf 2.4 fan UG101|
2.1. Folje it EZSP-frame yn
It EZSP-frameformaat wurdt yllustrearre yn haadstik 3 fan UG100.
Tink derom dat dit formaat kin feroarje as de SDK opwurdearre wurdt. As it formaat feroaret, sille wy it in nij ferzjenûmer jaan. It lêste EZSP-ferzjenûmer is 8 op it momint fan skriuwen fan dit artikel (EmberZnet 6.8).
Omdat it EZSP-frameformaat ferskille kin tusken ferskate ferzjes, is d'r in ferplichte eask dat de host en NCPMOATTEwurkje mei deselde EZSP-ferzje. Oars kinne se net kommunisearje lykas ferwachte.
Om dat te berikken, moat it earste kommando tusken de host en de NCP it ferzjekommando wêze. Mei oare wurden, de host moat de EZSP-ferzje fan 'e NCP ophelje foardat der oare kommunikaasje plakfynt. As de EZSP-ferzje oars is as de EZSP-ferzje fan 'e hostkant, moat de kommunikaasje ôfbrutsen wurde.
De ymplisite eask hjirachter is dat it formaat fan it ferzjekommando kinNOAIT FEROARJEIt kommandoformaat fan 'e EZSP-ferzje is lykas hjirûnder:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注昄凂
2.2. Datarandomisaasje
It detaillearre randomisaasjeproses wurdt beskreaun yn seksje 4.3 fan UG101. It hiele EZSP-frame sil willekeurich wurde. De randomisaasje is om it EZSP-frame en in pseudo-willekeurige sekwinsje eksklusyf OF te brûken.
Hjirûnder is it algoritme foar it generearjen fan 'e pseudo-willekeurige sekwinsje.
- rand0 = 0×42
- as bit 0 fan randi 0 is, dan is randi+1 = randi >> 1
- as bit 0 fan randi 1 is, dan is randi+1 = (randi >> 1) ^ 0xB8
2.3. Foegje de kontrôlebyte ta
De kontrôlebyte is in gegevens fan ien byte, en moat tafoege wurde oan 'e kop fan it frame. It formaat wurdt yllustrearre mei de tabel hjirûnder:
Yn totaal binne der 6 soarten kontrôlebytes. De earste trije wurde brûkt foar mienskiplike frames mei EZSP-gegevens, ynklusyf DATA, ACK en NAK. De lêste trije wurde brûkt sûnder mienskiplike EZSP-gegevens, ynklusyf RST, RSTACK en ERROR.
It formaat fan 'e RST, RSTACK en ERROR wurde beskreaun yn seksje 3.1 oant en mei 3.3.
2.4. Berekenje de CRC
In 16-bit CRC wurdt berekkene op bytes fan 'e kontrôlebyte oant it ein fan 'e gegevens. De standert CRCCCITT (g(x) = x16 + x12 + x5 + 1) wurdt yn initialisearre nei 0xFFFF. De meast wichtige byte giet foarôf oan de minst wichtige byte (big-endian modus).
2.5. Byte-opfoljen
Lykas beskreaun yn seksje 4.2 fan UG101, binne der wat reservearre bytewearden dy't brûkt wurde foar spesjale doelen. Dizze wearden binne te finen yn 'e folgjende tabel:
As dizze wearden yn it frame ferskine, sil der in spesjale behanneling oan de gegevens dien wurde. – Set de escape-byte 0x7D foar de reservearre byte yn – Draai bit5 fan dy reservearre byte om
Hjirûnder binne wat foarbylden fan dit algoritme:
2.6. Foegje de einflagge ta
De lêste stap is om de einflagge 0x7E ta te foegjen oan 'e ein fan it frame. Dêrnei kinne de gegevens nei de UART-poarte stjoerd wurde.
3. Deframingproses
As gegevens fan 'e UART ûntfongen wurde, hoege wy allinich de omkearde stappen te dwaan om it te dekodearjen.
4. Referinsjes
Pleatsingstiid: 8 febrewaris 2022