Auteur: TorchiotBootcamp
Link: https: //zhuanlan.zhihu.com/p/339700391
Van : Quora
1. Inleiding
Silicon Labs heeft een host+NCP -oplossing aangeboden voor het ontwerp van Zigbee Gateway. In deze architectuur kan de gastheer communiceren met de NCP via UART of SPI -interface. Meestal wordt UART gebruikt omdat het veel eenvoudiger is dan SPI.
Silicon Labs heeft ook een voorbeeldproject opgeleverd voor het hostprogramma, dat het monster isZ3gatewayhost
. Het monster draait op een UNIX-achtig systeem. Sommige klanten willen misschien een host -monster dat op een RTO's kan worden uitgevoerd, maar helaas is er voorlopig geen op RTOS gebaseerde host -monster. Gebruikers moeten hun eigen hostprogramma ontwikkelen op basis van RTO's.
Het is belangrijk om het UART Gateway -protocol te begrijpen voordat u een aangepast hostprogramma ontwikkelt. Voor zowel op UART gebaseerde NCP- als SPI -gebaseerde NCP, gebruikt de host het EZSP -protocol om te communiceren met de NCP.EZSPis kort voorEmberznet serieel protocol, en het is gedefinieerd inUG100. Voor UART -gebaseerde NCP wordt een lagere laagprotocol geïmplementeerd om EZSP -gegevens betrouwbaar over UART te dragen, dat is deASprotocol, kort voorAsynchrone seriële gastheer. Raadpleeg voor meer informatie over AshUG101EnUG115.
De relatie tussen EZSP en ASH kan worden geïllustreerd door het volgende diagram:
Het gegevensformaat van de EZSP en het ASH -protocol kan worden geïllustreerd door het volgende diagram:
Op deze pagina introduceren we het proces van het inlijsten van de UART -gegevens en enkele belangrijke frames die vaak worden gebruikt in Zigbee Gateway.
2. framequen
Het algemene kaderproces kan worden geïllustreerd door de volgende grafiek:
In deze grafiek betekent de gegevens het EZSP -frame. Over het algemeen zijn de frameprocessen: | Nee | Stap | Referentie |
|:-|:-|:-|
| 1 | Vul het EZSP -frame | UG100 |
| 2 | Randomisatie van gegevens | Sectie 4.3 van UG101 |
| 3 | Voeg de besturingsbyte toe | Chap2 en Chap3 van UG101 |
| 4 | Bereken de CRC | Sectie 2.3 van UG101 |
| 5 | BYTE -vulling | Sectie 4.2 van UG101 |
| 6 | Voeg de eindvlag toe | Sectie 2.4 van UG101 |
2.1. Vul het EZSP -frame
Het EZSP -frameformaat wordt geïllustreerd in hoofdstuk 3 van UG100.
Let op dat dit formaat kan veranderen wanneer de SDK -upgrades. Wanneer het formaat verandert, geven we het een nieuw versienummer. Het nieuwste EZSP -versienummer is 8 wanneer dit artikel is geschreven (Emberznet 6.8).
Aangezien het EZSP -frameformaat kan verschillen tussen verschillende versies, is er een verplichte vereiste dat de host en NCPMOETENWerk met dezelfde EZSP -versie. Anders kunnen ze niet communiceren zoals verwacht.
Om dat te bereiken, moet de eerste opdracht tussen de host en de NCP de versie -opdracht zijn. Met andere woorden, de host moet de EZSP -versie van de NCP ophalen vóór enige andere communicatie. Als de EZSP -versie anders is met de EZSP -versie van de hostzijde, moet de communicatie worden afgebroken.
De impliciete vereiste hierachter is dat het formaat van de versie -opdracht kanNooit veranderen. Het opdrachtopformaat van de EZSP -versie is zoals hieronder:
链接 : https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 非商业转载请注明出处。 非商业转载请注明出处。
2.2. Data -randomisatie
Het gedetailleerde randomisatieproces wordt beschreven in paragraaf 4.3 van UG101. Het hele EZSP -frame wordt gerandomiseerd. De randomisatie is om exclusief of het EZSP-frame en een pseudo-willekeurige reeks.
Hieronder is het algoritme voor het genereren van de pseudo-willekeurige reeks.
- rand0 = 0 × 42
- Als bit 0 van randi 0 is, randi+1 = randi >> 1
- Als bit 0 van randi 1 is, randi+1 = (randi >> 1) ^ 0xb8
2.3. Voeg de besturingsbyte toe
De besturings -byte is een byte -gegevens en moet worden toegevoegd aan de kop van het frame. Het formaat wordt geïllustreerd met de onderstaande tabel:
Helemaal zijn er 6 soorten controlebytes. De eerste drie worden gebruikt voor gemeenschappelijke frames met EZSP -gegevens, waaronder gegevens, ACK en NAK. De laatste drie worden gebruikt zonder gemeenschappelijke EZSP -gegevens, waaronder RST, RSTACK en fout.
Het formaat van de RST, RSTACK en fout wordt beschreven in paragraaf 3.1 tot 3.3.
2.4. Bereken de CRC
Een 16-bit CRC wordt berekend op bytes van de besturingsbyte tot het einde van de gegevens. De standaard CRCCCITT (G (x) = x16 + x12 + x5 + 1) wordt geïnitialiseerd naar 0xffff. De belangrijkste byte gaat vooraf aan de minst significante byte (Big-Endiaanse modus).
2.5. Byte vulling
Zoals beschreven in paragraaf 4.2 van UG101, zijn er enkele gereserveerde byte -waarden die voor speciaal doel worden gebruikt. Deze waarden zijn te vinden in de volgende tabel:
Wanneer deze waarden in het frame verschijnen, wordt de gegevens een speciale behandeling uitgevoerd. - Plaats de Escape Byte 0x7d voor de gereserveerde byte - Keer de Bit5 van die gereserveerde byte om
Hieronder staan enkele voorbeelden van dit algoritme:
2.6. Voeg de eindvlag toe
De laatste stap is om de eindvlag 0x7e toe te voegen aan het einde van het frame. Daarna kunnen de gegevens naar de UART -poort worden verzonden.
3. De-framingproces
Wanneer gegevens van de UART worden ontvangen, moeten we alleen de omgekeerde stappen uitvoeren om deze te decoderen.
4. Referenties
Posttijd: februari-08-2022