À propos de Zigbee EZSP UART

Auteur : TorchIoTBootCamp
Lien:https://zhuanlan.zhihu.com/p/339700391
Source : Quora

1. Introduction

Silicon Labs propose une solution hôte + NCP pour la conception de passerelles Zigbee. Dans cette architecture, l'hôte communique avec le NCP via une interface UART ou SPI. L'interface UART est généralement privilégiée car beaucoup plus simple que l'interface SPI.

Silicon Labs a également fourni un exemple de projet pour le programme hôte, qui est l'exempleHôte de passerelle Z3L'exemple s'exécute sur un système de type Unix. Certains clients pourraient souhaiter un exemple d'hôte compatible avec un système d'exploitation temps réel (RTOS), mais malheureusement, aucun exemple d'hôte basé sur un RTOS n'est disponible pour le moment. Les utilisateurs doivent donc développer leur propre programme hôte basé sur un RTOS.

Il est important de comprendre le protocole de passerelle UART avant de développer un programme hôte personnalisé. Que ce soit pour les NCP basés sur UART ou SPI, l'hôte utilise le protocole EZSP pour communiquer avec le NCP.EZSPest l'abréviation deProtocole série EmberZnet, et il est défini dansUG100Pour les NCP basés sur UART, un protocole de couche inférieure est implémenté pour transporter les données EZSP de manière fiable via UART.CENDREprotocole, abréviation deHôte série asynchronePour plus de détails sur ASH, veuillez consulterUG101etUG115.

La relation entre EZSP et ASH peut être illustrée par le diagramme suivant :

1

Le format des données des protocoles EZSP et ASH peut être illustré par le diagramme suivant :

2

Sur cette page, nous allons présenter le processus de cadrage des données UART et quelques trames clés fréquemment utilisées dans la passerelle Zigbee.

2. Encadrement

Le processus général de cadrage peut être illustré par le schéma suivant :

3

Dans ce graphique, les données correspondent au cadre EZSP. En général, les processus de cadrage sont les suivants : |N°|Étape|Référence|

|:-|:-|:-|

|1|Remplir le cadre EZSP|UG100|

|2|Randomisation des données|Section 4.3 du cours UG101|

|3|Ajouter l'octet de contrôle|Chapitres 2 et 3 du guide UG101|

|4|Calculer le CRC|Section 2.3 de UG101|

|5|Bourrage d'octets|Section 4.2 du cours UG101|

|6|Ajouter le drapeau de fin|Section 2.4 du guide UG101|

2.1. Remplir le cadre EZSP

Le format de trame EZSP est illustré au chapitre 3 du document UG100.

4

Veuillez noter que ce format est susceptible de changer lors des mises à jour du SDK. En cas de changement de format, un nouveau numéro de version lui sera attribué. À la date de rédaction de cet article, la version EZSP la plus récente est la version 8 (EmberZnet 6.8).

Le format de trame EZSP pouvant varier d'une version à l'autre, il est impératif que l'hôte et le NCP soient compatibles.DOITIls doivent utiliser la même version d'EZSP. Sinon, la communication ne pourra pas se dérouler comme prévu.

Pour ce faire, la première commande échangée entre l'hôte et le NCP doit être la commande de version. Autrement dit, l'hôte doit récupérer la version EZSP du NCP avant toute autre communication. Si la version EZSP du NCP diffère de celle de l'hôte, la communication doit être interrompue.

L'exigence implicite derrière cela est que le format de la commande de version puisseNE JAMAIS CHANGERLe format des commandes de la version EZSP est le suivant :

5

Les explications concernant le champ de paramètre et le format de la réponse de version se trouvent au chapitre 4 du document UG100. Le champ de paramètre correspond à la version EZSP du programme hôte. À la date de rédaction de cet article, il s'agit de la version 8.
7
Exemple : TorchIoTBootCamp
Description : https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.2. Randomisation des données

Le processus de randomisation détaillé est décrit dans la section 4.3 du document UG101. L'ensemble de la trame EZSP sera randomisé. La randomisation consiste à appliquer un OU exclusif à la trame EZSP et à une séquence pseudo-aléatoire.

Ci-dessous figure l'algorithme de génération de la séquence pseudo-aléatoire.

  • rand0 = 0×42
  • si le bit 0 de randi est 0, randi+1 = randi >> 1
  • Si le bit 0 de randi vaut 1, randi+1 = (randi >> 1) ^ 0xB8

2.3. Ajouter l'octet de contrôle

L'octet de contrôle est une donnée d'un octet et doit être ajouté en tête de trame. Le format est illustré dans le tableau ci-dessous :

6

Il existe au total six types d'octets de contrôle. Les trois premiers sont utilisés pour les trames communes contenant des données EZSP : DATA, ACK et NAK. Les trois derniers sont utilisés sans données EZSP communes : RST, RSTACK et ERROR.

Le format des RST, RSTACK et ERROR est décrit dans les sections 3.1 à 3.3.

2.4. Calculer le CRC

Un CRC 16 bits est calculé sur les octets allant de l'octet de contrôle jusqu'à la fin des données. Le CRC standard (g(x) = x16 + x12 + x5 + 1) est initialisé à 0xFFFF. L'octet de poids fort précède l'octet de poids faible (mode big-endian).

2.5. Bourrage d'octets

Comme décrit dans la section 4.2 du document UG101, certaines valeurs d'octets sont réservées à des fins spécifiques. Ces valeurs sont répertoriées dans le tableau suivant :

7

Lorsque ces valeurs apparaissent dans la trame, un traitement spécial sera appliqué aux données : – Insérer l’octet d’échappement 0x7D devant l’octet réservé – Inverser le bit 5 de cet octet réservé

Voici quelques exemples de cet algorithme :

8

2.6. Ajouter le drapeau de fin

La dernière étape consiste à ajouter l'indicateur de fin 0x7E à la fin de la trame. Ensuite, les données peuvent être envoyées au port UART.

3. Processus de décadrage

Lorsque des données sont reçues via l'UART, il suffit d'effectuer les étapes inverses pour les décoder.

4. Références


Date de publication : 8 février 2022
Chat en ligne WhatsApp !