UART über USB für STM32-mikrocontroller
Ich versuche, umzusetzen UART über eine USB-Schnittstelle auf der STM324x9I-EVAL development board. Der Zweck ist, um Befehle zu senden, um einen servo-controller (oder andere hardware, die für diese Angelegenheit) Seriell. Ich habe erfolgreich das USB_Device_CDC Beispiel auf dem Entwicklungs-board, bin aber nicht sicher, wie das genau funktioniert ohne PC mit den Treibern auf der anderen Seite. Soweit andere hardware betroffen ist, wird der USB-port jetzt schauen Sie sich einfach wie eine serielle Schnittstelle? Oder gibt es noch eine Notwendigkeit für einen Treiber oder irgendeine Art von Schnittstelle am anderen Ende?
Möchte ich darauf hinweisen, dass ich bin mir bewusst, dass der folgende post:
aber ich glaube nicht, meine Frage ist voll beantwortet im Rahmen der Antwort.
Nur eindeutig sein, das CDC-Implementierung, indem Sie sich nicht USB sehen aus wie eine serielle Schnittstelle mit anderen Geräten? Ich kann nicht Daten schreiben über den Hafen und erwarten eine UART-Schnittstelle, es zu verstehen, richtig?
Lesen Sie ein bisschen über die USB und seine Geräte-Klassen vor allem die über CDC-Klasse. Die Dokumente, die frei verfügbar sind (zumindest waren Sie das damals für 2.0)
Teil deine Verwirrung scheint die Unbestimmtheit von Ihrem System. Sie haben nicht angegeben, welches Gerät der USB-host und dem Gerät ist der USB-gadget (oder "Gerät"). "wie das funktioniert ohne PC mit den Treibern auf der anderen Seite." -- ich habe nur gesehen, host USB-Anschlüsse (d.h. weibliche Typ-A) auf PCs. Wenn Sie Ihr dev board, um einen PC, dann das board ist ein USB-gadget. Vermutlich ist der "servo-controller (oder andere hardware, für diese Angelegenheit)" ist ein USB-gadget? Zum Anschluss des dev-board zu den "servo-regler" würden Sie verwenden eine USB-host-port auf dem dev-board.
InformationsquelleAutor mban | 2015-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer USB-Verbindung ist nicht ein peer-to-peer-Verbindung, wie ein UART. Es erfordert ein host und ein Gerät in einer master/slave-Beziehung. Das Gerät kann keine Datenübertragung initiiert werden; es muss ständig eine Abfrage durch, die durch den host.
Einer CDC/ACM-Klasse-Gerät stellt eine virtuellen COM-port auf einem PC-host, aber das bedeutet nicht, lassen Sie das Gerät für die Kommunikation mit einer UART-Schnittstelle. Es sieht aus wie eine serielle Schnittstelle auf der Ebene der software, aber nicht die Implementierung eines UART-physical-layer. Es gibt eine Menge Los unter der Haube, um es so Aussehen wie eine serielle PC-port, aber keines ähnelt es UART-Kommunikation auf der körperlichen Ebene.
Gibt es Geräte, die als UART/USB-bridges (von FTDI und Prolific zum Beispiel), und man konnte (etwas teuer) bauen Sie Ihre eigenen aus einem mikrocontroller, der eine USB-device-controller und ein UART, aber die Brücke ist ein USB-Gerät und muss dennoch eine Verbindung zu einem USB-host; diese werden normalerweise verwendet, um einen PC anschließen an einen mikrocontroller fehlt ein USB-controller oder wo die software/CPU-overhead mit einem USB-controller ist zu groß.
In der Theorie könnte man schließen Sie einen mikrocontroller, der eine USB-host-controller hat einen USB-device-controller, aber Sie müssen die host-und Geräte-software-stacks auf jedem beziehungsweise, und sobald Sie die USB-Verbindung, Umsetzung CDC/ACM ist eine etwas ineffiziente Nutzung der verfügbaren Bandbreite. Der Zweck der CDC/ACM-Klasse ist vor allem, dass "legacy" - software auf einem PC.
Wenn Sie brauchen, um eine Verbindung zu einer "echten" seriellen Anschluss verwenden, sollten Sie eine echte UART - das sind weit mehr als allgegenwärtig USB-Controller auf mikrocontroller in jedem Fall.
InformationsquelleAutor Clifford
Sollten Sie lernen, ein bisschen über USB-Geräte-Klassen. CDC ist ein USB-Gerät Klasse, und ACM ist eine Unterklasse, die ich nehme an, Sie verwenden. Das Gerät, das Sie gemacht könnte Sie als "CDC-ACM-Gerät", weil es verwendet die CDC-Klasse und der ACM Unterklasse.
Diese Klassen und Subklassen sind definiert durch das USB Implementers Forum in Dokumenten, die Sie hier finden können:
http://www.usb.org/developers/docs/devclass_docs/
Diese Dokumente geben an, wie das, was USB-Deskriptoren, die ein CDC-ACM Gerät haben sollte, um zu beschreiben, wie sich der Wirt, und welche Arten von interfaces und Endpunkte, die er haben sollte, und wie die seriellen Daten werden dargestellt in Bezug auf die USB-Transaktionen und transfers.
Beachten Sie, dass die CDC-ACM gibt nur einige USB Befehle für die übertragung von Daten zwischen dem host und dem Gerät. Es tut nicht angeben, was das Gerät tatsächlich mit diesen Daten. Sie können CDC-ACM Implementierung einer USB-zu-Seriell-adapter, oder Sie können es einfach verwenden, als eine Allgemeine Schnittstelle für alle Daten, die Sie senden möchten.
Ja, müssen Sie einen Treiber auf der PC-Seite. Der Fahrer muss für die Ausführung auf Ihre speziellen Betriebssystem. Es muss eine Art virtuellen seriellen port-Gerät in Ihrem Betriebssystem, andere software (die kennt nur serielle ports) finden und eine Verbindung herstellen. Es muss übersetzen serial-port-Operationen, die durch andere software auf die serielle Schnittstelle (z.B. schreiben einige bytes an der seriellen Schnittstelle) in low-level-USB-Befehle nach der CDC-ACM-Spezifikationen (z.B. die Versendung von einigen bytes an das Gerät auf einen bestimmten Endpunkt in form eines USB-Pakete). Es muss irgendwie wissen, welche USB-Geräte es funktionieren sollte, da nicht jedes USB-Gerät ist ein CDC-ACM Gerät.
Für Windows, werden Sie wahrscheinlich verwenden Sie die usbser.sys Treiber, die was mit Windows kommt. Für Windows-Versionen älter als Windows 10, müssen Sie schreiben ein INF-Datei verknüpfen Sie Ihr Gerät usbser.sys und Unterschreiben Sie es. Für Windows 10 und höher, es ist eine neue INF-Datei namens usbser.inf bereits in Windows enthalten, die gleicht automatisch alle gültigen CDC-ACM Gerät. Dies bedeutet, dass Sie nicht haben, um zu schreiben oder zu vertreiben, einen Treiber für CDC-ACM-Geräte, wenn Sie nur wollen support mit dem Gerät auf Windows 10 oder höher. Die Partnerschaft zwischen Microsoft und Arduino, die begann, im Jahr 2015 gibt mir Hoffnung, dass Microsoft weiterhin zu unterstützen und zu verbessern usbser.sys in der Zukunft. In der Tat, Sie Anspruch, dass in Windows 10 "der Treiber wurde neu geschrieben, durch die Verwendung von Kernel-Mode Driver Framework, das verbessert die Allgemeine Stabilität der Treiber", so dass ist eine gute Nachricht.
Für Linux gibt es die cdc_acm kernel-Modul, die ein Teil der standard-kernel für eine lange Zeit und sollte automatisch funktionieren, mit jeder CDC-ACM Gerät, das Sie anschließen.
Für Mac OS X, gibt es die AppleUSBCDCACM - Treiber, der sollte funktionieren automatisch CDC-ACM Gerät, das Sie anschließen.
Beachten Sie, dass für diesen Treiber, um Ihr Gerät erkennt und die Arbeit mit Ihrem Gerät haben, bestimmte Werte in die USB-Deskriptoren, und die Anforderungen können variieren, je nachdem, was genau den Treiber-version du redest.
Nein, das ist der falsche Weg, um darüber nachzudenken. Der USB-port wird immer noch Aussehen wie ein USB-port, aber die verschiedenen USB-Treiber von Ihrem Betriebssystem erkennt, dass ein CDC-ACM-Gerät angeschlossen ist, port und erstellen Sie einen neuen Eintrag in Ihrem Betriebssystem die Liste der seriellen ports. Dann, wenn Sie einige software, die nur kennt, serielle ports, es kann eine Verbindung zu diesem port.
In der Tat, wenn Sie ein composite-Gerät, können Sie eine einzige USB-Gerät eingesteckt in einen USB-port, der hat tatsächlich zwei oder mehrere virtuelle serielle ports.
InformationsquelleAutor David Grayson