O Zigbee EZSP UART

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ážkaZ3GatewayHostVzorka 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:

1

Formát údajov protokolov EZSP a ASH možno znázorniť na nasledujúcom diagrame:

2

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:

3

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.

4

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:

5

Vysvetlenia poľa parametra a formátu odpovede verzie nájdete v kapitole 4 dokumentu UG100. Pole parametra predstavuje verziu EZSP hostiteľského programu. V čase písania tohto článku je to 8.
7
作者:TorchIoTBootCamp
链接: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:

6

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:

7

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:

8

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
Online chat na WhatsApp!