Forum: Mikrocontroller und Digitale Elektronik STM32F4 Disocvery - USB-HOST-SERIAL


von Mar M. (r600)


Lesenswert?

Hallo Community,
ich bin neu in der MicroController Szene und habe mich in den letzten 
Wochen mit dem STM32F4 beschäftigt. Momentan möchte ich, um ein Projekt 
zu realisieren, USB-Host zum laufen bringen um eine Serielle Verbindung 
herzustellen.

Ich möchte also ein Gerät dass Serielle Daten über USB verschickt an den 
STM32F4 Discovery anstecken und mit diesem Gerät kommunizieren.

Vom MicroController zum PC habe ich es, dank zahlreicher Projekte im 
Inet, mit UB_USB-CDC einer Libary hinbekommen. Am PC musste nur der 
ST-Link Treiber installiert werden.

Wie sieht das aber auf der MicroController Seite aus ? Ich weiß leider 
nichtmal wo ich anfangen soll. USB Host ( ein USB STICK lesen ) würde 
ich ja noch hinbekommen. Aber wie lese bzw konfiguriere ich die Serielle 
Verbindung über USB ?

Ich hoffe der eine oder andere kann mir ein hilfreichen Tip geben.

Grüße und einen schönen Feierabend :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mar Mor schrieb:
> Ich möchte also ein Gerät dass Serielle Daten über USB verschickt an den
> STM32F4 Discovery anstecken und mit diesem Gerät kommunizieren.

Ist das Gerät ein CDC oder verwendet es eine USB-Seriell-Bridge von 
Herstellern wie FTDI, Prolific, SiLabs etc.?

Du musst wie bei Deinem USB-Host-Beispiel die Treiber für das jeweilige 
Gerät nachbilden, also entweder die für CDC oder die proprietären für 
die verschiedenen USB-Seriell-Bridges; als Anhaltspunkt eignen sich hier 
die Linux-Treibersourcen.

Warum nutzt Du nicht eine der UARTs Deines µC?

von Mar M. (r600)


Lesenswert?

Hallo  Rufus Τ. Firefly ,
Danke für deine Antwort. Das Modul sollte eigentlich heute ankommen. 
Leider ist es dass noch nicht. Spätestens Montag sollte ich dann mehr 
dazu wissen. Aber ich gehe sehr stark davon aus, dass es ein CDC ist und 
kein anderes.

Wie schwer wäre es den, so einen virtuellen Com Port auf dem Discovery 
im Usb Host zu realisieren ? Ich vermute das würde schon ausreichen. Vor 
USB habe ich mittlerweile großen respekt. Usb ist eine richtige Zicke :)

Mit Uart wäre es kein problem. Ich wurde nur auf die Idee gebracht und 
möchte einfach lernen bzw vorerst nicht aufgeben :)

von Jan B. (berge)


Lesenswert?

Hi,

das Discovery Board hat einen USB Anschluss drauf. Es ist also keine 
Uart zu USB Brücke im Spiel.

Ich verstehe die Frage noch nicht so richtig, habe mich mit dem Thema 
serielle Schnittstelle über den USB Port aber auch noch nicht 
auseinander gesetzt. Ist es nicht ausreichend über CDC einen virtuellen 
Comport zu betreiben? Darüber kann dann doch sowohl vom uC zum PC als 
auch umgekehrt kommuniziert werden?

Guck dir vielleicht mal das Beispiel hier an: 
http://mikrocontroller.bplaced.net/wordpress/?page_id=1263

LG Jan

von Mar M. (r600)


Lesenswert?

Hi Jan,
der µC hat 2 USB Ports ( Nicht falsch verstehen, soll kein 
klugscheissern sein ) :)

Der micro Usb kann zum arbeiten benutzt werden, das stimmt. Das von dir 
genannte beispiel habe ich schon ausprobiert und kann es jedem nur nahe 
legen der sich damit beschäftigen möchte ( Super Source !!! ). Über den 
Port habe ich auch das beispiel zum laufen bekommen.

Aber das von dir verlinkte Projekt arbeitet andersherum.

PC : HOST
µC : DEVICE


Meine Frage, bzw mein Problem wäre umgekehrt:

PC : DEVICE
µC : HOST

bzw :

µC_1  : HOST
Modul : DEVICE

und die kommunikation über usb_cdc_seriell . So das ich theoretisch das 
USB Device ( Modul ) an den PC Host klemmen könnte und dort mit 
HyperTerminal kommunizieren würde, über ein Virtual_Port. Nur soll hier 
der µC als HOST den Job des PC's übernehmen.

Jetzt ist nur die Frage... Wie horche ich im Host mode so einen com port 
bzw virtuellen com port ab ? Oder müsste ich wie  Rufus Τ. Firefly 
geschrieben hat, ein quasi Treiber schreiben ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mar Mor schrieb:
> Meine Frage, bzw mein Problem wäre umgekehrt:
>
> PC : DEVICE
> µC : HOST

Das geht nicht. Ein PC kann kein USB-Device sein -- außer mit 
spezieller Hardware.

> Oder müsste ich wie  Rufus Τ. Firefly
> geschrieben hat, ein quasi Treiber schreiben ?

Dabei bleibe ich. Nichts anderes macht das von Dir erwähnte Beispiel zum 
Ansprechen eines USB-Sticks; das ist nur kein CDC, sondern ein MSD. Das 
Grundprinzip aber bleibt das gleiche.

von Jan B. (berge)


Lesenswert?

Hi,

auch ohne klugscheißen zu wollen: Der uC hat nur einen USB Port ;) Der 
zweite wird durch einen zweiten uC realisiert und ist nur fürs 
Debugging.

Mit deiner Erklärung bin ich nun schlauer. Was du vor hast, ist glaube 
ich kein Anwendungsfall, der irgendwo schon fertig in der Schublade 
liegt. Hier müsstest du selbst ran. Falls es eine Host taugliche USB zu 
seriell Brücke gibt, wäre das der deutlich einfachere Weg.

Liebe Grüße,

Jan

von Mar M. (r600)


Lesenswert?

@ Rufus Τ. Firefly

Rufus Τ. Firefly schrieb:
> Mar Mor schrieb:
>> Meine Frage, bzw mein Problem wäre umgekehrt:
>>
>> PC : DEVICE
>> µC : HOST
>
> Das geht nicht. Ein PC kann kein USB-Device sein -- außer mit
> spezieller Hardware.

War mir bewusst, das sollte nur der verständlichkeit, so primitiv
verdeutlicht werden.

Jan Berg schrieb:
> auch ohne klugscheißen zu wollen: Der uC hat nur einen USB Port ;) Der
> zweite wird durch einen zweiten uC realisiert und ist nur fürs
> Debugging.

Der Punkt geht an dich :) hast natürlich recht.

Danke,  Rufus Τ. Firefly & Jan Berg (berge)...
Ich werde versuchen weiter in dieser Richtung zu recherchieren und
sollte ich was finden, hier natürlich posten.

Grüße

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.