Autor : Torchiotbootcamp
Odkaz : https: //zhuanlan.zhihu.com/p/339700391
Z : Quora
1. Úvod
Spoločnosť Silicon Labs ponúka riešenie hostiteľa+NCP pre dizajn brány Zigbee. V tejto architektúre môže hostiteľ komunikovať s NCP prostredníctvom rozhrania UART alebo SPI. Najčastejšie sa UART používa, pretože je oveľa jednoduchší ako SPI.
Silicon Labs tiež poskytol vzorový projekt pre hostiteľský program, ktorý je vzorkouZ3gatewayhost
. Vzorka beží v systéme podobnom UNIX. Niektorí zákazníci môžu chcieť chcieť vzorku hostiteľa, ktorá môže bežať na RTO, ale bohužiaľ v súčasnosti neexistuje žiadna vzorka hostiteľa RTOS. Používatelia musia vyvinúť svoj vlastný hostiteľský program založený na RTO.
Pred vývojom prispôsobeného hostiteľského programu je dôležité porozumieť protokolu Gateway UART. Pre NCP založené na NCP a SPI založená na UART používa hostiteľ protokol EZSP na komunikáciu s NCP.Ezspje krátky preSériový protokol Emberzneta je definovaný vUG100. Pre NCP založenú na UART sa implementuje protokol s nižšou vrstvou na spoľahlivé prenášanie údajov EZSP nad UART, to jePopolčekprotokol, skratka preAsynchrónny sériový hostiteľ. Viac informácií o Ash, pozrite si pozriUG101aUG115.
Vzťah medzi EZSP a popolom je možné ilustrovať podľa nasledujúceho diagramu:
Formát údajov EZSP a protokolu popola je možné ilustrovať podľa nasledujúceho diagramu:
Na tejto stránke predstavíme proces rámovania údajov UART a niektorých kľúčových rámcov, ktoré sa často používajú v bráne Zigbee.
2. Rámec
Všeobecný proces rámca je možné ilustrovať podľa nasledujúceho grafu:
V tejto tabuľke údaje znamenajú rámec EZSP. Všeobecne platí, že procesy rámovania sú: | no | krok | referencia |
|:-|:-|:-|
| 1 | Vyplňte rám EZSP | UG100 |
| 2 | Randomizácia údajov | Oddiel 4.3 UG101 |
| 3 | Pridajte ovládací bajt | Chap2 a CAP3 z UG101 |
| 4 | Vypočítajte CRC | Oddiel 2.3 UG101 |
| 5 | Bajtové vypchávka | Sekcia 4.2 UG101 |
| 6 | Pridajte koncovú príznak | Oddiel 2.4 UG101 |
2.1. Vyplňte rám EZSP
Formát rámca EZSP je znázornený v kapuste 3 UG100.
Venujte pozornosť tomu, že tento formát sa môže zmeniť, keď sa vylepšuje SDK. Keď sa formát zmení, dá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 NCPNevyhnutnosťPracujte s rovnakou verziou EZSP. Inak nemôžu komunikovať tak, ako sa očakáva.
Na dosiahnutie tohto cieľa musí byť prvý príkaz medzi hostiteľom a NCP príkazom verzie. Inými slovami, hostiteľ musí pred akýmkoľvek iným komunikáciou získať verziu EZSP NCP. Ak je verzia EZSP iná s verziou EZSP na strane hostiteľa, komunikácia musí byť prerušená.
Implicitná požiadavka, ktorá za tým spočíva v tom, že formát príkazu verzie môžeNikdy nezmeniť. Formát príkazu verzie EZSP je ako nižšie:
链接 : https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。
2.2. Randomizácia údajov
Podrobný proces randomizácie je opísaný v oddiele 4.3 UG101. Celý rámec EZSP bude randomizovaný. Randomizácia je exkluzívna alebo rám EZSP a pseudo-náhodná sekvencia.
Nižšie je uvedený algoritmus generovania pseudo-ná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 je jednodielnym bajtovým údajom a mal by sa pridať do hlavy rámu. Formát je ilustrovaný s tabuľkou nižšie:
Úplne existuje 6 druhov kontrolných bajtov. Prvé tri sa používajú pre bežné rámce s údajmi EZSP vrátane údajov, 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 chyby sú opísané v oddiele 3.1 až 3.3.
2.4. Vypočítajte CRC
16-bit CRC sa počíta na bajtoch z riadiaceho bajtu do konca údajov. Štandardný CRCCCITT (G (x) = x16 + x12 + x5 + 1) je inicializovaný na 0xffff. Najvýznamnejší bajt predchádza najmenej významnému bajtu (veľký režim).
2.5. Vypchávka bajtov
Ako je opísané v oddiele 4.2 UG101, existujú niektoré vyhradené bajtové hodnoty používané na osobitný účel. Tieto hodnoty možno nájsť v nasledujúcej tabuľke:
Ak sa tieto hodnoty objavia v rámci, bude sa s údajmi vykonať špeciálne ošetrenie. - Vložte únikový bajt 0x7d pred vyhradeným bajtom - zvráťte bit5 tohto vyhradeného bajtu
Nižšie sú uvedené príklady tohto algoritmu:
2.6. Pridajte koncovú vlajku
Posledným krokom je pridanie koncového príznaku 0x7e na koniec rámu. Potom môžu byť údaje odoslané do portu UART.
3. Proces derandingu
Keď sú údaje prijaté z UART, musíme urobiť spätné kroky, aby sme ich dekódovali.
4. Referencie
Čas príspevku: február-08-2022