Über Zigbee EZSP UART

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:

1

Das Datenformat des EZSP- und des ASH-Protokolls lässt sich anhand des folgenden Diagramms veranschaulichen:

2

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:

3

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.

4

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:

5

Die Erläuterungen zum Parameterfeld und zum Format der Versionsantwort finden Sie in Kapitel 4 von UG100. Das Parameterfeld ist die EZSP-Version des Host-Programms. Wenn dieser Artikel geschrieben wird, ist es 8.
7
Quelle: TorchIoTBootCamp
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:

6

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:

7

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:

8

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
WhatsApp Online-Chat!