Sobre o Zigbee EZSP UART

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

1. Introdução

A Silicon Labs oferece uma solução host+NCP para projetos de gateways Zigbee. Nessa arquitetura, o host se comunica com o NCP por meio de interfaces UART ou SPI. A UART é a mais utilizada por ser muito mais simples que a SPI.

A Silicon Labs também forneceu um projeto de exemplo para o programa hospedeiro, que é o exemplo.Z3GatewayHostO exemplo é executado em um sistema do tipo Unix. Alguns clientes podem desejar um exemplo de host que possa ser executado em um RTOS, mas infelizmente, não há nenhum exemplo de host baseado em RTOS disponível no momento. Os usuários precisam desenvolver seu próprio programa host baseado em RTOS.

É importante compreender o protocolo de gateway UART antes de desenvolver um programa host personalizado. Tanto para NCP baseado em UART quanto para NCP baseado em SPI, o host utiliza o protocolo EZSP para se comunicar com o NCP.EZSPé abreviação deProtocolo Serial EmberZnete é definido emUG100Para NCP baseado em UART, um protocolo de camada inferior é implementado para transportar dados EZSP de forma confiável via UART.CINZASprotocolo, abreviação deHost Serial AssíncronoPara obter mais detalhes sobre ASH, consulteUG101eUG115.

A relação entre EZSP e ASH pode ser ilustrada pelo seguinte diagrama:

1

O formato de dados do EZSP e do protocolo ASH pode ser ilustrado pelo seguinte diagrama:

2

Nesta página, apresentaremos o processo de enquadramento dos dados UART e alguns quadros-chave frequentemente usados ​​em gateways Zigbee.

2. Enquadramento

O processo geral de enquadramento pode ser ilustrado pelo seguinte gráfico:

3

Neste gráfico, os dados representam o quadro EZSP. Em geral, os processos de enquadramento são: |Nenhum|Etapa|Referência|

|:-|:-|:-|

|1|Preencha a moldura EZSP|UG100|

|2|Randomização de Dados|Seção 4.3 do UG101|

|3|Adicionar o Byte de Controle|Capítulos 2 e 3 do Guia do Usuário 101|

|4|Calcular o CRC|Seção 2.3 de UG101|

|5|Preenchimento de bytes|Seção 4.2 do UG101|

|6|Adicionar o sinalizador final|Seção 2.4 do UG101|

2.1. Preencha o quadro EZSP

O formato de quadro EZSP é ilustrado no Capítulo 3 do UG100.

4

Observe que esse formato pode mudar quando o SDK for atualizado. Quando o formato mudar, atribuiremos um novo número de versão. A versão mais recente do EZSP no momento da redação deste artigo é a 8 (EmberZnet 6.8).

Como o formato do quadro EZSP pode variar entre diferentes versões, é obrigatório que o host e o NCP (Network Controller Point) utilizem o mesmo formato.DEVEEles precisam usar a mesma versão do EZSP. Caso contrário, não conseguirão se comunicar como esperado.

Para isso, o primeiro comando entre o host e o NCP deve ser o comando de versão. Em outras palavras, o host deve obter a versão do EZSP do NCP antes de qualquer outra comunicação. Se a versão do EZSP for diferente da versão do EZSP do host, a comunicação deve ser interrompida.

O requisito implícito por trás disso é que o formato do comando de versão possaNUNCA MUDEO formato de comando da versão EZSP é semelhante ao seguinte:

5

As explicações sobre o campo de parâmetro e o formato da resposta da versão podem ser encontradas no Capítulo 4 do UG100. O campo de parâmetro é a versão EZSP do programa host. No momento da redação deste artigo, a versão é 8.
7
Nome: TorchIoTBootCamp
链接: https://zhuanlan.zhihu.com/p/339700391
来源: 知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.2. Aleatorização de Dados

O processo detalhado de randomização é descrito na seção 4.3 do UG101. Toda a estrutura EZSP será randomizada. A randomização consiste em realizar um OU exclusivo entre a estrutura EZSP e uma sequência pseudoaleatória.

A seguir, apresentamos o algoritmo para gerar a sequência pseudoaleatória.

  • rand0 = 0×42
  • Se o bit 0 de randi for 0, randi+1 = randi >> 1
  • Se o bit 0 de randi for 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Adicionar o byte de controle

O byte de controle é um dado de um byte e deve ser adicionado ao início do quadro. O formato é ilustrado na tabela abaixo:

6

Ao todo, existem 6 tipos de bytes de controle. Os três primeiros são usados ​​para quadros comuns com dados EZSP, incluindo DATA, ACK e NAK. Os três últimos são usados ​​sem dados EZSP comuns, incluindo RST, RSTACK e ERROR.

O formato de RST, RSTACK e ERROR é descrito nas seções 3.1 a 3.3.

2.4. Calcule o CRC

Um CRC de 16 bits é calculado nos bytes desde o byte de controle até o final dos dados. O padrão CRCCCITT (g(x) = x16 + x12 + x5 + 1) é inicializado com 0xFFFF. O byte mais significativo precede o byte menos significativo (modo big-endian).

2.5. Inserção de bytes

Conforme descrito na seção 4.2 do UG101, existem alguns valores de byte reservados para fins específicos. Esses valores podem ser encontrados na tabela a seguir:

7

Quando esses valores aparecerem no quadro, um tratamento especial será aplicado aos dados. – Inserir o byte de escape 0x7D antes do byte reservado – Inverter o bit 5 desse byte reservado

Abaixo seguem alguns exemplos desse algoritmo:

8

2.6. Adicionar a flag de fim

A etapa final consiste em adicionar o sinalizador de fim 0x7E ao final do quadro. Depois disso, os dados podem ser enviados para a porta UART.

3. Processo de Desconstrução

Quando os dados são recebidos da UART, basta realizar os passos inversos para decodificá-los.

4. Referências


Data da publicação: 08/02/2022
Bate-papo online pelo WhatsApp!