Autor: TorchIoTBootCamp
Ligazón: https://zhuanlan.zhihu.com/p/339700391
De: Quora
1. Introdución
Silicon Labs ofreceu unha solución host+NCP para o deseño de pasarela Zigbee.Nesta arquitectura, o host pode comunicarse co NCP a través da interface UART ou SPI.Máis comúnmente, úsase UART porque é moito máis sinxelo que SPI.
Silicon Labs tamén proporcionou un proxecto de mostra para o programa de acollida, que é a mostraZ3GatewayHost
.A mostra execútase nun sistema tipo Unix.Algúns clientes poden querer unha mostra de host que se poida executar nun RTOS, pero, por desgraza, non hai ningunha mostra de host baseada en RTOS polo momento.Os usuarios deben desenvolver o seu propio programa de aloxamento baseado en RTOS.
É importante comprender o protocolo de pasarela UART antes de desenvolver un programa host personalizado.Tanto para o NCP baseado en UART como para o NCP baseado en SPI, o host usa o protocolo EZSP para comunicarse co NCP.EZSPé a abreviatura deProtocolo serie EmberZnet, e defínese enUG100.Para NCP baseado en UART, implícase un protocolo de capa inferior para transportar datos EZSP de forma fiable a través de UART, ese é oFIXOprotocolo, abreviatura deHost serie asíncrono.Para obter máis detalles sobre ASH, consulteUG101eUG115.
A relación entre EZSP e ASH pódese ilustrar no seguinte diagrama:
O formato de datos do EZSP e do protocolo ASH pódese ilustrar no seguinte diagrama:
Nesta páxina, presentaremos o proceso de enmarcar os datos UART e algúns fotogramas clave que se usan con frecuencia na pasarela Zigbee.
2. Encadramento
O proceso xeral de encadramento pódese ilustrar no seguinte cadro:
Neste gráfico, os datos significan o marco EZSP.En xeral, os procesos de enmarcado son: |Non|Paso|Referencia|
|:-|:-|:-|
|1|Enche o cadro EZSP|UG100|
|2|Aleatorización de datos|Artigo 4.3 da UG101|
|3|Engadir o byte de control|Chap2 e Chap3 de UG101|
|4|Calcular o CRC|Artigo 2.3 da UG101|
|5|Recheo de bytes|Sección 4.2 da UG101|
|6|Engadir a bandeira de finalización|Sección 2.4 da UG101|
2.1.Encha o cadro EZSP
O formato de cadro EZSP está ilustrado no capítulo 3 de UG100.
Preste atención a que este formato pode cambiar cando se actualice o SDK.Cando o formato cambie, darémoslle un novo número de versión.O número de versión máis recente de EZSP é 8 cando se escribe este artigo (EmberZnet 6.8).
Como o formato de fotograma EZSP pode ser diferente entre as diferentes versións, hai un requisito obrigatorio de que o host e o NCPDEBEtraballar coa mesma versión EZSP.En caso contrario, non poden comunicarse como se esperaba.
Para conseguilo, o primeiro comando entre o host e o NCP debe ser o comando version.Noutras palabras, o host debe recuperar a versión EZSP do NCP antes de calquera outra comunicación.Se a versión EZSP é diferente da versión EZSP do host, a comunicación debe ser abortada.
O requisito implícito detrás disto é que o formato do comando de versión podeNUNCA CAMBIAR.O formato de comando da versión EZSP é o seguinte:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注椎出出
2.2.Aleatorización de datos
O proceso de aleatorización detallado descríbese na sección 4.3 da UG101.Todo o cadro EZSP será aleatorizado.A aleatorización é exclusiva-OU o marco EZSP e unha secuencia pseudoaleatoria.
A continuación móstrase o algoritmo de xeración da secuencia pseudoaleatoria.
- rand0 = 0×42
- se o bit 0 de randi é 0, randi+1 = randi >> 1
- se o bit 0 de randi é 1, randi+1 = (randi >> 1) ^ 0xB8
2.3.Engade o byte de control
O byte de control é un dato dun byte e debe engadirse á cabeceira da trama.O formato está ilustrado coa seguinte táboa:
En total, hai 6 tipos de bytes de control.Os tres primeiros úsanse para fotogramas comúns con datos EZSP, incluíndo DATA, ACK e NAK.Os tres últimos úsanse sen datos comúns de EZSP, incluíndo RST, RSTACK e ERROR.
O formato de RST, RSTACK e ERROR descríbese nas seccións 3.1 a 3.3.
2.4.Calcula o CRC
Un CRC de 16 bits calcúlase en bytes desde o byte de control ata o final dos datos.O CRCCCITT estándar (g(x) = x16 + x12 + x5 + 1) inicialízase a 0xFFFF.O byte máis significativo precede ao byte menos significativo (modo big-endian).
2.5.Recheo de bytes
Como se describe na sección 4.2 de UG101, hai algúns valores de bytes reservados usados para propósitos especiais.Estes valores pódense atopar na seguinte táboa:
Cando estes valores aparezan no marco, farase un tratamento especial aos datos.– Insira o byte de escape 0x7D diante do byte reservado – Inverte o bit5 dese byte reservado
A continuación móstranse algúns exemplos deste algoritmo:
2.6.Engade a bandeira final
O paso final é engadir a bandeira final 0x7E ao final do cadro.Despois diso, os datos pódense enviar ao porto UART.
3. Proceso de de-framing
Cando se reciben datos do UART, só necesitamos facer os pasos inversos para decodificalos.
4. Referencias
Hora de publicación: 08-02-2022