Auteur: TorchiotbootCamp
Lien: https: //zhuanlan.zhihu.com/p/339700391
De : Quora
1. Introduction
Silicon Labs a offert une solution hôte + NCP pour la conception de la passerelle Zigbee. Dans cette architecture, l'hôte peut communiquer avec le NCP via l'interface UART ou SPI. Le plus souvent, l'UART est utilisé car il est beaucoup plus simple que SPI.
Silicon Labs a également fourni un exemple de projet pour le programme hôte, qui est l'échantillonZ3Gatewayhost
. L'échantillon fonctionne sur un système de type Unix. Certains clients peuvent vouloir un échantillon d'hôte qui peut fonctionner sur un RTOS, mais malheureusement, il n'y a pas d'échantillon d'hôte basé sur RTOS pour le moment. Les utilisateurs doivent développer leur propre programme hôte basé sur RTOS.
Il est important de comprendre le protocole UART Gateway avant de développer un programme hôte personnalisé. Pour le NCP basé sur UART et le NCP basé sur SPI, l'hôte utilise le protocole EZSP pour communiquer avec le NCP.Ezspest court pourProtocole série Emberznet, et il est défini dansUG100. Pour le NCP basé sur l'UART, un protocole de couche inférieur est implémenté pour transporter des données EZSP de manière fiable sur UART, c'est leCENDREprotocole, abréviation deHôte en série asynchrone. Pour plus de détails sur Ash, veuillez vous référer àUG101etUG115.
La relation entre EZSP et Ash peut être illustrée par le diagramme suivant:
Le format de données de l'EZSP et du protocole ASH peut être illustré par le diagramme suivant:
Dans cette page, nous présenterons le processus de cadrage des données UART et certaines cadres clés qui sont fréquemment utilisés dans la passerelle Zigbee.
2. Cadre
Le processus de trame général peut être illustré par le tableau suivant:
Dans ce graphique, les données désignent le cadre EZSP. En général, les processus de cadrage sont: | Non | Étape | Référence |
|: - |: - |: - |
| 1 | Remplissez le cadre EZSP | UG100 |
| 2 | Randomisation des données | Section 4.3 de UG101 |
| 3 | Ajouter l'octet de contrôle | CHAP2 et CHAP3 de UG101 |
| 4 | Calculer la CRC | Section 2.3 de UG101 |
| 5 | Rupture des octets | Section 4.2 de UG101 |
| 6 | Ajouter l'indicateur de fin | Section 2.4 de UG101 |
2.1. Remplissez le cadre EZSP
Le format de trame EZSP est illustré dans Chap 3 de UG100.
Faites attention que ce format peut changer lorsque les mises à niveau du SDK. Lorsque le format change, nous lui donnerons un nouveau numéro de version. Le dernier numéro de version EZSP est 8 lorsque cet article est écrit (Emberznet 6.8).
Comme le format de trame EZSP peut être différent entre différentes versions, il existe une exigence obligatoire que l'hôte et le NCPDOITTravaillez avec la même version EZSP. Sinon, ils ne peuvent pas communiquer comme prévu.
Pour y parvenir, la première commande entre l'hôte et le NCP doit être la commande de version. En d'autres termes, l'hôte doit récupérer la version EZSP du NCP avant toute autre communication. Si la version EZSP est différente avec la version EZSP du côté hôte, la communication doit être interrompue.
L'exigence implicite derrière cela est que le format de la commande de version peutNe changez jamais. Le format de commande de la version EZSP est comme ci-dessous:
链接 : 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 de l'UG101. L'ensemble du cadre EZSP sera randomisé. La randomisation consiste à exclusivité ou à la trame EZSP et à une séquence pseudo-aléatoire.
Vous trouverez ci-dessous l'algorithme de la génération de la séquence pseudo-aléatoire.
- rand0 = 0 × 42
- Si Bit 0 de Randi est 0, Randi + 1 = Randi >> 1
- Si Bit 0 de Randi est 1, Randi + 1 = (Randi >> 1) ^ 0xb8
2.3. Ajouter l'octet de commande
L'octet de contrôle est un octet d'un octet et doit être ajouté à la tête du cadre. Le format est illustré avec le tableau ci-dessous:
Totalement, il y a 6 types d'octets de contrôle. Les trois premiers sont utilisés pour les cadres communs avec les données EZSP, y compris les données, ACK et NAK. Les trois derniers sont utilisés sans données EZSP courantes, y compris RST, RSTACT et ERROR.
Le format du premier, RSTACK et ERROR sont décrits dans la section 3.1 à 3.3.
2.4. Calculez le CRC
Un CRC 16 bits est calculé sur les octets à partir de l'octet de contrôle jusqu'à la fin des données. Le crccCitt standard (g (x) = x16 + x12 + x5 + 1) est initialisé à 0xffff. L'octet le plus significatif précède l'octet le moins significatif (mode grand-endian).
2.5. Farce d'octets
Comme décrit dans la section 4.2 de l'UG101, certaines valeurs d'octets réservées sont utilisées à des fins spéciales. Ces valeurs peuvent être trouvées dans le tableau suivant:
Lorsque ces valeurs apparaissent dans le cadre, un traitement spécial sera effectué aux données. - Insérez l'octet d'échappement 0x7d devant l'octet réservé - inverser le bit5 de cet octet réservé
Voici quelques exemples de cet algorithme:
2.6. Ajouter le drapeau d'extrémité
La dernière étape consiste à ajouter l'indicateur d'extrémité 0x7E à la fin du cadre. Après cela, les données peuvent être envoyées au port UART.
3. Processus de déramension
Lorsque les données sont reçues de l'UART, nous avons juste besoin de faire les étapes inverses pour les décoder.
4. Références
Heure du poste: février-08-2022