Forum: Mikrocontroller und Digitale Elektronik USB OTG zu UART Bridge


von Daniel U. (daniel_22)


Lesenswert?

Hallo,

Ich möchte zwischen meinem Atmega328 und dem PC per USB kommunizieren. 
Dazu bietet sich ja eine USB-UART-Bridge (z.B. CP2102N) an.
Nun soll die Empfangsseite aber auch als Master für angeschlossene 
Slave-Devices anstatt dem PC fungieren. Im Prinzip wird also USB-OTG 
Verhalten von der Bridge gefordert. Gibt es da passende ICs? Ich habe 
ICs wie den STOTG04E gefunden, aber das ist ja keine Bridge in dem 
Sinne.

Gruß
Daniel

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Daniel U. schrieb:
> Nun soll die Empfangsseite aber auch als Master für angeschlossene
> Slave-Devices anstatt dem PC fungieren.

Was für Devices denn?

Sowas? https://www.ftdichip.com/Products/ICs/VNC2.htm

von Fred R. (Firma: www.ramser-elektro.at/shop) (fred_ram)


Lesenswert?

Der VNC2 ist dafür oversized.
Mal ehrlich, 3 ICs statt einem?
Warum verwendest du nicht gleich einen µC mit USB Stack?
Ansonsten: PIC32 gibts in DIL und kann Device/Host.

von Daniel U. (daniel_22)


Lesenswert?

Niklas G. schrieb:
> Was für Devices denn?

Momentan ein weiterer Atmel-µC mit einer normalen USB-UART-Bridge 
vorgeschaltet. Ein simples Slave-Device eben. Ich gehe hier über USB, um 
es standardisiert zu halten (auch weil eine USB-Buchse die physische 
Verbindung darstellt).

Niklas G. schrieb:
> Sowas? https://www.ftdichip.com/Products/ICs/VNC2.htm

Schau ich mir mal an...

von Daniel U. (daniel_22)


Lesenswert?

Fred R. schrieb:
> Warum verwendest du nicht gleich einen µC mit USB Stack?

Das Design mit dem Atmega328 steht bereits. Ich würde ungerne die MCU 
austauschen, auch wenn es Platz für einen weiteren Chip kostet.

Fred R. schrieb:
> Ansonsten: PIC32 gibts in DIL und kann Device/Host.

Meinst du den als Haupt-MCU oder als Converter USB-UART?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Daniel U. schrieb:
> Ein simples Slave-Device eben.

Den Begriff "Slave-Device" gibt es nicht. Es gibt USB-Host und 
USB-Device.

Daniel U. schrieb:
> normalen USB-UART-Bridge

Was für eine? Du brauchst einen Treiber für deinen USB-UART-Chip.

Fred R. schrieb:
> Der VNC2 ist dafür oversized.

Man braucht oversized IC's wenn man einen undersized µC benutzt :)

Fred R. schrieb:
> Ansonsten: PIC32 gibts in DIL und kann Device/Host.

Das können viele andere auch... Aber es soll ja ein ATmega32 sein.

von Daniel U. (daniel_22)


Lesenswert?

Niklas G. schrieb:
> Was für eine? Du brauchst einen Treiber für deinen USB-UART-Chip.

Das kommt auf den Host an, den ich versuche zu finden. Das muss 
natürlich kompatibel sein.

Ich weiß wirklich nicht, ob die hier gesuchte Verbindung überhaupt 
möglich ist (daher frage ich). Wenn nicht, dann muss die Kommunikation 
zwischen den µC wohl über UART ablaufen.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Daniel U. schrieb:
> Fred R. schrieb:
>> Warum verwendest du nicht gleich einen µC mit USB Stack?
>
> Das Design mit dem Atmega328 steht bereits. Ich würde ungerne die MCU
> austauschen, auch wenn es Platz für einen weiteren Chip kostet.

Das wirst Du aber müssen. PIC24 und PIC32 können es direkt, gibts in 
DIL28, sind viel leistungsfähiger, kosten nicht viel mehr, und die 
Hardwareänderungen wären recht gering, sofern Du nicht exzessiv 
5V-Devices verwendet hast. Das meiste ist ja heutzutage 3.3V.

fchk

von HyperMario (Gast)


Lesenswert?

Daniel U. schrieb:
> Ich habe ICs wie den STOTG04E gefunden,
Ein Transceiver, regelt die Signalumsetzung. Der OTG Controller ist 
extern (steht auch in der Beschreibung).


> Ich weiß wirklich nicht, ob die hier gesuchte Verbindung überhaupt
> möglich ist (daher frage ich).
Möglich schon, in Software.  Wenn der Controller die USB Betriebsart 
erkennt und entsprechend handelt. Ist aber eher komplex. Als Chip hab 
ich auch nur den Vinculum gefunden. Hab auch das Testboard, ist (bzw. 
war) aber nicht sehr ausgereift.

von HyperMario (Gast)


Lesenswert?

Frank K. schrieb:
> PIC24 und PIC32 können es direkt,

Hast du das schon mal gemacht?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Daniel U. schrieb:
> Wenn nicht, dann muss die Kommunikation
> zwischen den µC wohl über UART ablaufen.

Das ist jedenfalls um viele Größenordnungen einfacher. Zwei µC, welche 
kein USB können, mithilfe zusätzlicher USB-IC's über USB kommunizieren 
zu lassen ist eine ziemliche Frankenstein-Konstruktion.

von Frank K. (fchk)


Lesenswert?

HyperMario schrieb:
> Frank K. schrieb:
>> PIC24 und PIC32 können es direkt,
>
> Hast du das schon mal gemacht?

Den Microchip-USB-Stack habe ich schon verwendet, mit CDC und Mass 
Storage. Allerdings nur als Device. Support für Host ist aber auch 
dabei.

Greif Dir mal einen PIC32MX270F256B-I/SP und probiere es selber aus. Für 
OTG brauchst Du Micro-AB Buchsen am Gerät für den ID-Pin und MicroA auf 
MicroB Kabel für die Verbindung zwischen zwei Geräten.

https://www.microchip.com/wwwproducts/en/PIC32mx270f256b

fchk

PS: Die USB-Peripherie ist hier in Hardware vorhanden, daher auch Full 
SPeed als Host, Device und OTG.

: Bearbeitet durch User
von HyperMario (Gast)


Lesenswert?

Frank K. schrieb:
> mit CDC und Mass
> Storage. Allerdings nur als Device.

Hab ich auch schon, aber mit den Mikroe Compiler. Funzt super.


Bei Host bin ich gerade bei, läuft aber noch nicht, daher die Frage

von Daniel U. (daniel_22)


Lesenswert?

Ihr schlagt hier den PIC32 vor, wie sieht es mit dem STM32 aus? Der kann 
ja auch USB. Bei welchem der beiden wäre es besser zu implementieren?

: Bearbeitet durch User
von Rene K. (xdraconix)


Lesenswert?

Daniel U. schrieb:
> Ihr schlagt hier den PIC32 vor, wie sieht es mit dem STM32 aus?
> Der kann
> ja auch USB. Bei welchem der beiden wäre es besser zu implementieren?

Kommt halt auf die Präferenz an, wer STM32 programmiert würde 
selbstverständlich zum STM32 raten - wer PIC32 programmiert eben zu 
diesem.

Ich persönlich, würde zum STM32 raten.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Zumindest auf dem STM32F407 ist es einfach, einen Mass Storage Host zu 
implementieren, also USB-HDD oder USB Sticks anzustecken. Es sollte noch 
einfacher sein, CDC Host zu spielen, habe ich aber noch nicht gebraucht.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Daniel U. schrieb:
> Ihr schlagt hier den PIC32 vor, wie sieht es mit dem STM32 aus? Der kann
> ja auch USB. Bei welchem der beiden wäre es besser zu implementieren?

Du brauchst nicht nur USB, sondern Du brauchst USB OTG. Das können nicht 
alle STM32. Die meisten können nur Device sein, nicht aber Host.

Von der Software her kommt es auf die Qualität der USB Stacks an, und da 
weiß ich nicht, was ST inzwischen da liefert.

Von der Hardware her ist PIC32 einfacher, weil Du da mit einem 
Lochrasteraufbau starten kannst, sofern Dir 28 Pins reichen. Größere 
Packages sind dann TQFP im 0.5mm Raster - das ist bei allen gleich 
unangenehm zu verarbeiten.

Es gäbe auch noch TI z.B. Die haben auch einen guten Softwaresupport. 
Aber auch das ist TQFP. In einfachen Packages wie DIL oder SO28 gibts 
bei USB OTG nicht viele Alternativen zu Microchip.

fchk

von Stefan F. (Gast)


Lesenswert?

Frank K. schrieb:
> Von der Software her kommt es auf die Qualität der USB Stacks an, und da
> weiß ich nicht, was ST inzwischen da liefert.

Was ich da bisher gesehen habe funktioniert. Die Doku dazu ist 
allerdings sehr knapp und er Code gewöhnungsbedürftig (erinnert an 
Spaghetti). Dafür ist aber jede zweite Zeile kommentiert - was ich 
wiederum lobenswert finde.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich habe den Code von Uwe B. benutzt und ihn für meine Zwecke 
modifiziert.
http://mikrocontroller.bplaced.net/wordpress/
Sollte mit jedem STM32F4 laufen.

von Andre (Gast)


Lesenswert?

Moin,

alter Post, aber drüber gestolpert, weil ich gerade exakt die gleiche
Problemstellung habe. Habe eine fertige Baugruppe mit Atmega32U4, die 
bisher nur über USB an ein Android-Tablet angeschlossen war und über 
COM-Port Daten an die App gesendet hat.
Nun ersetzen wir das Android-Tablet mit einem (SPI u. UART-)Display ohne 
USB-Host, ich habe allerdings keine weitere Schnittstelle auf der 
Baugruppe frei und davon noch 3000+ auf Lager. µC austauschen daher 
keine Option.

Habe nun den VNC2 dafür als Lösung genommen, der arbeitet nun wie vom OP 
gewünscht als Konverter von USB (CDC) auf UART für das Display.

(CH559 ist noch unterwegs, evtl teste ich den noch.)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.