Forum: Mikrocontroller und Digitale Elektronik USB VirtualComPort: Wie aktive Verbindung mit PC erkennen ?


von Dirk B. (garag)


Lesenswert?

Moin moin,

auf dem STM32l Discovery board habe ich einen Virtual Com Port über USB 
implementiert. Wie kann man erkennen, ob sich ein Terminal/Programm auf 
dem PC mit dem Com Port verbunden hat. Nur anhand von gesendeten Daten 
(PC->Board) ?

lg
Garag

von Thomas E. (thomase)


Lesenswert?

Dirk B. schrieb:
> Nur anhand von gesendeten Daten
> (PC->Board) ?
Wenn du Hardware-Datenflusskontrolle einstellst, werden die
Steuerleitungen gesetzt.

mfg.

von Matthias N. (nippey)


Lesenswert?

Wo willst du das sehen?
Auf PC oder uC Seite?

Auf der PC Seite könntest du einfach versuchen den besagten Port noch 
ein mal zu öffnen. Wenn es einen Fehler gibt, ist er durch ein anderes 
Programm belegt.

von Achim M. (minifloat)


Lesenswert?

Dirk B. schrieb:
> Terminal/Programm

Meist bleibt die ganze Menüstruktur/Parsermimik etc. noch inaktiv, das 
gilt auch für Teile innerhalb des RX-Interrupts. Angeschaltet wird das 
ganze dann z.B. mit der Enter-Taste als "magic byte", worauf ein Flag 
gesetzt wird o.ä.

Somit bleibt genug Zeit für den "Alltag", wenn die Konsole nicht 
gebraucht wird.

mfg mf

von Dirk B. (garag)


Lesenswert?

Ich würde das gerne auf der uC Seite erkennen. Es gibt ja den CDC Class 
Request "SetControlLineState" womit z.B. DTR gesetzt werden kann. Nur 
leider wird das wohl nicht automatisch beim Öffnen des Com Ports 
gesendet.

Ich wollte halt ungerne ständig Daten an den PC senden obwohl niemand 
die Daten abholt. Es bleibt natürlich die Möglichkeit, dass über das 
Protokoll zu regeln.

Gruß
Garag

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

ein Terminalprogramm tut garnichts, solange du nicht eine Taste drückst, 
das ist absichtlich so.

Wenn du aber ein eigenes Protokoll fährst, must du dir eh Gedanken über 
die Initialisierung machen, da kannst du entweder den PC oder dein Gerät 
ein Anfrage-Zeichen bzw. Sequenz senden lassen, aber dazu brauchst du 
eben eigene Software, mit einem Terminalprogramm ist sowas wenn 
überhaupt möglich dann sehr mühsam (ganz besonders bei binären Daten, 
ich verwende daher nur noch ASCII-Protokolle).

Manche Programme zum Datenempfang, die Xon/Xoff verwenden, senden nach 
dem Start solange etwa alle Sekunde ein Xon, bis Daten kommen oder das 
Programm wieder beendet wird, das ist so etwa die einfachste Möglichkeit 
für einen "Autostart" beim Zusammenstecken.

Gruss Reinhard

von abudhabi (Gast)


Lesenswert?

Hey leutz,

ich möchte bei mir auf meinem stm32l discovery einen Virtuellen com Port 
einrichten und finde im Internet keinen fertigen Code dafür :/
Könnte mir die Jemand zu verfügung stellen??
Wäre sehr dankbar dafür.

gruß

von Dirk B. (garag)


Lesenswert?

Hallo abudhabi,

von ST gibt es eine USB Lib mit Beispielen. Zu den Beispielen gehört 
auch eine Virtual Com Port Demo. Die Lib verwendet die standard Lib von 
ST.

Da ich die Standard Libs nicht sonderlich mag und gerne direkt mit der 
Hardware arbeite, habe ich mir eine eigene VCP implementierung 
geschrieben. Vom Prinzip her läuft das auch, jedoch wird kein Suspend 
unterstützt und der Empfang von Daten (uC Seite) könnte durchaus noch 
eine Überarbeitung vertragen.

Schau dir am besten erstmal die Sachen von ST an.

Gruß
Garag

von abudhabi (Gast)


Lesenswert?

Hey,

Danke für deine Antwort.
Ich habe auf der Website von st 
(http://www.st.com/internet/mcu/product/248820.jsp) die verpackte Datei 
"STM32F10x and STM32L1xx USB full-speed device library" runtergeladen.

Ich arbeite mit der Software µKeil...ich versuche seit 2 Tagen den 
Virtual Comport zum laufen zu bringen und es klappt einfach nicht.
Als erstes ist da kein Code für den stm32l discovery, deshalb habe ich 
die für stm32-eval genommen. Liegt der Fehler schon da???
Die Software Compiliert und ich kann es flashen doch sehe ich keine Com 
Verbindung mit dem computer O.o...
Sollte ich an dem Code noch was machen??

Ich habe bis jetzt leichte programme geschrieben und die Verbindung 
zwischen PC und µC übersteigt mein wissen :/

Ich wäre für hilfe sehr dankbar!

gruß

abuhabi

von W.S. (Gast)


Lesenswert?

Passiert denn wenigstens irgendetwas auf dem PC, wenn du deinnen STM32 
an den USB dransteckst?

Meines Wissens gibt es für virtuelle COM-Ports keine Standardlösung wie 
für Mäuse, Massenspeicher usw. so daß jeder Hersteller irgendwo dann 
doch sein spezielles Süppchen kocht.

W.S.

von Ralf (Gast)


Lesenswert?

> Meines Wissens gibt es für virtuelle COM-Ports keine Standardlösung wie
> für Mäuse, Massenspeicher usw. so daß jeder Hersteller irgendwo dann
> doch sein spezielles Süppchen kocht.
Wieso? Ein VCP gehört zur CDC-Klasse. Dass FTDI beispielsweise einen 
eigenen Treiber anbietet liegt m.E. eher an deren Treibermodell mit der 
Möglichkeit den Chip sowohl als COM-Port ansprechen zu können als auch 
über eine DLL Zugriff zu haben.
Ein weiterer Grund ist, dass die usbser.sys (also die vom OS 
bereitgestellte VCP/CDC-Treiberdatei) von Windows nicht das gelbe vom Ei 
ist und daher werden sich die meisten Hersteller wohl selbst was 
schreiben.

Ich habe für eine 8-Bit-MCU mit USB VCP-Implementierungen gesehen, die 
keinen eigenen Treiber benötigten, lediglich die passende INF-Datei.

Ralf

von abudhabi (Gast)


Lesenswert?

ich bekomme keinen virtual comport im geräte manager angezeigt sondern 
den Standart stm32 usb anschluss...

von Ralf (Gast)


Lesenswert?

> ich bekomme keinen virtual comport im geräte manager angezeigt sondern
> den Standart stm32 usb anschluss...
Wo hast du USB angeschlossen?

Ralf

von abudhabi (Gast)


Lesenswert?

Ich habe es an PA0 und PA1 angeschlossen..in der docu steht USART2...

von Ralf (Gast)


Lesenswert?

> Ich habe es an PA0 und PA1 angeschlossen..in der docu steht USART2...
Wat? Moment, nochmal von vorn... Du hast eine VCP-Firmware auf den 
Controller geschubst, richtig?
Welche USB-Schnittstelle des Boards verwendest du? Soweit ich sehen 
kann, ist eine Buchse vorhanden, die sieht mir aber stark nach der für 
den on-board-Programmer/Debugger aus. Weitere USB-Anschlüsse bzw. -kabel 
müsstest du also selber dranlöten.
Und sicher nicht USB-Kabel an USART2, denn ein U(S)ART ist kein 
USB-Anschluss.

Ralf

von abudhabi (Gast)


Lesenswert?

Ich hab mich mit PA0 und PA1 vertan..PA11 und PA12 habe ich genommen. 
Ich bekomme als meldung das ein unbekanntes USB gerät angeschlossen ist, 
obwohl die treiber software installiert ist...???

Kann ich auf stm32l discovery die Software vom stm32l Eval benutzen??
Auf der St seite ist für meinem µC diese Software gegeben...:/

abudhabi

von Ralf (Gast)


Lesenswert?

> Ich hab mich mit PA0 und PA1 vertan..PA11 und PA12 habe ich genommen.
Okay, hab jetzt nicht geguckt, ob das die USB-Schnittstelle ist, ...

> Ich bekomme als meldung das ein unbekanntes USB gerät angeschlossen ist,
... aber das hört sich danach an :)

> obwohl die treiber software installiert ist...???
USB Vendor- und Product-ID stimmen mit dem Treiber überein?

> Kann ich auf stm32l discovery die Software vom stm32l Eval benutzen??
> Auf der St seite ist für meinem µC diese Software gegeben...:/
Prinzipiell würde ich sagen ja, allerdings würde ich vorher prüfen, was 
die Eval-Firmware macht (LEDs ansteuern, etc.) und vergleichen, ob die 
Ports bei dir ebenfalls auf LEDs gehen. Damit verhinderst du, dass was 
abraucht, wenn ansonsten ein Ausgang auf einen Ausgang gelegt würde.
Alternativ die Eval-Firmware soweit runterstrippen, dass nur noch der 
relevante VCP-Teil (den willst du ja) vorhanden ist.

Ralf

von abudhabi (Gast)


Lesenswert?

Hey,

die USB Vendor und Product-ID bei dem virtuellen com port ist:
(Programm USBView)

idVendor:           0x0000
idProduct:          0x0000
Alle anderen Werte werden auch als 0 gezeigt.

Ich habe die xx.inf datei vom Com port Treiber geändert und neu 
installiert, hat leider immer noch nichts gebracht. Es wird immer noch 
als Unknown Device gezeigt...Ich nehme an der Fehler liegt am Code??

abudhabi

von abudhabi (Gast)


Lesenswert?

hey @all,

mit der hilfe von einem Kumpel habe ich es endlich geschafft das problem 
zu lösen...ich stelle gerne meinen Code zur Verfügung wenn gewünscht!
Da ich nur als gast angemeldet bin werde ich gelegentlich auf der Seite 
vorbeischauen, d.h. wer meinen Code für den stm32l discovere VCP möchte 
kann hier schreiben und ich schicke den Code weiter.....

Danke für die leute die mir hier hilfen wollten :)

abudhabi

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.