2012-10-01 9 views
7

Weiß jemand, ob es möglich ist, UART (einfaches serielles Senden und Empfangen) über USB zu emulieren? Wie würde dies erreicht werden?Emulation UART über USB

Ich fand diesen Link auf der Microchip-Website, aber es ist nicht sehr ansprechend.

http://www.microchip.com/forums/m522571-print.aspx

Irgendwelche Ideen? Vielen Dank.

+4

Definitiv die Verwendung eines FTDI ist der beste Weg zu gehen. – TJD

+0

FTDI? Bitte erkläre. Mein Manager fordert an, dass ich das integrierte USB-Peripheriegerät so konfiguriere, dass es als UART funktioniert. Soweit ich das beurteilen kann, ist das nicht möglich, aber er besteht darauf, dass es so ist. –

+0

FTDI-Chips konvertieren UART zu USB. Also intern würden Sie nur normale UART-Peripheriegeräte verwenden, aber extern verbinden Sie sich mit USB. Auf PC-Seite erhalten Sie einen virtuellen COM-Port, damit Sie als normaler serieller Port mit ihm interagieren können. Das ist sehr sauber und einfach und so wie jeder es macht. Ich kann mir nicht vorstellen, warum Sie wirklich das USB-Peripheriegerät Ihres Chips verwenden müssen. – TJD

Antwort

8

Grundsätzlich haben Sie zwei Möglichkeiten UART über USB zu emulieren:

  1. ein bestehendes Produkt verwenden. Die Firma FTDI stellt bekannte und solide UART-USB-Brückenchips, z.B. FT230X. Pro: Sie benötigen kein detailliertes Wissen über USB. Nachteile: Teuer, wenn es in der Massenproduktion verwendet wird. Zusätzliche Hardware benötigt zusätzliche Energie.

  2. Implementieren Sie die USB-Geräteklasse "Communication Device Class" (CDC). Die Spezifikation von CDC ist auf USB.org verfügbar, siehe here. Pro: Billig in der Massenproduktion (wenn Ihr Microcontroller USB an Bord hat). Con: Sie benötigen detailliertes Wissen über USB.

+0

Einfach und auf den Punkt. Es stellte sich heraus, dass mein Manager über die Implementierung eines virtuellen COM-Ports sprach. Vielen Dank! –

+0

Link ist unterbrochen. Sollte es jetzt hier sein? http://www.usb.org/developers/docs/ –

+1

@cp engr: Danke für den Hinweis. Ihr Link geht in die richtige Richtung. Einen Schritt weiter und Sie kommen zu den USB-Spezifikationen, wo die CDC-Spezifikation zu finden ist: [www.usb.org/developers/docs/devclass_docs/](http://www.usb.org/developers/docs/devclass_docs/). – Habi

11

Sie müssen die Gerätestapel als CDC ACM-Gerät (auch als Virtual COM Port oder VCP bekannt) implementieren. Die meisten Hersteller von Mikrocontrollern mit USB-Unterstützung haben Beispielcode oder App-Notizen.

Vor diesem Hintergrund sieht Ihr Gerät für Windows wie ein COM-Port aus. Auf der Seite des Geräts erhalten Sie rohe Datenblöcke, die übertragen werden. Eine geeignete Abstraktionsschicht kann sowohl für UART- als auch für USB-Schnittstellen implementiert werden, um dann bei Bedarf dieselbe Schnittstelle bereitzustellen.

Ein Problem besteht darin, dass USB-Geräte eine vom USB Implementer's Forum zugewiesene Hersteller-ID benötigen, unter $5000 fee (korrekt am 23. Januar 2016). Wenn Sie Ihr Gerät in der freien Natur freigeben, benötigen Sie eines, wenn Ihr Gerät erkannt werden und sich mit anderen Geräten korrekt verhalten soll. Bei einigen Mikrocontroller-Anbietern können Sie die Hersteller-ID für eine Teilmenge von Produkt-IDs kostenlos oder zu einem geringeren Preis verwenden. Dies ist jedoch nur der Fall, wenn Sie signifikante Mengen von Geräten von ihnen kaufen. Ein weiteres Problem ist, dass während auf OSX oder Linux ein CDC/ACM ohne zusätzliche Treiber erkannt wird, Windows ist wählerischer und benötigt eine INF-Datei, um den spezifischen USB-Hersteller und die Produkt-ID dem usbser.sys-Treiber zuzuordnen. Dann kommen Sie in die ganze Welt der Treibersignierung, die für die Verwendung von Windows Vista 64 oder einer beliebigen Version von Windows 7 unerlässlich ist. Eine Signatur, die Sie signieren, kostet Sie auch Geld. Wenn Ihr Anbieter einen Beispiel-VCP-Code bereitgestellt hat, wird er wahrscheinlich auch einen signierten Treiber bereitstellen. Das STM32 VCP-Beispiel von STMicroelectronios ist sogar WHQL-zertifiziert und kann daher automatisch über Windows Update erworben werden.

Das Ergebnis ist, dass Sie experimentieren können, wenn Ihr Anbieter bereits Code und einen signierten Treiber zur Verfügung stellt (oder Sie nicht Windows verwenden), aber für die Bereitstellung eines Produkts benötigen Sie eine Hersteller-ID und eine Code-Signierung Zertifikat. Es ist ein bisschen wie ein Minenfeld, um ehrlich zu sein.

Ein einfacherer Ansatz ist die Verwendung eines FTDI USB < -> Serieller Chip. Dies ist besonders nützlich für einen Mikrocontroller ohne eigenen USB-Controller, aber die Datenübertragungsrate wird durch die UART-Schnittstelle des Mikros und/oder des FTDI anstelle der USB-Geschwindigkeit begrenzt. Ein FTDI-Chip kann unverändert mit FTDIs VID/PID verwendet werden oder Sie können ihn mit Ihrer eigenen VID/PID anpassen.Mit dem Customizing müssen Sie zwar eine VID und ein Signaturzertifikat erwerben, können Ihr Gerät jedoch eindeutig als generischen seriellen Port identifizieren.

+3

Ich füge hinzu: Vermeide irgendeinen USB-Serial-Dongle, der auf dem PL2303 basiert - der Chipsatz selbst scheint flockig und Treiber für Windows und MacOSX sind unzuverlässig. Wirklich schlechte Nachrichten beim Debuggen von Embedded-Hardware und Sie verlassen sich auf den seriellen Port zum Debuggen. – marko

+2

Ich kann für Probleme mit den PL2303-Adaptern auf Windows bürgen. Blaue Bildschirme und ähnliches, wenn zu viele Daten auf mehreren Adaptern usw. vorhanden sind. Auch die paar Varianten dieser Adapter, die ich verwendet habe, haben unter Linux ziemlich gut funktioniert. –

+0

Ich bin daran interessiert, eine Platine zu verwenden, die den FTDI-USB-zu-Seriell-Chip verwendet und mich gefragt hat, wie sie an den USB-Anschluss eines STM32-Mikrocontrollers angeschlossen werden könnte. Ich frage mich, wie ich aus der Sicht des Mikrocontrollers damit kommunizieren würde. Von meinem Verständnis (das ich zugeben muss, ist begrenzt), für das Mikro es als VCP zu erkennen, würde es den FTDI VCP Treiber benötigen. Ich bin mir nicht sicher, ob es überhaupt möglich ist, dies auf dem STM32 micro zu installieren, und ich hoffe, dass es Alternativen gibt, mit dem Board über USB zu kommunizieren. – mban