Sobre Zigbee EZSP UART

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

1. Introdução

Silicon Labs ofereceu uma solução host + NCP para design de gateway Zigbee. Nesta arquitetura, o host pode se comunicar com o NCP através da interface UART ou SPI. Mais comumente, o UART é usado porque é muito mais simples que o SPI.

Silicon Labs também forneceu um projeto de amostra para o programa host, que é o exemploZ3GatewayHost. A amostra é executada em um sistema semelhante ao Unix. Alguns clientes podem querer um exemplo de host que possa ser executado em um RTOS, mas, infelizmente, não há nenhum exemplo de host baseado em RTOS por enquanto. 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 usa o protocolo EZSP para se comunicar com o NCP.EZSPé curto paraProtocolo serial EmberZnet, e é definido emUG100. Para NCP baseado em UART, um protocolo de camada inferior é implementado para transportar dados EZSP de forma confiável através de UART.CINZASprotocolo, abreviação deHost serial assíncrono. Para obter mais detalhes sobre ASH, consulteUG101eUG115.

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

1

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

2

Nesta página, apresentaremos o processo de enquadramento dos dados UART e alguns quadros-chave que são frequentemente usados ​​no gateway Zigbee.

2. Enquadramento

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

3

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

|:-|:-|:-|

|1|Preencha a moldura EZSP|UG100|

|2|Aleatorização de dados|Seção 4.3 do UG101|

|3|Adicione o Byte de Controle|Cap2 e Chap3 do UG101|

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

|5|Recheio 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 do 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, daremos a ele um novo número de versão. O número da versão mais recente do EZSP era 8 quando este artigo foi escrito (EmberZnet 6.8).

Como o formato do quadro EZSP pode ser diferente entre diferentes versões, há um requisito obrigatório de que o host e o NCPDEVEtrabalhe com a mesma versão do EZSP. Caso contrário, eles não poderão se comunicar como esperado.

Para conseguir isso, o primeiro comando entre o host e o NCP deve ser o comando version. Em outras palavras, o host deve recuperar a versão EZSP do NCP antes de qualquer outra comunicação. Se a versão do EZSP for diferente da versão do EZSP do lado do host, a comunicação deverá ser abortada.

O requisito implícito por trás disso é que o formato do comando version possaNUNCA MUDE. O formato do comando da versão EZSP é como abaixo:

5

As explicações do campo de parâmetros 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. Quando este artigo é escrito, são 8.
7
Nome: TorchIoTBootCamp
链接: https://zhuanlan.zhihu.com/p/339700391
来源: 知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.2. Randomização de dados

O processo detalhado de randomização está descrito na seção 4.3 do UG101. Todo o quadro EZSP será randomizado. A randomização é OR exclusiva do quadro EZSP e uma sequência pseudo-aleatória.

Abaixo está o algoritmo de geração da sequência pseudo-aleató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. Adicione o byte de controle

O byte de controle é um dado de um byte e deve ser adicionado ao cabeçalho do quadro. O formato é ilustrado na tabela abaixo:

6

Totalmente, 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 do RST, RSTACK e ERROR está descrito nas seções 3.1 a 3.3.

2.4. Calcule o CRC

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

2.5. Recheio de Bytes

Conforme descrito na seção 4.2 do UG101, existem alguns valores de bytes reservados usados ​​para fins especiais. Esses valores podem ser encontrados na tabela a seguir:

7

Quando esses valores aparecerem no quadro, será feito um tratamento especial aos dados. – Inserir o byte de escape 0x7D na frente do byte reservado – Inverter o bit5 desse byte reservado

Abaixo estão alguns exemplos deste algoritmo:

8

2.6. Adicione o sinalizador final

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

3. Processo de desestruturação

Quando os dados são recebidos do UART, só precisamos fazer o procedimento inverso para decodificá-los.

4. Referências


Horário da postagem: 08 de fevereiro de 2022
Bate-papo on-line pelo WhatsApp!