Autor: TorchIoTBootCamp
Enlace: https://zhuanlan.zhihu.com/p/339700391
De: Quora
1. Introducción
Silicon Labs ofrece una solución host+NCP para el diseño de pasarelas Zigbee. En esta arquitectura, el host se comunica con el NCP mediante interfaz UART o SPI. Generalmente, se utiliza UART por ser mucho más sencilla que SPI.
Silicon Labs también ha proporcionado un proyecto de muestra para el programa anfitrión, que es la muestraZ3GatewayHostEl ejemplo se ejecuta en un sistema tipo Unix. Algunos clientes podrían necesitar un ejemplo de host que se ejecute en un RTOS, pero lamentablemente, por el momento no existe un ejemplo de host basado en RTOS. Los usuarios deberán desarrollar su propio programa de host basado en RTOS.
Es importante comprender el protocolo de puerta de enlace UART antes de desarrollar un programa host personalizado. Tanto para los NCP basados en UART como para los basados en SPI, el host utiliza el protocolo EZSP para comunicarse con el NCP.EZSPes la abreviatura deProtocolo serie EmberZnety se define enUG100. Para NCP basado en UART, se implementa un protocolo de capa inferior para transportar datos EZSP de forma fiable a través de UART, que es elCENIZAprotocolo, abreviatura deHost serie asíncronoPara obtener más detalles sobre ASH, consulteUG101yUG115.
La relación entre EZSP y ASH se puede ilustrar mediante el siguiente diagrama:
El formato de datos del protocolo EZSP y ASH se puede ilustrar mediante el siguiente diagrama:
En esta página, presentaremos el proceso de enmarcado de los datos UART y algunos marcos clave que se utilizan con frecuencia en las pasarelas Zigbee.
2. Encuadre
El proceso general de elaboración del marco se puede ilustrar con el siguiente diagrama:
En este gráfico, los datos se refieren a la trama EZSP. En general, los procesos de tramado son: |No|Paso|Referencia|
|:-|:-|:-|
|1|Rellenar el marco EZSP|UG100|
|2|Aleatorización de datos|Sección 4.3 de UG101|
|3|Añadir el byte de control|Capítulo 2 y Capítulo 3 de UG101|
|4|Calcular el CRC|Sección 2.3 de UG101|
|5|Relleno de bytes|Sección 4.2 de UG101|
|6|Añadir la bandera de fin|Sección 2.4 de UG101|
2.1. Rellene el marco EZSP
El formato de trama EZSP se ilustra en el capítulo 3 de UG100.
Tenga en cuenta que este formato puede cambiar con las actualizaciones del SDK. Cuando cambie el formato, le asignaremos un nuevo número de versión. La última versión de EZSP es la 8 (EmberZnet 6.8) al momento de escribir este artículo.
Dado que el formato de trama EZSP puede variar entre diferentes versiones, existe un requisito obligatorio de que el host y el NCP...DEBEDeben funcionar con la misma versión de EZSP. De lo contrario, no podrán comunicarse como se espera.
Para lograrlo, el primer comando entre el host y el NCP debe ser el comando de versión. En otras palabras, el host debe obtener la versión EZSP del NCP antes de cualquier otra comunicación. Si la versión EZSP difiere de la versión EZSP del host, la comunicación debe interrumpirse.
El requisito implícito detrás de esto es que el formato del comando de versión puedaNUNCA CAMBIESEl formato del comando de versión de EZSP es el siguiente:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处.
2.2. Aleatorización de datos
El proceso de aleatorización detallado se describe en la sección 4.3 de UG101. Se aleatorizará todo el marco EZSP. La aleatorización consiste en aplicar la operación OR exclusiva al marco EZSP y a una secuencia pseudoaleatoria.
A continuación se muestra el algoritmo para generar la secuencia pseudoaleatoria.
- rand0 = 0×42
- Si el bit 0 de randi es 0, randi+1 = randi >> 1
- Si el bit 0 de randi es 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Añadir el byte de control
El byte de control es un dato de un byte y debe agregarse al inicio de la trama. El formato se ilustra en la tabla a continuación:
En total, existen 6 tipos de bytes de control. Los tres primeros se utilizan para tramas comunes con datos EZSP, incluyendo DATA, ACK y NAK. Los tres últimos se utilizan sin datos EZSP comunes, incluyendo RST, RSTACK y ERROR.
El formato de RST, RSTACK y ERROR se describe en las secciones 3.1 a 3.3.
2.4. Calcular el CRC
Se calcula un CRC de 16 bits sobre los bytes desde el byte de control hasta el final de los datos. El CRCCCITT estándar (g(x) = x16 + x12 + x5 + 1) se inicializa a 0xFFFF. El byte más significativo precede al menos significativo (modo big-endian).
2.5. Relleno de bytes
Tal como se describe en la sección 4.2 de UG101, existen algunos valores de bytes reservados que se utilizan para fines especiales. Estos valores se pueden encontrar en la siguiente tabla:
Cuando estos valores aparecen en el marco, se realizará un tratamiento especial a los datos: – Insertar el byte de escape 0x7D delante del byte reservado – Invertir el bit 5 de ese byte reservado
A continuación se muestran algunos ejemplos de este algoritmo:
2.6. Añadir la bandera de fin
El último paso consiste en añadir el indicador de fin 0x7E al final de la trama. Después, los datos se pueden enviar al puerto UART.
3. Proceso de desenfoque
Cuando se reciben datos desde la UART, solo necesitamos realizar los pasos inversos para decodificarlos.
4. Referencias
Fecha de publicación: 8 de febrero de 2022








