Autor : Torchiotbootcamp
Odkaz : https: //zhuanlan.zhihu.com/p/339700391
Z : Quora
1. Úvod
Silicon Labs nabídl hostitelské+NCP řešení pro Zigbee Gateway Design. V této architektuře může hostitel komunikovat s NCP prostřednictvím rozhraní UART nebo SPI. Nejčastěji se UART používá, protože je mnohem jednodušší než SPI.
Silicon Labs také poskytl ukázkový projekt pro hostitelský program, což je vzorekZ3Gatewayhost
. Vzorek běží na systému UNIX. Někteří zákazníci mohou chtít hostitelský vzorek, který může běžet na RTOS, ale bohužel prozatím neexistuje žádný vzorek hostitele RTOS. Uživatelé musí vyvinout svůj vlastní hostitelský program založený na RTOS.
Před vývojem přizpůsobeného hostitelského programu je důležité porozumět protokolu UART Gateway. Hostitel NCP založené na NCP a NCP založeném na UART i NCP založený na SPI používá pro komunikaci s NCP protokol EZSP.EZSPje krátký proEmberznet sériový protokol, a je to definováno vUG100. Pro NCP založený na UART je implementován protokol nižší vrstvy, který spolehlivě přenáší data EZSP přes UART, to jePOPELProtokol, krátký proAsynchronní sériový hostitel. Další podrobnosti o ASH naleznete naUG101aUG115.
Vztah mezi EZSP a popelem lze ilustrovat následujícím diagramem:
Datový formát protokolu EZSP a ASH lze ilustrovat následujícím diagramem:
Na této stránce představíme proces rámování dat UART a některé klíčové rámce, které se často používají v bráně Zigbee.
2. ROBRING
Proces obecného snímku lze ilustrovat následujícím grafem:
V tomto grafu údaje znamenají rámec EZSP. Obecně jsou procesy rámování: | ne | Krok | Reference |
|:-|:-|:-|
| 1 | Vyplňte rámec EZSP | UG100 |
| 2 | Randomizace dat | Oddíl 4.3 UG101 |
| 3 | Přidejte ovládací bajt | Chap2 a Chap3 UG101 |
| 4 | Vypočítejte CRC | Oddíl 2.3 UG101 |
| 5 | PUTKING BYTE | Oddíl 4.2 UG101 |
| 6 | Přidejte koncový příznak | Oddíl 2.4 UG101 |
2.1. Vyplňte rám EZSP
Formát rámu EZSP je znázorněn v kap. 3 UG100.
Při upgrady SDK věnujte pozornost tomu, že se tento formát může změnit. Když se formát změní, poskytneme mu nové číslo verze. Nejnovější číslo verze EZSP je 8, když je tento článek napsán (Emberznet 6.8).
Protože formát rámu EZSP se může mezi různými verzemi lišit, existuje povinný požadavek, aby hostitel a NCPMOŠTPracujte se stejnou verzí EZSP. Jinak nemohou komunikovat tak, jak se očekává.
Abychom toho dosáhli, musí být první příkaz mezi hostitelem a NCP příkaz verze. Jinými slovy, hostitel musí před jakoukoli jinou komunikací získat verzi NCP EZSP. Pokud je verze EZSP odlišná s verzí EZSP na straně hostitele, musí být komunikace přerušena.
Implicitní požadavek za tím je to, že formát příkazu verze můžeNikdy se nezmění. Formát příkazu EZSP verze je jako níže:
: : Https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。
2.2. Randomizace dat
Podrobný proces randomizace je popsán v části 4.3 UG101. Celý rámec EZSP bude randomizován. Randomizace má exkluzivní nebo rám EZSP a pseudo-náhodnou sekvenci.
Níže je algoritmus generování pseudo-náhodné sekvence.
- Rand0 = 0 × 42
- Pokud je bit 0 Randi 0, Randi+1 = Randi >> 1
- Pokud je bit 0 Randi 1, Randi+1 = (Randi >> 1) ^ 0xb8
2.3. Přidejte ovládací bajt
Kontrolní bajt je data jednoho bajtu a měla by být přidána do hlavy rámečku. Formát je ilustrován níže uvedenou tabulkou:
Úplně existuje 6 druhů kontrolních bajtů. První tři se používají pro běžné rámce s daty EZSP, včetně dat, ACK a NAK. Poslední tři se používají bez běžných dat EZSP, včetně RST, RSTACK a chyby.
Formát prvního, RSTACK a chyby jsou popsány v části 3.1 až 3.3.
2.4. Vypočítejte CRC
16bitový CRC se počítá na bajtech z kontrolního bajtu do konce dat. Standardní CRCCCITT (G (x) = x16 + x12 + x5 + 1) je inicializován na 0xffff. Nejvýznamnější bajt předchází nejméně významným bajtu (velký endiánský režim).
2.5. Nádivka bajtů
Jak je popsáno v části 4.2 UG101, existují některé vyhrazené hodnoty bajtů používané pro zvláštní účely. Tyto hodnoty lze nalézt v následující tabulce:
Když se tyto hodnoty objeví v rámci, bude na datech provedeno zvláštní ošetření. - Vložte úschovný bajt 0x7d před vyhrazeným bajtem - obráťte bit5 tohoto vyhrazeného bajtu
Níže jsou uvedeny některé příklady tohoto algoritmu:
2.6. Přidejte koncový příznak
Posledním krokem je přidat koncový příznak 0x7e na konec rámečku. Poté mohou být data odeslána do portu UART.
3. Proces de-framing
Když jsou data přijata od UART, musíme pouze provést opačné kroky k jejich dekódování.
4. odkazy
Čas příspěvku: únor-08-2022