Über Zigbee EZSP UART

Autor: TorchIoTBootCamp
Link:https://zhuanlan.zhihu.com/p/339700391
Von: Quora

1. Einleitung

Silicon Labs bietet eine Host+NCP-Lösung für das Design von ZigBee-Gateways an. In dieser Architektur kommuniziert der Host über eine UART- oder SPI-Schnittstelle mit dem NCP. UART wird am häufigsten verwendet, da es deutlich einfacher als SPI ist.

Silicon Labs hat außerdem ein Beispielprojekt für das Host-Programm bereitgestellt, nämlich das Beispiel.Z3GatewayHostDas Beispiel läuft auf einem Unix-ähnlichen System. Einige Kunden wünschen sich möglicherweise ein Host-Beispiel, das auf einem Echtzeitbetriebssystem (RTOS) läuft. Derzeit ist jedoch leider kein RTOS-basiertes Host-Beispiel verfügbar. Benutzer müssen daher ihr eigenes Host-Programm auf Basis eines RTOS entwickeln.

Es ist wichtig, das UART-Gateway-Protokoll zu verstehen, bevor man ein benutzerdefiniertes Host-Programm entwickelt. Sowohl bei UART-basierten als auch bei SPI-basierten NCPs verwendet der Host das EZSP-Protokoll zur Kommunikation mit dem NCP.EZSPist die Abkürzung fürEmberZnet-Serielles Protokollund es ist definiert inUG100Für UART-basiertes NCP wird ein Protokoll der unteren Schicht implementiert, um EZSP-Daten zuverlässig über UART zu übertragen.ASCHEProtokoll, kurz fürAsynchroner serieller HostWeitere Einzelheiten zu ASH finden Sie unterUG101UndUG115.

Die Beziehung zwischen EZSP und ASH lässt sich anhand des folgenden Diagramms veranschaulichen:

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 der Rahmung der UART-Daten und einige wichtige Frames vor, die häufig in Zigbee-Gateways verwendet werden.

2. Rahmung

Der allgemeine Rahmenprozess lässt sich anhand des folgenden Diagramms veranschaulichen:

3

In dieser Grafik beziehen sich die Daten auf den EZSP-Frame. Im Allgemeinen sind die Framing-Prozesse wie folgt: |Nein|Schritt|Referenz|

|:-|:-|:-|

|1|Füllen Sie den EZSP-Rahmen|UG100|

|2|Datenrandomisierung|Abschnitt 4.3 von UG101|

|3|Steuerbyte hinzufügen|Kapitel 2 und 3 von UG101|

|4|Berechnung des CRC|Abschnitt 2.3 von UG101|

|5|Byte Stuffing|Abschnitt 4.2 von UG101|

|6|Endflag hinzufügen|Abschnitt 2.4 von UG101|

2.1. Füllen Sie den EZSP-Rahmen aus.

Das EZSP-Rahmenformat wird in Kapitel 3 von UG100 veranschaulicht.

4

Beachten Sie, dass sich dieses Format bei einem SDK-Upgrade ändern kann. Bei einer Formatänderung erhalten wir eine neue Versionsnummer. Die aktuelle EZSP-Versionsnummer zum Zeitpunkt der Veröffentlichung dieses Artikels ist 8 (EmberZnet 6.8).

Da sich das EZSP-Frame-Format je nach Version unterscheiden kann, ist es zwingend erforderlich, dass Host und NCPMUSSSie müssen mit derselben EZSP-Version arbeiten. Andernfalls können sie nicht wie erwartet kommunizieren.

Um dies zu erreichen, muss der erste Befehl zwischen Host und NCP der Versionsbefehl sein. Anders ausgedrückt: Der Host muss die EZSP-Version des NCP abrufen, bevor jegliche weitere Kommunikation stattfindet. Weicht die EZSP-Version von der EZSP-Version des Hosts ab, muss die Kommunikation abgebrochen werden.

Die implizite Voraussetzung dahinter ist, dass das Format des VersionsbefehlsÄNDERE DICH NIEMALSDas Befehlsformat für die 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 gibt die EZSP-Version des Hostprogramms an. Zum Zeitpunkt der Erstellung dieses Artikels ist es Version 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-Frame wird randomisiert. Die Randomisierung erfolgt durch eine XOR-Verknüpfung des EZSP-Frames mit einer Pseudozufallssequenz.

Nachfolgend ist der Algorithmus zur Erzeugung der Pseudozufallsfolge aufgeführt.

  • rand0 = 0×42
  • Wenn Bit 0 von randi gleich 0 ist, dann gilt randi+1 = randi >> 1
  • Wenn Bit 0 von randi gleich 1 ist, dann gilt: randi+1 = (randi >> 1) ^ 0xB8

2.3. Das Steuerbyte hinzufügen

Das Steuerbyte ist ein ein Byte großes Datenbyte und muss am Anfang des Frames angehängt werden. Das Format wird in der folgenden Tabelle veranschaulicht:

6

Insgesamt gibt es sechs Arten von Steuerbytes. Die ersten drei werden für gemeinsame Frames mit EZSP-Daten verwendet: DATA, ACK und NAK. Die letzten drei werden ohne gemeinsame EZSP-Daten verwendet: RST, RSTACK und ERROR.

Das Format von RST, RSTACK und ERROR wird in den Abschnitten 3.1 bis 3.3 beschrieben.

2.4. CRC berechnen

Eine 16-Bit-CRC-Prüfsumme wird für die Bytes vom Steuerbyte bis zum Datenende berechnet. Die Standard-CRCCCITT-Prüfsumme (g(x) = x16 + x12 + x5 + 1) wird mit 0xFFFF initialisiert. Das höchstwertige Byte steht vor dem niederwertigsten Byte (Big-Endian-Format).

2.5. Byte Stuffing

Wie in Abschnitt 4.2 von UG101 beschrieben, gibt es einige reservierte Byte-Werte, die für spezielle Zwecke verwendet werden. Diese Werte sind in der folgenden Tabelle zu finden:

7

Wenn diese Werte im Frame auftreten, werden die Daten speziell behandelt. – Füge das Escape-Byte 0x7D vor dem reservierten Byte ein. – Invertiere das fünfte Bit dieses reservierten Bytes.

Nachfolgend einige Beispiele für diesen Algorithmus:

8

2.6. Füge das Endflag hinzu.

Im letzten Schritt wird das Endflag 0x7E an das Ende des Frames angehängt. Danach können die Daten an den UART-Port gesendet werden.

3. Entrahmungsprozess

Wenn Daten über die UART empfangen werden, müssen wir nur die umgekehrten Schritte ausführen, um sie zu dekodieren.

4. Literaturverzeichnis


Veröffentlichungsdatum: 08.02.2022
WhatsApp-Online-Chat!