Forum: Mikrocontroller und Digitale Elektronik STM32F4 Discovery - Virtual COM Port


von ARM Einsteiger (Gast)


Lesenswert?

Hallo wieder einmal...

Ich habe jetzt einen neuen Thread eröffnet, obwohl das Thema evtl schon 
breitgetreten ist.

Ich will mit meinem STM32F4 Discovery debug Ausgaben (printf, etc...) 
machen können. Um mir zuerst mal das Löten zu ersparen (UART -> MAX 232 
->etc...) möchte ich den USB Anschluss als VCP verwenden.

Es gibt ja schon unzählige Diskussionen und Links, sodass ich nicht 
weiß, wonach ich letztlich greifen sollte. Hat da jemand Erfahrung, 
welcher Ansatz tatsächlich funktioniert? Ich möchte den VCP nur 
"benutzen und nicht verstehen", da es mir momentan noch um 
grundlegenderer Dinge geht...

Danke

von hp-freund (Gast)


Lesenswert?

Das vereinfacht die Sache aber nicht gerade.
Besorg dir besser einen 3€ USB/seriell Adapter und steck die 3 Kabel an.

von Uwe B. (derexponent)


Lesenswert?

Hi ARM Einsteiger,

>Ich möchte den VCP nur
>"benutzen und nicht verstehen"

das ist zwar kein sehr guter Ansatz...aber jeder wie er will

hier gibt es ein fertiges CooCox Beispiel für USB-CDC
über die OTG-Buchse (CN5) vom Discovery-Board

du brauchst allerdings ein USB-Kabel dazu mit Mikro-Stecker

http://mikrocontroller.bplaced.de

Gruss Uwe

von ARM Einsteiger (Gast)


Lesenswert?

hp-freund schrieb:
> Besorg dir besser einen 3€ USB/seriell Adapter und steck die 3 Kabel an.

Das mach ich auch.

Es gibt fertige Adaptoren (um 3€ hab ich nix gefunden, ...):

http://at.rs-online.com/web/p/entwicklungskits-interface/7511172/

oder

http://www.conrad.at/ce/de/product/197326/Conrad-Mini-USB-zu-UART-Konverter?queryFromSuggest=true

Das Kabel von FTDI ist etwas teuer. Ist der Zweite Adapter wohl 
brauchbar?  Sollte ja auch nur ein FTDI Ding drin sein, oder?

Eine "dumme" Nebenfrage: Wenn ich Steckpins wie auf der Buchsenleiste 
des zweiten Produkts untereinander verbinden will, ohne zu löten, gibt 
es da fertige female pin Verbinder , die man an ein Kabel dranlötet, 
oder die es schon als kurze Verbindungselemente (Kabel) gibt?

von Martin K. (dschadu)


Lesenswert?

Warum kompliziert Debugen über UART? Das F4Discovery Board hat einen 
Programmer onboard der aus SWG unterstützt, spricht Debuging on Chip.

Nutz doch das! Da kannst du überall Brakepoints setzen, Variablen 
beobachten etc... wesentlich komfortabler wie über UART.

von Linüx (Gast)


Lesenswert?

Inzwischen gibt es auch tausende fertige Projekte fertig eingerichtet 
mit CooCox.

von ARM Einsteiger (Gast)


Lesenswert?

Martin K. schrieb:
> Warum kompliziert Debugen über UART? Das F4Discovery Board hat einen
> Programmer onboard der aus SWG unterstützt, spricht Debuging on Chip.

es geht nicht nur um Debuggen, sondern auch darum, mit dem Ding 
"sprechen" zu könnnen. Ich wille eine bereits vorhandene App zum Laufen 
bringen, die man über ein Hyterterminal aussteuert.

;-)

von hp-freund (Gast)


Lesenswert?

ARM Einsteiger schrieb im Beitrag #3159776:
> gibt es da fertige female pin Verbinder , die man an ein Kabel dranlötet,
> oder die es schon als kurze Verbindungselemente (Kabel) gibt?

ebay 190685792376

Kosten zwar etwas weniger ;-) , hab ich aber auch im Einsatz.
Davon kann man ruhig ein paar liegen haben.
Das Problem mit den Verbindern ist auch gelöst...

von ARM Einsteiger (Gast)


Lesenswert?

und der Treiber dazu? Ist der dabei? oder ein Link? Oder sind es eh nur 
die FTDI Treiber?

von hp-freund (Gast)


Lesenswert?

Ist ein CP2102.
Linux erkennt den sofort, Win7 hat einen Treiber gefunden.

von hp-freund (Gast)


Lesenswert?


von ARM Einsteiger (Gast)


Lesenswert?

und der ebay anbieter ist verlässlich. kommt ja aus USA

von hp-freund (Gast)


Lesenswert?

Bei mir steht Hong Kong.
Hatte aber noch nie Probleme. Musst eben 2-3 Wochen warten können.

von W.S. (Gast)


Lesenswert?

Uwe B. schrieb:
> du brauchst allerdings ein USB-Kabel dazu mit Mikro-Stecker

...und die Treiber von ST, gelle?

Eine richtige CDC Firmware zu schreiben, die mit den beim jeweiligen 
Betriebssystem vorhandenen Treibern auskommt, ist hingegen eine viel 
schwierigere Nummer. Ich hab genau aus diesem Grunde schon öfters 
einen Chip von FTDI verwendet, obwohl der eigentliche uC selber nen 
USB-Port hat.

W.S.

von holger (Gast)


Lesenswert?

>Ich hab genau aus diesem Grunde schon öfters
>einen Chip von FTDI verwendet, obwohl der eigentliche uC selber nen
>USB-Port hat.

VCP eignet sich in Verbindung mit einem JTAG Debugger
sowieso nicht für Degug Ausgaben. Wenn man mal mit dem
JTAG in Single Step geht und die CPU anhält meldet
Win sofort den VCP ab. Was das Terminal das die Debugausgaben
vom VCP bekommen soll dann macht wenn ihm der COM Port
unterm Arsch weggezogen wird ist eine andere Sache.

von ARM Einsteiger (Gast)


Lesenswert?

Ich habe eine reine Verständnisfrage (es ist keine Expertenfrage und hat 
eigentlich auch nichts mit einem speziellen Controller zu tun, also 
nicht gleich auf mich eindreschen, wenn die Frage etwas holprig 
rüberkommt für Leute, die schon 10 Jahre nichts anderes machen...):

Ich hab mir http://mikrocontroller.bplaced.net/wordpress/?page_id=1263
angesehen, wo ein findiger Kopf eine CDC auf einem STM32F4 implementiert 
hat. Ich habe die Applikation soweit zum Laufen gebracht, dass am PC ein 
COM Port geöffnet wird, sobald ich mein Discovery Board über dem Micro 
USB anschließe. Leider geht nichts, wenn ich Daten über "Tera Term" 
sende. Aber das ist jetzt  nicht das Problem, sondern ich möchte jetzt 
nur wissen, wie das ganze PRINZIPIELL mal funktioniert. Das Thema USB 
lässt mir seitdem keine Ruhe mehr, da ich (bis zu einem gewissen Grad) 
verstehen möchte, wie die Schnittstelle funktioniert, insbesondere so 
ein "VCP".

So wie ich das bisher verstanden habe, gibt es eine Device Class "CDC", 
die diese Aufgabe realisiert. Stimmt das einmal? Ist CDC = VCP ? Da dies 
sicher nicht der Fall ist ;-), wo ist dann die Abgrenzung? Wann spricht 
man von VCP, wann von CDC?

Die Spezifikation für CDC ist ja unter 
http://www.usb.org/developers/devclass_docs/usbcdc11.pdf

zu finden. Dies scheint also ein "Standard" zu sein. Wenn es einen 
Standard gibt, wieso gibt es dann nicht Standard Treiber auf PC Seite, 
die schon eingebaut sind? Es gibt ja Treiber von ST, von FTDI, etc, ...? 
Wo ist da der herstellerspezifische Unterschied?

Und wenn ich (rein theoretisch) einen Device Controller im Gerät 
implementieren möchte (wie im Beispiel), gegen welche Spezifikation 
müsste ich dann implementieren? Gegen die obige? Falls ja: heißt das, 
das alles wa da drinsteht, irgendwie in meinem Beispielcode abgebildet 
ist? So wahnsinnig umfangreich kommt mir der nämlich nicht vor, und die 
SPEC erscheint mir recht komplex...

Und was wäre dann herstellerspezifisch zu tun? Der obige Code beruht ja 
auf dem ST Treiber, den man am PC installieren muss, damit es läuft. Und 
wo lese ich das dann nach? Und Wie grenzt sich das vom Standard ab?

Vielleicht kann mir da jemand auf die Sprünge helfen?

Danke!

von W.S. (Gast)


Lesenswert?

ARM Einsteiger schrieb im Beitrag #3162773:
> Ist CDC = VCP ?

Nö.

Also, VCP heißt Virtueller Com Port. Die richtigen COM-Ports werden ja 
vom Betriebssystem bedient und gepuffert - und als Anwendungsprogramm 
greift man nicht direkt auf so einen Port zu, sondern auf API-Funktionen 
des BS, die ihrerseits alles Nötige tun. Ein virtueller Com Port ist nun 
einer, auf den man genauso mit den gleichen API-Funktionen zugreift, 
obwohl dahinter was ganz anderes als ein COM-Port stecken kann. Das 
braucht nicht mal USB zu sein.

CDC ist ne Geräteklasse am USB, konkret eine bestimmte Zahl in einem 
Byte (oder Word) in einer Descriptortafel, die das USB-Gerät an den PC 
liefern muß, wenn dieser danach fragt. Ich glaub, die 2 war CDC. Aber 
wie sich im Einzelnen nun so ein uC verhält, der sich am USB als CDC 
ausgibt, also wie im Detail er serielle Daten zu Paketen zusammenfasst, 
wie er gesendete Daten puffert und ausgibt und so weiter, das ist ne 
ganz andere Frage. Obendrein kennt Windows ja eigentlich gar kein 
Gerät, sondern fragt Hersteller- und Geräte-ID ab und sucht dann 
verzweifelt in seinen 1000 Inf-Files danach. Wenn sich dort was findet, 
dann wird das genommen, was dort drin steht (was auch immer) - wenn 
nicht, dann ist Neese..

W.S.

von ARM Einsteiger (Gast)


Lesenswert?

Ja, aber wie ist dann zu verstehen, wenn unter 
https://de.wikipedia.org/wiki/Universal_Serial_Bus#Ger.C3.A4teklassen 
geschrieben steht, dass CDC als Geräteklasse 0Ah bloß einen generischen 
Treiber benötigt, und man aber trotzdem einen spezifischen Treiber 
installieren muss? Ich musste für das genannte Beispiel einen ST Treiber 
installieren...

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.