Autor
Del Hatch
** Kommunikation über UDP
Der Zweck dieses Projekts besteht darin, Datenübertragungen über UDP mithilfe des Zedboards zu demonstrieren. Dies kann mit geringfügigen Modifikationen auf dem MicroZed und anderen Zynq-basierten Boards verwendet werden.
** Erstellen Sie ein Zynq-System mit Vivado
Erstellen Sie anhand der folgenden Abbildung als Leitfaden ein Zynq-System. Die AXI-Interconnect-, Processor-Reset- und GPIO-Module sind optional, aber ich füge sie später gerne für Befehle/Steuerung/Debugging ein.
Sie können alle Standardeinstellungen des Systems, die automatische Zuweisung von Peripherieadressen und die Standardeinstellungen der Systemkonfiguration verwenden, ohne dass Sie etwas anpassen müssen.
Nachdem Sie das System erstellt und die Hardware (einschließlich der Bitdatei) exportiert haben, starten Sie das SDK.
** SDK und Software
Klicken Sie nach dem Öffnen des SDK auf Datei -> Neu -> Anwendungsprojekt.
Geben Sie dem Projekt einen Namen und klicken Sie dann auf Weiter.
Wählen Sie „lwIP Echo Server“ aus der Liste der verfügbaren Vorlagen und beenden Sie den Vorgang.
An diesem Punkt können Sie den Echo Server auf dem Zedboard kompilieren, laden und ausführen. Ich verwende PuTTY, um zu sehen, wie es funktioniert.
Starten Sie PuTTY, geben Sie die in der Datei main.c definierte IP-Adresse des Zedboards ein, setzen Sie den Port-Wert auf 7 und wählen Sie „Telnet“ als Verbindungstyp. In dem sich öffnenden Fenster können Sie Buchstaben eingeben und sehen, wie sie an PuTTY zurückgegeben werden.
** Umstellung des Echo-Servers auf die Verwendung von UDP
Der Standard-LwIP-Echo-Server verwendet TCP. Um es stattdessen für die Verwendung von UDP zu konvertieren, ersetzen Sie die bereitgestellte main.c durch die main.c in diesem Github-Repository. Ersetzen Sie außerdem die Datei echo.c.
Laden Sie außerdem die Datei Includes.h herunter und fügen Sie sie Ihrem Projekt hinzu.
Kopieren Sie die Dateien in das Verzeichnis project.sdk/project/src Ihres Projekts. Markieren Sie dann im SDK die Zeile im Rahmen „Projekt-Explorer“ und drücken Sie F5 zum Aktualisieren.
** Kompilieren und ausführen
Kompilieren Sie nun den Code und führen Sie ihn aus. Während der Code ausgeführt wird, sehen Sie im angeschlossenen Terminalprogramm Folgendes:
Die Punkte unten zeigen an, dass das Zedboard ein UDP-Paket sendet. Dies geschieht einmal alle 500 mSekunden. Das Paket besteht aus einer einzelnen Ganzzahl mit dem Wert 0x45.
Um die gesendeten Pakete anzuzeigen, verwenden Sie Wireshark.
Es gibt viele Möglichkeiten, UDP-Pakete an das Zedboard zu übertragen. Ich habe den VLC Media Player verwendet und ihn so eingestellt, dass er eine MPG-Datei über UDP streamt. So geht's:
Starten Sie VLC und klicken Sie auf Medien -> Streamen...
Klicken Sie auf der Registerkarte „Datei“ auf „+Hinzufügen“ und wählen Sie eine Mediendatei aus. Ich verwende eine .mpg-Videodatei. Klicken Sie auf die Schaltfläche „Streamen“.
Klicken Sie auf Weiter. Öffnen Sie für die Zieleinrichtung das Feld „Neues Ziel“. Wählen Sie UDP (Legacy). Klicken Sie auf Hinzufügen. Geben Sie die IP-Adresse des Zedboards ein und stellen Sie den Port auf 7 ein.
Klicken Sie auf Weiter. Ich deaktiviere „Transcoding aktivieren“, aber für diesen Zweck spielt es keine Rolle.
Klicken Sie auf Weiter und dann auf Stream.
Im Terminalprogramm sehen Sie viele Meldungen (vom Zedboard), die Ihnen die Länge der UDP-Datagramme anzeigen, die das Zedboard vom VLC-Programm empfangen hat.
** Verbesserungen
Bei diesem Projekt handelt es sich hauptsächlich um eine Demonstration der Verwendung von UDP zum Senden und Empfangen von Daten mithilfe eines Zedboards oder eines anderen Zynq-Boards.
Ich werde es verwenden, um Medien vom Zedboard auf einen PC zu streamen, und VLC verwenden, um den Medienstream anzuzeigen.
** Kredit
Lance Simms hat hier ein sehr gutes und kompliziertes Projekt veröffentlicht, das UDP verwendet: http://lancesimms.com/Xilinx/MicroZed_UDP_Server_for_Waveform_Centroiding_Table_Of_Contents.html
Mein Projekt reduziert diese Codebasis auf die grundlegenden UDP-Prinzipien, um eine leicht erweiterbare Plattform für benutzerdefinierte Projekte bereitzustellen.