Autor: TorchIoTBootCamp
Odkaz: https://zhuanlan.zhihu.com/p/339700391
Od: Quora
1. Úvod
Společnost Silicon Labs nabídla řešení host+NCP pro návrh brány Zigbee. V této architektuře může hostitel komunikovat s NCP prostřednictvím rozhraní UART nebo SPI. Nejčastěji se používá UART, protože je mnohem jednodušší než SPI.
Silicon Labs také poskytla ukázkový projekt pro hostitelský program, který je ukázkouZ3GatewayHost
. Ukázka běží na systému podobnému Unixu. Někteří zákazníci mohou chtít vzorek hostitele, který může běžet na RTOS, ale bohužel v současné době neexistuje žádný vzorek hostitele založený na RTOS. Uživatelé si musí vyvinout 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 brány UART. Pro NCP založené na UART i NCP založené na SPI hostitel používá ke komunikaci s NCP protokol EZSP.EZSPje zkratka proSériový protokol EmberZnet, a je definován vUG100. Pro NCP na bázi UART je implementován protokol nižší vrstvy, který spolehlivě přenáší data EZSP přes UART, to jePOPELprotokol, zkratkaAsynchronní sériový hostitel. Další podrobnosti o ASH naleznete naUG101aUG115.
Vztah mezi EZSP a ASH lze ilustrovat následujícím diagramem:
Formát dat protokolu EZSP a ASH lze znázornit následujícím diagramem:
Na této stránce představíme proces rámování dat UART a některé klíčové snímky, které se často používají v bráně Zigbee.
2. Rámování
Obecný proces rámování lze ilustrovat na následujícím grafu:
V tomto grafu data znamenají rámec EZSP. Obecně jsou rámcové procesy: |No|Step|Reference|
|:-|:-|:-|
|1|Vyplňte rám EZSP|UG100|
|2|Randomizace dat|Oddíl 4.3 UG101|
|3|Přidat řídicí bajt|Kapitola 2 a Kapitola 3 z UG101|
|4|Vypočítejte CRC|Oddíl 2.3 UG101|
|5|Vyplňování bajtů|Oddíl 4.2 UG101|
|6|Přidat koncový příznak|Oddíl 2.4 UG101|
2.1. Vyplňte rám EZSP
Formát rámce EZSP je znázorněn v kapitole 3 UG100.
Pozor, tento formát se může při upgradu SDK změnit. Když se formát změní, přidělíme mu nové číslo verze. Poslední číslo verze EZSP je v době napsání tohoto článku 8 (EmberZnet 6.8).
Vzhledem k tomu, že formát rámce EZSP se může v různých verzích lišit, existuje povinný požadavek, aby hostitel a NCPMOŠTpracovat se stejnou verzí EZSP. Jinak nemohou komunikovat podle očekávání.
Aby toho bylo dosaženo, musí být prvním příkazem mezi hostitelem a NCP příkaz version. Jinými slovy, hostitel musí před jakoukoli další komunikací načíst verzi EZSP NCP. Pokud se verze EZSP liší od verze EZSP na hostitelské straně, musí být komunikace přerušena.
Implicitním požadavkem za tím je, že formát příkazu version můžeNIKDY SE NEMĚŇTE. Formát příkazu verze EZSP je následující:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转转请注明凂
2.2. Randomizace dat
Podrobný proces randomizace je popsán v sekci 4.3 UG101. Celý snímek EZSP bude randomizován. Randomizace je exkluzivní NEBO rámec EZSP a pseudonáhodná sekvence.
Níže je uveden algoritmus generování pseudoná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 řídicí bajt
Řídicí bajt je jednobajtová data a měla by být přidána do hlavy rámce. Formát je znázorněn v tabulce níže:
Celkem existuje 6 druhů řídicích bajtů. První tři se používají pro běžné rámce s daty EZSP, včetně DATA, ACK a NAK. Poslední tři se používají bez běžných dat EZSP, včetně RST, RSTACK a ERROR.
Formát RST, RSTACK a ERROR je popsán v části 3.1 až 3.3.
2.4. Vypočítejte CRC
16bitové CRC se vypočítává na bytech od řídicího bajtu až do konce dat. Standardní CRCCCITT (g(x) = x16 + x12 + x5 + 1) je inicializováno na 0xFFFF. Nejvýznamnější bajt předchází nejméně významný bajt (režim big-endian).
2.5. Byte Náplň
Jak je popsáno v části 4.2 UG101, existují některé rezervované hodnoty bajtů používané pro speciální účely. Tyto hodnoty najdete v následující tabulce:
Když se tyto hodnoty objeví v rámci, bude s daty provedeno speciální zpracování. – Vložte únikový bajt 0x7D před rezervovaný bajt – Otočte bit 5 tohoto rezervovaného bajtu
Níže jsou uvedeny některé příklady tohoto algoritmu:
2.6. Přidejte koncový příznak
Posledním krokem je přidání koncového příznaku 0x7E na konec rámce. Poté mohou být data odeslána na port UART.
3. Proces de-framing
Když jsou data přijímána z UART, musíme je dekódovat pouze obrácenými kroky.
4. Reference
Čas odeslání: Únor-08-2022