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 cez rozhranie UART alebo SPI. Najčastejšie sa používa UART, pretože je oveľa jednoduchší ako SPI.
Silicon Labs tiež poskytlo vzorový projekt pre hostiteľský program, ktorý je vzoromZ3GatewayHost
. Ukážka beží na systéme podobnom Unixu. Niektorí zákazníci môžu chcieť vzorku hostiteľa, ktorý môže bežať na RTOS, ale žiaľ, zatiaľ neexistuje žiadna vzorka hostiteľa založená na RTOS. Používatelia si musia vytvoriť svoj 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. Pre NCP založené na UART aj NCP založené na SPI hostiteľ používa na komunikáciu s NCP protokol EZSP.EZSPje skratka preSériový protokol EmberZneta je definovaný vUG100. Pre NCP na báze UART je implementovaný protokol nižšej vrstvy, ktorý spoľahlivo prenáša údaje EZSP cez UART, to jeASHprotokol, skratka preAsynchrónny sériový hostiteľ. Viac podrobností o ASH nájdete naUG101aUG115.
Vzťah medzi EZSP a ASH možno ilustrovať na nasledujúcom diagrame:
Formát údajov protokolu EZSP a ASH možno znázorniť na nasledujúcom diagrame:
Na tejto stránke predstavíme proces rámcovania dát UART a niektoré kľúčové snímky, ktoré sa často používajú v bráne Zigbee.
2. Rámovanie
Všeobecný proces rámcovania možno ilustrovať na nasledujúcej tabuľke:
V tomto grafe údaje znamenajú rámec EZSP. Vo všeobecnosti sú procesy rámcovania: |No|Step|Reference|
|:-|:-|:-|
|1|Vyplňte rám EZSP|UG100|
|2|Randomizácia údajov|Oddiel 4.3 UG101|
|3|Pridať riadiaci bajt|Kapitola 2 a Kap.3 z UG101|
|4|Vypočítajte CRC|Oddiel 2.3 UG101|
|5|Plnenie bajtov|Oddiel 4.2 UG101|
|6|Pridať koncový príznak|Oddiel 2.4 UG101|
2.1. Vyplňte rám EZSP
Formát rámca EZSP je znázornený v kapitole 3 UG100.
Upozorňujeme, že tento formát sa môže pri inovácii súpravy SDK zmeniť. Keď sa formát zmení, pridelíme mu nové číslo verzie. Najnovšie číslo verzie EZSP je 8, keď je tento článok napísaný (EmberZnet 6.8).
Keďže formát rámca EZSP sa môže medzi rôznymi verziami líšiť, existuje povinná požiadavka, aby hostiteľ a NCPMUSÍTEpracovať s rovnakou verziou EZSP. Inak nemôžu komunikovať podľa očakávania.
Aby ste to dosiahli, prvým príkazom medzi hostiteľom a NCP musí byť príkaz version. Inými slovami, hostiteľ musí pred akoukoľvek inou komunikáciou získať verziu EZSP NCP. Ak sa verzia EZSP líši od verzie EZSP na hostiteľskej strane, komunikácia sa musí prerušiť.
Implicitnou požiadavkou za tým je, že formát príkazu version môžeNIKDY NEMEŇTE. Formát príkazu verzie EZSP je nasledujúci:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明凂
2.2. Randomizácia údajov
Podrobný proces randomizácie je opísaný v časti 4.3 UG101. Celý rám EZSP bude náhodne vybraný. Randomizácia je exkluzívne ALEBO rámec EZSP a pseudonáhodná sekvencia.
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 randi 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Pridajte riadiaci bajt
Riadiaci bajt sú jednobajtové údaje a mali by sa pridať do hlavy 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 údajmi EZSP vrátane DATA, ACK a NAK. Posledné tri sa používajú bez bežných údajov EZSP, vrátane RST, RSTACK a ERROR.
Formát RST, RSTACK a ERROR je popísaný v časti 3.1 až 3.3.
2.4. Vypočítajte CRC
16-bitový CRC sa počíta na bajty od riadiaceho bajtu až po koniec dát. Štandardné CRCCCITT (g(x) = x16 + x12 + x5 + 1) sa inicializuje na 0xFFFF. Najvýznamnejší bajt predchádza najmenej významnému bajtu (režim big-endian).
2.5. Byte Plnenie
Ako je popísané v časti 4.2 UG101, existuje niekoľko rezervovaných bajtových hodnôt používaných na špeciálne účely. Tieto hodnoty nájdete v nasledujúcej tabuľke:
Keď sa tieto hodnoty objavia v rámci, s údajmi sa bude zaobchádzať špeciálne. – Vložte únikový bajt 0x7D pred rezervovaný bajt – Obráťte bit 5 tohto rezervovaného bajtu
Nižšie sú uvedené niektoré príklady tohto algoritmu:
2.6. Pridajte koncový príznak
Posledným krokom je pridanie koncového príznaku 0x7E na koniec rámca. Potom môžu byť údaje odoslané na port UART.
3. Proces odrámovania
Keď sú údaje prijaté z UART, musíme ich dekódovať iba v opačnom poradí.
4. Referencie
Čas odoslania: feb-08-2022