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:
Das Datenformat des EZSP- und des ASH-Protokolls lässt sich anhand des folgenden Diagramms veranschaulichen:
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:
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.
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:
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:
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:
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:
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








