Autor:TorchIoTBootCamp
Odkaz: https://zhuanlan.zhihu.com/p/339700391
Od: Quora
1. Úvod
Spoločnosť Silicon Labs ponúkla riešenie host+NCP pre návrh brány Zigbee. V tejto architektúre môže hostiteľ komunikovať s NCP prostredníctvom rozhrania UART alebo SPI. Najčastejšie sa používa UART, pretože je oveľa jednoduchší ako SPI.
Spoločnosť Silicon Labs poskytla aj vzorový projekt pre hostiteľský program, ktorým je ukážkaZ3GatewayHost
Vzorka beží na systéme podobnom Unixu. Niektorí zákazníci môžu chcieť hostiteľskú vzorku, ktorá môže bežať na RTOS, ale bohužiaľ momentálne neexistuje žiadna hostiteľská vzorka založená na RTOS. Používatelia si musia vyvinúť vlastný hostiteľský program založený na RTOS.
Pred vývojom prispôsobeného hostiteľského programu je dôležité porozumieť protokolu brány UART. V prípade NCP založeného na UART aj NCP založeného na SPI používa hostiteľ na komunikáciu s NCP protokol EZSP.EZSPje skratka preSériový protokol EmberZneta je definovaný vUG100Pre NCP založené na UART je implementovaný protokol nižšej vrstvy na spoľahlivý prenos dát EZSP cez UART, čo je...POPOLprotokol, skratka preAsynchrónny sériový hostiteľViac informácií o ASH nájdete naUG101aUG115.
Vzťah medzi EZSP a ASH možno znázorniť nasledujúcim diagramom:
Formát údajov protokolov EZSP a ASH možno znázorniť na nasledujúcom diagrame:
Na tejto stránke si predstavíme proces rámovania dát UART a niektoré kľúčové rámce, ktoré sa často používajú v bráne Zigbee.
2. Rámovanie
Všeobecný proces rámovania možno znázorniť nasledujúcou tabuľkou:
V tomto grafe údaje predstavujú rámec EZSP. Vo všeobecnosti sú procesy rámovania nasledovné: |Žiadne|Krok|Referencia|
|:-|:-|:-|
|1|Naplňte rám EZSP|UG100|
|2|Randomizácia údajov|Oddiel 4.3 dokumentu UG101|
|3|Pridajte riadiaci bajt|Kap.2 a Kap.3 z UG101|
|4|Výpočet CRC|Oddiel 2.3 UG101|
|5|Vypĺňanie bajtov|Oddiel 4.2 dokumentu UG101|
|6|Pridajte koncový príznak|Oddiel 2.4 dokumentu UG101|
2.1. Vyplňte rám EZSP
Formát rámca EZSP je znázornený v kapitole 3 dokumentu UG100.
Upozorňujeme, že tento formát sa môže zmeniť po aktualizácii SDK. Po zmene formátu mu priradíme nové číslo verzie. Najnovšie číslo verzie EZSP je v čase písania tohto článku 8 (EmberZnet 6.8).
Keďže formát rámca EZSP sa môže v rôznych verziách líšiť, existuje povinná požiadavka, aby hostiteľ a NCPMUSÍfungujú s rovnakou verziou EZSP. V opačnom prípade nemôžu komunikovať podľa očakávaní.
Aby sa to dosiahlo, prvý príkaz medzi hostiteľom a NCP musí byť príkaz verzie. Inými slovami, hostiteľ musí pred akoukoľvek ďalšou komunikáciou načítať verziu EZSP NCP. Ak sa verzia EZSP líši od verzie EZSP na strane hostiteľa, komunikácia sa musí prerušiť.
Implicitnou požiadavkou, ktorá sa za tým skrýva, je, že formát príkazu verzie môžeNIKDY SA NEZMENIŤFormát príkazu verzie EZSP je uvedený nižšie:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明凂
2.2. Randomizácia údajov
Podrobný proces randomizácie je opísaný v časti 4.3 dokumentu UG101. Celý rámec EZSP bude randomizovaný. Randomizácia sa vykonáva pomocou exkluzívneho ALEBO medzi rámcom EZSP a pseudonáhodnou sekvenciou.
Nižšie je uvedený algoritmus generovania pseudonáhodnej sekvencie.
- rand0 = 0×42
- ak je bit 0 randi 0, randi+1 = randi >> 1
- ak je bit 0 funkcie randi 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Pridajte riadiaci bajt
Riadiaci bajt sú jednobajtové dáta a mali by sa pridať na začiatok rámca. Formát je znázornený v tabuľke nižšie:
Celkovo existuje 6 druhov riadiacich bajtov. Prvé tri sa používajú pre bežné rámce s dátami EZSP, vrátane DATA, ACK a NAK. Posledné tri sa používajú bez bežných dát EZSP, vrátane RST, RSTACK a ERROR.
Formát RST, RSTACK a ERROR je popísaný v častiach 3.1 až 3.3.
2.4. Výpočet CRC
16-bitový CRC sa vypočítava z bajtov od riadiaceho bajtu až po koniec dát. Štandardný CRCCCITT (g(x) = x16 + x12 + x5 + 1) je inicializovaný na 0xFFFF. Najvýznamnejší bajt predchádza najmenej významnému bajtu (režim big-endian).
2.5. Vypĺňanie bajtov
Ako je popísané v časti 4.2 dokumentu UG101, existujú niektoré rezervované bajtové hodnoty používané na špeciálne účely. Tieto hodnoty nájdete v nasledujúcej tabuľke:
Keď sa tieto hodnoty objavia v rámci, s dátami sa vykoná špeciálne spracovanie. – Vloží sa escape bajt 0x7D pred rezervovaný bajt – Obráti sa bit 5 rezervovaného bajtu
Nižšie uvádzame niekoľko príkladov tohto algoritmu:
2.6. Pridajte koncový príznak
Posledným krokom je pridanie koncového príznaku 0x7E na koniec rámca. Potom je možné dáta odoslať na port UART.
3. Proces deframingu
Keď sú dáta prijaté z UART, stačí vykonať opačné kroky na ich dekódovanie.
4. Referencie
Čas uverejnenia: 8. februára 2022