USB-Kommunikation ganz einfach (Teil 1: VCP)

 

Nutzung eines virtuellen COM-Ports

 

Die Kommunikation über die USB-Schnittstelle ist heute praktisch auch im Embedded-Bereich zum Standard geworden. Gerade bei einfachen Anwendungen übertrifft der Aufwand, der mit der USB-Kommunikation verbunden ist, aber häufig bei weitem den Aufwand für die Applikation selbst. Es müssen Treiber geschrieben, eine entsprechende Firmware entwickelt und die geeigneten Bausteine in die Anwendungen integriert werden.

 

Hinzu kommt, dass die  Gehäuseformen der Schnittstellen-Bausteine den Aufbau von Prototypen erschweren. Die Entwicklungszeit verlängert sich und man kommt nicht dazu, sich um den eigentlichen Kern der Aufgabe zu kümmern. Ganz zu schweigen, wenn Sie Ihre Anwendung auch noch für unterschiedliche Betriebssysteme anbieten möchten.

 

Hier bieten Smart-USB-Module einen idealen Ansatz. Sie kombinieren alle Kommunikationsfunktionen auf einem einzigen kleinen Board in Chip-Größe, nutzen Standardtreiber und erlauben den Aufbau einer USB-Kommunikation in kürzester Zeit. Im folgenden Beitrag zeigen wir Ihnen, wie einfach das mit den USBMOD-Modulen des australischen Herstellers Elexol funktioniert.

 

USBMOD4_1_klein.jpg
 

Die Module basieren auf den USB-Bausteinen von FTDI, haben die Abmessungen von Standard-DIL-Gehäusen mit 32 Pins und bieten eine unkomplizierte Kommunikation auf 2 unterschiedlichen Wegen:

 

  • Über den "Virtual Com Port" VCP-Treiber können Sie auf Ihre Anwendung in der gleichen Art und Weise zugreifen, wie Sie es über die serielle Schnittstelle gewohnt sind
  • Der "Direct DLL" Treiber hingegen bietet Ihnen eine ausführliche API, um direkt aus dem Anwendungsprogramm des Personal Computers auf alle Funktionen des USBMOD-Moduls zuzugreifen und die Kommunikation durchzuführen.

Sowohl den VCP- als auch den DLL-Treiber können Sie auf den Seiten von FTDI herunterladen (oder beide gleichzeitig in Form eines kombinierten Downloads

 

 

 

Einheitlicher Kommunikationsablauf

Der Ablauf eines USB-Zugriffs mit einem USBMOD-Modul ist immer gleich. Der Personal Computer kommuniziert via Direct DLL oder VCP mit dem USBMOD-Modul und das Modul je nach Ausführung mit der dahinter liegenen Hardware. Dabei können Sie momentan aus fünf verschiedenen Modulen wählen:

 

 

 

USBMOD3

USBMOD4

USB232R

 

Für unsere Beispiel-Applikation wählen wir das USBMOD4-Modul. Auf der Anwendungsseite bietet es eine parallele Schnittstelle, die sich ideal für die Kommunikation mit einem Mikrocontroller eignet. Als Betriebssystem dient Windows XP, bei Windows 7 ist der Ablauf nahezu gleich. 

 

1. Schritt: Laden Sie den Treiber herunter

Laden Sie zunächst die FTDI-Treiber herunter und entpacken Sie das Archiv in einem Ordner Ihrer Wahl.

 

2. Schritt: Bereiten Sie das Modul vor

Falls keine weitere Hardware zur Verfügung steht und Sie nur das Modul in Betrieb nehmen wollen, müssen Sie Pin 9 (EP) und Pin 10 (RST0) verbinden. Dadurch wird die Initialisierung und Enumeration ermöglicht. Das Gleiche tun Sie mit Pin 12 (VIO) und Pin 13 (V+), um die Ausgangs-Pins mit 5-V-Pegel zu betreiben. Für die Verbindung können Sie einen umgedrehten Jumper nutzen. Wenn Sie den ersten Test mit einem Steckbrett realisieren, dann nutzen Sie Kurzschlussbrücken. 

 

Bruecken_USBMOD41.jpg
 

3. Schritt: Schließen Sie das Modul an und installieren Sie den Treiber

Verbinden Sie nun das Modul über ein USB-Kabel mit Ihrem PC. Der Computer meldet den Fund und fragt mit der folgenden Meldung:

 

Bild1.jpg
 

Dies wollen wir nicht tun, also verneinen wir und erhalten den 2. Dialog:

 

Bild2.jpg
 

Hier wählen wir die 2. Option, weil wir genau wissen, wo Windows den Treiber findet. 

 

Die Installation startet und der "USB Serial Converter" ist installiert. 

Bild3.jpg
 

Dieser ganze Durchlauf ist noch ein 2. Mal notwendig, um den "USB Serial Port" zu installieren.

 

Schauen Sie nun im Windows-Gerätemanager nach. Dort sollten Sie einen Eintrag finden, der ähnlich wie dieser aussieht:

 

Bild4.jpg
 

Kommunikation zwischen Modul und Hardware

Für die Kommunikation mit dem USBMOD4 werden zunächst die 8 Datenleitungen benötigt, die einfach mit 8 I/O-Leitungen eines Mikrocontrollers, Speichers, FPGA etc. verbunden werden. Weiterhin kommen 4 I/O-Anschlüsse zum Einsatz (2 Statusleitungen und 2 Steuerleitungen):

 

_RXF: Wenn diese Leitung auf high liegt, ist der Fifo-Speicher leer und es stehen keine Empfangsdaten für die Ziel-Hardware zur Verfügung.

Anmerkung: Die Kommunikation wird von Seiten der Ziel-Hardware gesehen. Senden bedeutet also, dass die Ziel-Hardware schreibt.

_TXE: Solange dieses Signal auf high liegt, kann die Ziel-Hardware nicht in den Speicher schreiben.

_RD: Ziehen Sie diese Leitung auf low, wird die aktuelle Speicherstelle des Fifos auf die Datenleitungen D0 bis D7 gelegt. Die steigende Flanke holt die nächsten Daten und mit fallender Flanke liegen diese dann wieder an den Datenleitungen.

WR: Mit fallender Flanke werden die Signalpegel an den Datenleitungen D0 bis D7 in den Fifo-Speicher geschrieben, die steigende Flanke wählt den nächsten Speicherplatz.

 

Für das Lesen bzw. Schreiben sind also jeweils 2 Port-Anschlüsse notwendig:

_RXF und _RD zum Lesen 

_TXE und WR zum Schreiben

 

Im Grunde teilt sich die Kommunikation PC -> Ziel-Hardware über den virtuellen COM-Port in zwei Abschnitte:

1. Der PC schreibt seine Daten in den Fifo-Speicher

2. Die Ziel-Hardware liest die Daten aus dem Speicher aus

Analog dazu läuft die Kommunikation Ziel-Hardware -> PC umgekehrt ab.

 

 

Realisierung mit einem PSoC1-Mikrocontroller

Der folgende Aufbau wurde in Wire-Wrap-Technik erstellt, die für Prototypen bestens geeignet ist. Das Verfahren ist sehr schnell realisiert und die Verbindungen sind doch haltbar genug, um sogar dauerhafte Anwendungen damit aufzubauen. 

 

Elexol_PSoC.jpg

 

Für die Kommunikation mit dem USBMOD4 nutzen wir 2 Ports des PSoC-Controllers: Port 1 ist mit den Datenleitungen verbunden und auf Port 2 befinden sich die Steuerleitungen.

 

Um die vom PC gesendeten Daten darzustellen, wurde im PSoC eine LCD-Schnittstelle auf Port 0 konfiguriert.

 

Der Programmcode sieht folgendermaßen aus:

Prog_Code1.png
 

Die Funktion pause() ist eine einfache Zählschleife zur Verzögerung, damit die Abläufe real leichter zu erkennen sind. Zunächst wird ein Character-Array definiert, um die gesendeten Zeichen auszugeben und  eine Integervariable als Zähler für das Einlesen der Zeichen.

Die Funktionen in den Zeilen 14 bis 16 demonstrieren, wie einfach eine LCD-Ausgabe auf einem PSoC-Controller ist. Mit Start() wird das Modul initialisiert, mit Position die Zeile und Spalte angewählt und mit PrCString() ein nullterminierter String ausgegeben.

 

Nun zum eigentlichen Code:

Prog_Code2.png

 

Das Programm läuft nun in eine Endlosschleife. Durch die logische Verknüpfung in Zeile 21 wird der Zustand von Pin 2.4 (Pin 4 von Port 2) abgefragt, der mit dem _RXF-Signal des USBMOD verbunden ist. Falls _RXF high ist, passiert gar nichts. Liegt _RXF auf low, dann geht es in Zeile 24 weiter und Pin 2.1 (_RD-Signal) wird auf low gezogen. Damit werden die Daten aus dem Fifo an die 8 Datenleitungen von Port 1 gelegt und in Zeile 25 in das bInput[0] eingelesen. Im Anschluss wird das _RD-Signal in Zeile 26 wieder auf high gesetzt und damit der nächste Speicherplatz im Fifo angewählt. Diese Schleife wird so lange ausgeführt, bis der _RXF auf high geht. Nun wird dem Char-Array noch eine Null angehängt und der String über die LCD-Funktion ausgegeben. iIndex wird auf 0 gesetzt und der PSoC ist bereit, weitere Daten zu empfangen. Nachdem Compilieren und Programmieren ist der PSoC einsatzbereit, denn er erhält seine Versorgung über den USB-Port.

 

Bleibt noch die Frage: "Wie kommen die Daten vom PC in den USBMOD4?" Dazu nutzen wir ein beliebiges Terminalprogramm. Da Hyperterminal seit Windows 7 nicht mehr verfügbar ist, wählen wir das Freeware-Programm TeraTerm. Sie müssen lediglich die Einstellungen wählen, z. B.:

 

Teraterm_Einstellungen.PNG

Der COM-Port kann variieren. Sie erhalten die Nummer aus den Angaben im Gerätemanger. Wählen Sie in den weiteren Einstellung falls gewünscht noch "lokales Echo", damit Sie die Eingaben auch auf dem PC sehen können.

 

Kommunikation_PSoC_USBMOD4.PNG
 

Wenn Sie nun den Text eintippen, übernimmt der PSoC die Daten und gibt sie auf dem LCD-Display aus.

 

Anzeige_400.jpg
 

Einfacher geht es wirklich nicht mehr! Im 2. Teil werden wir uns dann mit der Kommunikation über den dll-Treiber beschäftigen. Damit haben Sie die volle Kontrolle über den USBMOD und können ihn auch im Bit-Bang-Modus betreiben und so ganz einfach FPGAs programmieren oder universelle I/O-Schaltungen realisieren.

 

Für weitere Informationen und Bestellungen einfach auf nachfolgende Links klicken:

USBMOD3

USBMOD4

USB232R

 

Falls Sie Fragen zum Thema haben, wenden Sie sich einfach an uns.

Wir helfen Ihnen gern weiter!

 

Ihr Team von Böcker Systemelektronik

 

Hinweis: Unser Tutorialangebot wird in unregelmäßigen Abständen erweitert. Wenn Sie sofort über eine Neuerscheinung informiert werden möchten, tragen Sie sich bitte hier in unsere Benachrichtigungsliste "Tutorials" ein. Sie können diesen unverbindlichen Service jederzeit in Ihrem Kundenkonto oder per E-Mail wieder abbestellen.  

 

Copyright © Böcker Systemelektronik