Autor: TorchIoTBootCamp
Link:https://zhuanlan.zhihu.com/p/339700391
Von: Quora
1. Einführung
Silicon Labs hat eine Host+NCP-Lösung für das Zigbee-Gateway-Design angeboten. In dieser Architektur kann der Host über die UART- oder SPI-Schnittstelle mit dem NCP kommunizieren. Am häufigsten wird UART verwendet, da es viel einfacher als SPI ist.
Silicon Labs hat auch ein Beispielprojekt für das Hostprogramm bereitgestellt, nämlich das BeispielZ3GatewayHost
. Das Beispiel läuft auf einem Unix-ähnlichen System. Einige Kunden möchten möglicherweise ein Host-Beispiel, das auf einem RTOS ausgeführt werden kann, aber leider gibt es derzeit kein RTOS-basiertes Host-Beispiel. Benutzer müssen ihr eigenes Host-Programm auf Basis von RTOS entwickeln.
Es ist wichtig, das UART-Gateway-Protokoll zu verstehen, bevor Sie ein individuelles Hostprogramm entwickeln. Sowohl für UART-basiertes NCP als auch für SPI-basiertes NCP verwendet der Host das EZSP-Protokoll, um mit dem NCP zu kommunizieren.EZSPist die Abkürzung fürEmberZnet Serielles Protokoll, und es ist definiert inUG100. Für UART-basiertes NCP ist ein Protokoll der unteren Schicht implementiert, um EZSP-Daten zuverlässig über UART zu übertragenASCHEProtokoll, kurz fürAsynchroner serieller Host. Weitere Einzelheiten zu ASH finden Sie unterUG101UndUG115.
Die Beziehung zwischen EZSP und ASH kann durch das folgende Diagramm veranschaulicht werden:
Das Datenformat des EZSP- und des ASH-Protokolls lässt sich anhand des folgenden Diagramms veranschaulichen:
Auf dieser Seite stellen wir den Prozess des Framings der UART-Daten und einige Schlüsselframes vor, die häufig im Zigbee-Gateway verwendet werden.
2. Rahmen
Der allgemeine Rahmenprozess kann durch das folgende Diagramm veranschaulicht werden:
In dieser Tabelle bedeuten die Daten den EZSP-Rahmen. Im Allgemeinen sind die Rahmenprozesse: |No|Step|Reference|
|:-|:-|:-|
|1|Füllen Sie den EZSP-Rahmen|UG100|
|2|Datenrandomisierung|Abschnitt 4.3 von UG101|
|3|Fügen Sie das Steuerbyte|Kapitel 2 und Kap3 von UG101 hinzu|
|4|Berechnen Sie den CRC|Abschnitt 2.3 von UG101|
|5|Byte Stuffing|Abschnitt 4.2 von UG101|
|6|Fügen Sie das End-Flag hinzu|Abschnitt 2.4 von UG101|
2.1. Füllen Sie den EZSP-Rahmen
Das EZSP-Rahmenformat wird in Kapitel 3 von UG100 dargestellt.
Beachten Sie, dass sich dieses Format ändern kann, wenn das SDK aktualisiert wird. Wenn sich das Format ändert, geben wir ihm eine neue Versionsnummer. Die neueste EZSP-Versionsnummer ist 8, als dieser Artikel geschrieben wurde (EmberZnet 6.8).
Da das EZSP-Rahmenformat zwischen verschiedenen Versionen unterschiedlich sein kann, besteht eine zwingende Anforderung, dass der Host und der NCPMUSSmit der gleichen EZSP-Version arbeiten. Andernfalls können sie nicht wie erwartet kommunizieren.
Um dies zu erreichen, muss der erste Befehl zwischen dem Host und dem NCP der Versionsbefehl sein. Mit anderen Worten: Der Host muss vor jeder anderen Kommunikation die EZSP-Version des NCP abrufen. Wenn sich die EZSP-Version von der EZSP-Version der Hostseite unterscheidet, muss die Kommunikation abgebrochen werden.
Die implizite Anforderung dahinter ist, dass das Format des Versionsbefehls dies kannNIEMALS ÄNDERN. Das Befehlsformat der EZSP-Version sieht wie folgt aus:
Quelle: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.
2.2. Datenrandomisierung
Der detaillierte Randomisierungsprozess ist in Abschnitt 4.3 von UG101 beschrieben. Der gesamte EZSP-Rahmen wird randomisiert. Die Randomisierung erfolgt durch Exklusiv-ODER des EZSP-Frames und einer Pseudozufallssequenz.
Nachfolgend finden Sie den Algorithmus zur Generierung der Pseudozufallsfolge.
- rand0 = 0×42
- Wenn Bit 0 von Randi 0 ist, ist Randi+1 = Randi >> 1
- Wenn Bit 0 von Randi 1 ist, ist Randi+1 = (Randi >> 1) ^ 0xB8
2.3. Fügen Sie das Steuerbyte hinzu
Das Steuerbyte besteht aus einem Datenbyte und sollte am Kopf des Rahmens hinzugefügt werden. Das Format wird in der folgenden Tabelle veranschaulicht:
Insgesamt gibt es 6 Arten von Steuerbytes. Die ersten drei werden für gemeinsame Frames mit EZSP-Daten verwendet, einschließlich DATA, ACK und NAK. Die letzten drei werden ohne gemeinsame EZSP-Daten verwendet, einschließlich RST, RSTACK und ERROR.
Das Format von RST, RSTACK und ERROR wird in den Abschnitten 3.1 bis 3.3 beschrieben.
2.4. Berechnen Sie den CRC
Ein 16-Bit-CRC wird für Bytes vom Steuerbyte bis zum Ende der Daten berechnet. Der Standard CRCCCITT (g(x) = x16 + x12 + x5 + 1) wird auf 0xFFFF initialisiert. Das höchstwertige Byte steht vor dem niedrigstwertigen Byte (Big-Endian-Modus).
2.5. Byte-Stuffing
Wie in Abschnitt 4.2 von UG101 beschrieben, gibt es einige reservierte Bytewerte, die für besondere Zwecke verwendet werden. Diese Werte finden Sie in der folgenden Tabelle:
Wenn diese Werte im Rahmen erscheinen, werden die Daten einer Sonderbehandlung unterzogen. – Fügen Sie das Escape-Byte 0x7D vor dem reservierten Byte ein. – Kehren Sie das Bit5 dieses reservierten Bytes um
Nachfolgend finden Sie einige Beispiele für diesen Algorithmus:
2.6. Fügen Sie die Endflagge hinzu
Der letzte Schritt besteht darin, das Endflag 0x7E am Ende des Frames hinzuzufügen. Danach können die Daten an den UART-Port gesendet werden.
3. De-Framing-Prozess
Wenn Daten vom UART empfangen werden, müssen wir nur die umgekehrten Schritte ausführen, um sie zu dekodieren.
4. Referenzen
Zeitpunkt der Veröffentlichung: 08.02.2022