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·la Zigbee. En aquesta arquitectura, l'amfitrió es pot comunicar amb l'NCP mitjançant la interfície UART o SPI. Amb més freqüència, s'utilitza UART perquè és molt més senzill que SPI.
Silicon Labs també ha proporcionat un projecte de mostra per al programa amfitrió, que és la mostraZ3GatewayHost
. La mostra s'executa en un sistema semblant a Unix. És possible que alguns clients vulguin una mostra d'amfitrió que es pugui executar en un RTOS, però, malauradament, no hi ha cap mostra d'amfitrió basada en RTOS de moment. Els usuaris han de desenvolupar el seu propi programa amfitrió basat en RTOS.
És important entendre el protocol de passarel·la UART abans de desenvolupar un programa amfitrió personalitzat. Tant per a NCP basat en UART com per NCP basat en SPI, l'amfitrió utilitza el protocol EZSP per comunicar-se amb l'NCP.EZSPés curt perProtocol sèrie EmberZnet, i es defineix aUG100. Per a NCP basat en UART, s'implementa un protocol de capa inferior per transportar dades EZSP de manera fiable a través d'UART, aquest és elCENDREprotocol, abreviatura deAmfitrió sèrie asíncron. Per obtenir més detalls sobre ASH, consulteuUG101iUG115.
La relació entre EZSP i ASH es pot il·lustrar amb el diagrama següent:
El format de dades de l'EZSP i el protocol ASH es pot il·lustrar amb el diagrama següent:
En aquesta pàgina, presentarem el procés d'enquadrament de les dades UART i alguns fotogrames clau que s'utilitzen amb freqüència a la passarel·la Zigbee.
2. Enquadrament
El procés d'enquadrament general es pot il·lustrar amb el següent gràfic:
En aquest gràfic, les dades signifiquen el marc EZSP. En general, els processos d'enquadrament són: |No|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|Cap2 i Cap3 de UG101|
|4|Calculeu el CRC|Secció 2.3 de la UG101|
|5|Byte Stuff|Secció 4.2 de la UG101|
|6|Afegiu la bandera de finalització|Secció 2.4 de la UG101|
2.1. Ompliu el marc EZSP
El format de marc EZSP s'il·lustra al capítol 3 de l'UG100.
Tingueu en compte que aquest format pot canviar quan s'actualitzi l'SDK. Quan canviï el format, li donarem un nou número de versió. El número de versió més recent d'EZSP és 8 quan s'escriu aquest article (EmberZnet 6.8).
Com que el format de trama EZSP pot ser diferent entre les diferents versions, hi ha un requisit obligatori que l'amfitrió i NCPDEUtreballar amb la mateixa versió EZSP. En cas contrari, no es poden comunicar com s'esperava.
Per aconseguir-ho, la primera ordre entre l'amfitrió i l'NCP ha de ser l'ordre version. En altres paraules, l'amfitrió ha de recuperar la versió EZSP del NCP abans de qualsevol altra comunicació. Si la versió EZSP és diferent de la versió EZSP del costat amfitrió, la comunicació s'ha d'avortar.
El requisit implícit darrere d'això és que el format de l'ordre de versió puguiNO CANVIIS MAI. El format d'ordre de la versió EZSP és el següent:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出倂
2.2. Aleatorització de dades
El procés d'aleatorització detallat es descriu a la secció 4.3 de la UG101. Tot el marc EZSP serà aleatoritzat. L'aleatorització és exclusiva-OR el marc EZSP i una seqüència pseudo-aleatòria.
A continuació es mostra l'algorisme 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. Afegiu el byte de control
El byte de control és una dada d'un byte i s'ha d'afegir al capçal del marc. El format s'il·lustra amb la taula següent:
En total, hi ha 6 tipus de bytes de control. Els tres primers s'utilitzen per a fotogrames comuns amb dades EZSP, incloses DATA, ACK i NAK. Els tres últims s'utilitzen sense dades comunes d'EZSP, inclosos 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
Tal com es descriu a la secció 4.2 d'UG101, hi ha alguns valors de byte reservats utilitzats per a un propòsit especial. Aquests valors es poden trobar a la taula següent:
Quan aquests valors apareixen al marc, es farà un tractament especial a les dades. – Insereix el byte d'escapada 0x7D davant del byte reservat – Inverteix el bit5 d'aquest byte reservat
A continuació es mostren alguns exemples d'aquest algorisme:
2.6. Afegiu la bandera final
El pas final és afegir la bandera final 0x7E al final del marc. Després d'això, les dades es poden enviar al port UART.
3. Procés de desenquadrament
Quan es reben dades de l'UART, només hem de fer els passos inversos per descodificar-les.
4. Referències
Hora de publicació: 08-feb-2022