Sobre Zigbee EZSP UART

Autor:TorchIoTBootCamp
Enllaç: https://zhuanlan.zhihu.com/p/339700391
De: Quora

1. Introducció

Silicon Labs ha ofert una solució host+NCP per al disseny de passarel·les Zigbee. En aquesta arquitectura, l'amfitrió es pot comunicar amb l'NCP a través d'una interfície UART o SPI. El més habitual és utilitzar UART, ja que és molt més senzill que SPI.

Silicon Labs també ha proporcionat un projecte de mostra per al programa amfitrió, que és la mostraHost de passarel·la Z3L'exemple s'executa en un sistema tipus Unix. Alguns clients poden voler un exemple d'amfitrió que es pugui executar en un RTOS, però malauradament, de moment no hi ha cap exemple d'amfitrió basat en RTOS. Els usuaris han de desenvolupar el seu propi programa d'amfitrió basat en RTOS.

És important entendre el protocol de passarel·la UART abans de desenvolupar un programa d'amfitrió personalitzat. Tant per a NCP basat en UART com per a NCP basat en SPI, l'amfitrió utilitza el protocol EZSP per comunicar-se amb l'NCP.EZSPés l'abreviatura deProtocol sèrie EmberZnet, i es defineix enUG100Per a NCP basat en UART, s'implementa un protocol de capa inferior per transportar dades EZSP de manera fiable sobre UART, que és elCENDRAprotocol, abreviatura deAmfitrió sèrie asíncronPer obtenir més informació sobre ASH, consulteuUG101iUG115.

La relació entre EZSP i ASH es pot il·lustrar amb el diagrama següent:

1

El format de dades de l'EZSP i del protocol ASH es pot il·lustrar amb el diagrama següent:

2

En aquesta pàgina, introduirem el procés d'emmarcar les dades UART i alguns fotogrames clau que s'utilitzen amb freqüència a la passarel·la Zigbee.

2. Emmarcament

El procés general d'enquadrament es pot il·lustrar amb el següent gràfic:

3

En aquest gràfic, les dades fan referència al marc EZSP. En general, els processos d'enquadrament són: |Sense|Pas|Referència|

|:-|:-|:-|

|1|Ompliu el marc EZSP|UG100|

|2|Aleatorització de dades|Secció 4.3 de la UG101|

|3|Afegiu el byte de control|Capítol2 i Capítol3 de UG101|

|4|Calcula el CRC|Secció 2.3 de la UG101|

|5|Byte Stuffing|Secció 4.2 de la UG101|

|6|Afegiu el senyalador de finalització|Secció 2.4 de la UG101|

2.1. Ompliu el marc EZSP

El format de la trama EZSP s'il·lustra al capítol 3 de l'UG100.

4

Tingueu en compte que aquest format pot canviar quan s'actualitzi l'SDK. Quan el format canviï, li donarem un número de versió nou. El número de versió més recent de l'EZSP és el 8 quan s'escriu aquest article (EmberZnet 6.8).

Com que el format del marc EZSP pot ser diferent entre versions diferents, hi ha un requisit obligatori que l'amfitrió i l'NCPOBLIGATORItreballar amb la mateixa versió d'EZSP. Altrament, no es poden comunicar com s'esperava.

Per aconseguir això, la primera ordre entre l'amfitrió i l'NCP ha de ser l'ordre de versió. En altres paraules, l'amfitrió ha de recuperar la versió EZSP de l'NCP abans de qualsevol altra comunicació. Si la versió EZSP és diferent de la versió EZSP del costat de l'amfitrió, la comunicació s'ha d'interrompre.

El requisit implícit darrere d'això és que el format de l'ordre de versió puguiNO CANVIIS MAIEl format de l'ordre de la versió EZSP és el següent:

5

Les explicacions del camp de paràmetre i el format de la resposta de versió es poden trobar al capítol 4 de l'UG100. El camp de paràmetre és la versió EZSP del programa amfitrió. Quan s'escriu aquest article, és la versió 8.
7
作者:TorchIoTBootCamp
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出倂

2.2. Aleatorització de dades

El procés detallat d'aleatorització es descriu a la secció 4.3 de la UG101. Tot el marc EZSP serà aleatoritzat. L'aleatorització és mitjançant una operació OR exclusiva entre el marc EZSP i una seqüència pseudoaleatòria.

A continuació es mostra l'algoritme per generar la seqüència pseudoaleatòria.

  • rand0 = 0×42
  • si el bit 0 de randi és 0, randi+1 = randi >> 1
  • si el bit 0 de randi és 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Afegir el byte de control

El byte de control és una dada d'un byte i s'ha d'afegir a l'encapçalament del marc. El format s'il·lustra amb la taula següent:

6

En total, hi ha 6 tipus de bytes de control. Els tres primers s'utilitzen per a trames comunes amb dades EZSP, incloent-hi DATA, ACK i NAK. Els tres últims s'utilitzen sense dades EZSP comunes, incloent-hi RST, RSTACK i ERROR.

El format de RST, RSTACK i ERROR es descriu a les seccions 3.1 a 3.3.

2.4. Calcula el CRC

Un CRC de 16 bits es calcula en bytes des del byte de control fins al final de les dades. El CRCCCITT estàndard (g(x) = x16 + x12 + x5 + 1) s'inicialitza a 0xFFFF. El byte més significatiu precedeix el byte menys significatiu (mode big-endian).

2.5. Farciment de bytes

Com es descriu a la secció 4.2 de la UG101, hi ha alguns valors de bytes reservats que s'utilitzen per a finalitats especials. Aquests valors es poden trobar a la taula següent:

7

Quan aquests valors apareixen al marc, es farà un tractament especial a les dades. – Inserir el byte d'escapada 0x7D davant del byte reservat – Invertir el bit5 d'aquest byte reservat

A continuació es mostren alguns exemples d'aquest algoritme:

8

2.6. Afegiu el senyalador de finalització

El pas final és afegir el senyalador final 0x7E al final de la trama. Després d'això, les dades es poden enviar al port UART.

3. Procés de desenquadrament

Quan rebem dades de l'UART, només cal fer els passos inversos per descodificar-les.

4. Referències


Data de publicació: 08 de febrer de 2022
Xat en línia per WhatsApp!