Forum: Mikrocontroller und Digitale Elektronik Daten zwischen PC und USB-Device austauschen. Suche einfachen Weg.


von Markus C. (cano)


Lesenswert?

Hallo

ich brauche mal jemanden, der mir in der USB-Welt ganz grob die Richtung 
zeigt.Denn je mehr ich mich in das Thema hineinlese, desto verwirrter 
bin ich.

Ich habe vor 10 Jahren eine Elektronik entwickelt, die Betriebsdaten 
erfasst.Die Daten können über eine RS232-Schnittstelle auf einen 
Windows-PC ausgelesen werden.

Nun machen mir meine Kunden druck, weil neu erworbene PC’s über 
keinerlei RS232-Schnittstelle mehr verfügen. Mit dem 
USB-RS232-Schnittstellenadapter habe ich nur ärger, weil immer dann, 
wenn ein weiteres USB-Gerät im PC eingesteckt wird, die COM-Port-Nummer 
meiner Elektronik auf eine andere Nummer weiterwandert. Erst wenn man 
meinen Adapter in der Systemsteuerung mit einer festen Adresse 
einstellt, klappt es problemlos.
Wechselt der PC, gehen diese Anfragen von neuem los. Seit es die gute 
alte RS232-Schnittstell nicht mehr gibt, muss ich viel mehr 
Servicetelefonate führen.

Neues Ziel:
Ich habe mir vorgenommen, meine Geräte mit einer USB-Schnittstelle 
nachzurüsten. Ich verwende einen Fujitsu MB90340-Controller der I2C 
kann. (leider noch kein SPI). Ich möchte gerne eine I2C to USB Bridge 
einsetzen.
Von FTDI gibt es schönen Bausteine, wie ich gesehen habe. Ich will aber 
nicht schon wieder einen Virtuellen COM Port, dann habe ich nur wieder 
das Problem der wandernden Portnummern. Ich habe von USB-HID-Bausteinen 
gelesen. Wäre das einen Lösung? Oder kann man damit nur einfache 
Eingabegeräte bauen?

Ich stelle mir das folgendermaßen vor:
Ich verbinde meine Elektronik über USB mit dem PC. Der PC erkennt meine 
USB-Schnittstelle und zeigt mir im Windows Explorer ein Verzeichnis an, 
in der die Dateien meiner Aufzeichnung abliegen. Ich kann Dateien (wie 
bei einem MP3-Player) zwischen Gerät und PC hin und her kopieren. So der 
Wunsch.

Nun zu meiner Frage:
Ist diese Funktionalität bereits mit einem USB-HID-Baustein möglich?
Oder benötige ich eine andere Art von USB-Device.
Das USB-Thema ist sehr komplex. Ich wäre dankbar, wenn mir jemand ganz 
grob die Richtung zeigen könnte.
Welche Art von USB-Device benötige ich.
Was sind geschickte Bausteine, die mir die Protokollarbeit abnehmen.
Vielleicht gibt es auch schon Demos, die ich mal studieren könnte?

Vielen Dank schon einmal vorab für Eure Hilfestellung.

Grüße Markus

von M. K. (sylaina)


Lesenswert?

Schau dir mal V-USB an, das könnte interessant für dich sein.

https://www.obdev.at/products/vusb/index.html

von fchk (Gast)


Lesenswert?

VUSB ist eine technische Krücke und hat die Zertifizierung durch das USB 
Implementers Forum nicht bekommen. Das alleine ist ein Grund, es nicht 
für kommerzielle Applikationen einzusetzen, zudem es nur Low-Speed kann. 
Außerdem kann eine kommerzielle Liznz echt ins Geld gehen.

Wenn Du einen USB zu I2C Baustein suchst, dann schau Dir den MCP2221A 
an. Der hat eine serielle Schnnittstelle, 4 GPIOs und I2C, braucht 
keinen Quarz, und Du bekommst Bibliotheken für Windows und Linux. Das 
ist ein Composite CDC-ACM (für seriell)/HID (für GPIO und I2C) Device.

Wenn Du die serielle Schnittstelle benutzt, bekommst Du die Nummer des 
COM-Ports über das Windows SetupAPI heraus. Dafür musst Du Deinem 
USB-UART-Adapter entweder eine eigene VID/PID oder einen eigenen 
Stringdescriptor verpassen, mit dem Du ihn in der SetupAPI 
identifizieren kannst.

fchk

von Pandur S. (jetztnicht)


Lesenswert?

Nun. Der Vorteil und Nachteil von USB ist dass er sich selbst beim 
System anmeldet. Also :

-hallo system, ich bin ein
 a) HID = 60 packete pro Sekunde, gut fuer Keyboard & Mouse
    Treiber ist Teil des systems, vorhanden, wird geladen
 b) Mass Storage = Zeige Filesystem
    Treiber ist Teil des systems, vorhanden, wird geladen
 c) Virtual comport - erscheint gegenueber der PC Software
    als Serial Port, Treiber wahrscheinlich vorhanden,
    wird geladen
 d) irgendwas anderes - Funktionalitaet irgendwas
    Treiber nicht vorhanden, CD Einschieben, Treiber laden

zu d) Wie lange gibt es den Treiber noch ? Denn, neues Windows, neuer 
Treiber, Der Treiberhersteller muss jeweils einen neuen Treiber 
bereitstellen. Windows 12 ? Windows 14 ? Falls das Geraet nicht so gut 
laeuft, hat der Hersteller vielleicht keine Lust das Geraet zu lange zu 
unterstuetzen. Allenfalls hat der Hersteller auch andere Vorstellungen 
zum Produkt Life Cycle. Im Sinne von nach 2 Jahren ist das Geraet 
sowieso veraltet, die Kunden sollen ein Neues kaufen.

Wenn du den Treiber selbst schreibst .. ist machbar, auch wenn nicht 
trivial, gilt dasselbe auch.

Du moechtest eine Logger als Storage Device ansteuern ... kann man 
machen. Aber die Konfiguration geschieht wie ? Per Front panel .. kann 
man so machen. Per USB ? Dann muesste man ein Konfig file schreiben, 
editieren, und laden. Geht auch. Also, dann schreib ein USB Storage 
Device fuer ein dein Geraet. Literatur dazu waere zB Jan Axelson, USB 
Mass Storage, und den Rest. Nimm dir 3 Monate, vielleicht auch mehr.

: Bearbeitet durch User
von Micha (Gast)


Lesenswert?

Zudem ist VUSB mit der heißen Nadel für AVRs gestrickt. Ich gehe aber 
davon aus, dass er die MCU beibehalten möchte.

von Pandur S. (jetztnicht)


Lesenswert?

Die MCU beibehalten ? Eher nicht. Allenfalls die naechst groessere, 
falls denn erhaeltlich und kompatibel. Eine USB Implementierung ist 
nicht trivial, wenn es um eine eigene Klasse geht.

von Volker S. (vloki)


Lesenswert?

markus c. schrieb:
> Ich möchte gerne eine I2C to USB Bridge
> einsetzen.
> Von FTDI gibt es schönen Bausteine, wie ich gesehen habe. Ich will aber
> nicht schon wieder einen Virtuellen COM Port,

Schau dir mal den MCP2221A an.
Der kann USB -> USART und I2C.
I2C geht dabei (soweit ich weiß) über HID.

von Micha (Gast)


Lesenswert?

So wie ich das lese und interpretiere hat er aber genau das vor.

markus c. schrieb:
> Nun zu meiner Frage:
> Ist diese Funktionalität bereits mit einem USB-HID-Baustein möglich?
> Oder benötige ich eine andere Art von USB-Device.

Nein, mit einem HID Device schaffst du das nicht. Bei einem HID-Device 
kannst du die Kommunikation nach deinen Wünschen gestalten, brauchst 
aber auf PC-Seite eine entsprechende Software speziell dafür. Geht also 
eher in Richtung deiner RS232-Variante, wie du sie aktuell verwendest.

Wenn du das Ding als "Speicher" im Windows Explorer sehen willst, 
brauchst du ein Mass Storage Device, hast dann aber das Thema mit der 
Konfiguration. Lässt sich aber lösen, indem du diese ebenfalls als Datei 
ablegst und einmalig beim Einstecken ausliest.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

markus c. schrieb:
> Mit dem USB-RS232-Schnittstellenadapter habe ich nur ärger, weil immer
> dann, wenn ein weiteres USB-Gerät im PC eingesteckt wird, die
> COM-Port-Nummer meiner Elektronik auf eine andere Nummer weiterwandert.

Würdest Du eine USB-RS232-Bridge verwenden, die eine eindeutige 
Seriennummer hat, gäbe es dieses Problem nicht. Dafür kann man an den 
meisten FTDI-Bausteinen ein serielles EEPROM anschließen; der FT232R hat 
dieses EEPROM sogar integriert (und damit ab Werk eine eineindeutige 
Seriennummer).

von avr (Gast)


Lesenswert?

Zitronen F. schrieb:
> HID = 60 packete pro Sekunde, gut fuer Keyboard & Mouse
>     Treiber ist Teil des systems, vorhanden, wird geladen

Hid hat nichts mit 60/Pakete pro Sekunde zu tun. Neben Interrupt 
Transfers unterstützt es auch Control Transfers, die für reine 
Datenübertragung geeigneter sind. So lange die Datenrate ausreicht, ist 
hid grundsätzlich keine schlechte Wahl.

von Wolfgang (Gast)


Lesenswert?

markus c. schrieb:
> Mit dem USB-RS232-Schnittstellenadapter habe ich nur ärger, weil immer
> dann, wenn ein weiteres USB-Gerät im PC eingesteckt wird, die
> COM-Port-Nummer meiner Elektronik auf eine andere Nummer weiterwandert.
> Erst wenn man meinen Adapter in der Systemsteuerung mit einer festen
> Adresse einstellt, klappt es problemlos.

Dann liegt die Baustelle bei deiner PC Software und/oder bei der 
VID/PID/SN Konfiguration deines USB-Serial Konverters.

Die AN_123 von FTDI zu dem Thema hast du gelesen?

von Tany (Gast)


Lesenswert?

markus c. schrieb:
> Ich stelle mir das folgendermaßen vor:
> Ich verbinde meine Elektronik über USB mit dem PC. Der PC erkennt meine
> USB-Schnittstelle und zeigt mir im Windows Explorer ein Verzeichnis an,

Startet Windows Explorer automatisch von BS oder über dein eigenes 
Programm?

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


Lesenswert?

Kennst du USB4ALL ??

von Wolfgang H. (drahtverhau)


Lesenswert?

Hi... Warum nicht so ansprechen wie man es richtig macht... 
https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.SerialCommunication
?

von Markus C. (cano)


Lesenswert?

Ich habe 500 Geräte mit Fujitsu MB90340 bei meinen Kunden.
Ich möchte die USB-Schnittstelle gerne nachrüsten. Ich kann den 
Controller nicht gegen einen Atmel AVR tauschen. Der Aufwand wäre zu 
groß.

von Markus C. (cano)


Lesenswert?

M. K. schrieb:
> Schau dir mal V-USB an, das könnte interessant für dich sein.
>
> https://www.obdev.at/products/vusb/index.html

Ich habe 500 Geräte mit Fujitsu MB90340 bei meinen Kunden.
Ich möchte die USB-Schnittstelle gerne nachrüsten. Ich kann den 
Controller nicht gegen einen Atmel AVR tauschen. Der Aufwand wäre zu 
groß.

von Markus C. (cano)


Lesenswert?

M. K. schrieb:
> Schau dir mal V-USB an, das könnte interessant für dich sein.
>
> https://www.obdev.at/products/vusb/index.html

Ich habe 500 Geräte mit Fujitsu MB90340 bei meinen Kunden.
Ich möchte die USB-Schnittstelle gerne nachrüsten. Ich kann den 
Controller nicht gegen einen Atmel AVR tauschen. Der Aufwand wäre zu 
groß.

fchk schrieb:
> VUSB ist eine technische Krücke und hat die Zertifizierung durch
> das USB
> Implementers Forum nicht bekommen. Das alleine ist ein Grund, es nicht
> für kommerzielle Applikationen einzusetzen, zudem es nur Low-Speed kann.
> Außerdem kann eine kommerzielle Liznz echt ins Geld gehen.
>
> Wenn Du einen USB zu I2C Baustein suchst, dann schau Dir den MCP2221A
> an. Der hat eine serielle Schnnittstelle, 4 GPIOs und I2C, braucht
> keinen Quarz, und Du bekommst Bibliotheken für Windows und Linux. Das
> ist ein Composite CDC-ACM (für seriell)/HID (für GPIO und I2C) Device.
>
> Wenn Du die serielle Schnittstelle benutzt, bekommst Du die Nummer des
> COM-Ports über das Windows SetupAPI heraus. Dafür musst Du Deinem
> USB-UART-Adapter entweder eine eigene VID/PID oder einen eigenen
> Stringdescriptor verpassen, mit dem Du ihn in der SetupAPI
> identifizieren kannst.
>
> fchk

Der Baustein MCP2221 kann CDC und HID
So wie ich das verstanden habe, benötigen ich aber ein Mass Storage 
Device, wenn ich Daten per Drag and Drop hin und her kopieren möchte.

von Markus C. (cano)


Lesenswert?

Zitronen F. schrieb:
> Jan Axelson, USB
> Mass Storage

das schau ich mir mal an. Danke

von Markus C. (cano)


Lesenswert?

Micha schrieb:
> Wenn du das Ding als "Speicher" im Windows Explorer sehen willst,
> brauchst du ein Mass Storage Device, hast dann aber das Thema mit der
> Konfiguration. Lässt sich aber lösen, indem du diese ebenfalls als Datei
> ablegst und einmalig beim Einstecken ausliest.

Ok, diesen Weg werde ich mir genauer anschauen!
Hier gibt es wohl keine fertigen Bausteine, die einem die Arbeit 
erleichtern?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

In meinem USB-Tutorial mit STM32 ist beschrieben, wie du ein 
komplettes USB-Gerät selbst entwickelst, welches auch ohne Windows keine 
Treiber-Installation benötigt (Zugriff via WinUSB). Tatsächlich ist 
USB-Entwicklung gar nicht so schwierig, wenn man alle nötigen 
Informationen hat.

Rufus Τ. F. schrieb:
> (und damit ab Werk eine eineindeutige
> Seriennummer).
Eineindeutig? Zu jeder Seriennummer existiert ein Gerät? ;-)

: Bearbeitet durch User
von Markus C. (cano)


Lesenswert?

Fred R. schrieb:
> Kennst du USB4ALL ??

Nein USB4ALL  kannte ich noch nicht.
Kann sich USB4ALL als Storage Device am PC melden?
Ich möchte gerne Dateien über Drag and Drop kopieren, denn damit können 
meine Kunde umgehen.

von S. R. (svenska)


Lesenswert?

markus c. schrieb:
> Mit dem USB-RS232-Schnittstellenadapter habe ich nur ärger, weil
> immer dann, wenn ein weiteres USB-Gerät im PC eingesteckt wird,
> die COM-Port-Nummer meiner Elektronik auf eine andere Nummer
> weiterwandert.

Du hast doch bereits ein PC-Programm, mit dem du den Datenaustausch über 
RS232 vornimmst. In diesem Programm kann man den COM-Port sicherlich 
auch einstellen, oder?

Erweitere dein Programm doch einfach um eine Einstellmöglichkeit "USB", 
die dann einen USB-Seriell-Adapter nimmt und dessen Seriennummer (statt 
der COM-Portnummer) in den Einstellungen speichert. Die aktuelle 
COM-Portnummer des Wandlers kannst du beim Programmstart automatisch 
ermitteln.

markus c. schrieb:
> So wie ich das verstanden habe, benötigen ich aber ein Mass Storage
> Device, wenn ich Daten per Drag and Drop hin und her kopieren möchte.

Nicht unbedingt. Ein Mass Storage Device ist eine Festplatte. Du 
kopierst also nur "Blöcke" umher. Dein Gerät muss in der Lage sein, mit 
dem Dateisystem zuverlässig umzugehen (auch dann, wenn der Nutzer das 
"Laufwerk" formatiert oder anderen Unfug damit treibt).

Für einen einfachen Dateiaustausch wäre MTP (Media Transfer Protocol) 
möglicherweise geeigneter, wie es inzwischen von jedem Android benutzt 
wird. Damit tauschst du tatsächlich "Dateien" aus, das Gerät taucht mit 
seinem Namen im Explorer auf und es bekommt keinen Laufwerksbuchstaben.

Die einfachste Lösung wäre aber, dein derzeitiges Programm um 
USB-Seriell-Adapter zu erweitern und für zukünftige Geräte einen solchen 
in das Gerät zu integrieren. Eine ordentliche USB-Integration (ohne 
Stress mit Treibern und zuverlässig) ist nicht einfach zu machen, wenn 
die Gerätearchitektur dafür nicht ausgelegt ist.

von Markus C. (cano)


Lesenswert?

Niklas G. schrieb:
> In meinem USB-Tutorial mit STM32 ist beschrieben, wie du ein
> komplettes USB-Gerät selbst entwickelst

prima, ... schau ich mir an!

von Micha (Gast)


Lesenswert?

markus c. schrieb:
> Ok, diesen Weg werde ich mir genauer anschauen!
> Hier gibt es wohl keine fertigen Bausteine, die einem die Arbeit
> erleichtern?

Eine schnelle Suche fördert den FTDI FT12x zutage. Der hat allerdings 
nur eine SPI-Schnittstelle. Mit I2C oder RS232 wird es da nichts geben, 
weil viel zu langsam. Du wirst dir vermutlich mittels eines 2. 
Controllers selber eine Bridge bauen müssen, wenn du unbedingt am 
derzeitigen Controller festhalten willst.


Wolfgang schrieb:
> Die AN_123 von FTDI zu dem Thema hast du gelesen?

Da ist das sicher die einfachere und bessere Lösung denke ich. Das 
Produkt scheint ja zu funktionieren und das einzige Problem ist das 
COM-Port-Gefrickel. Ggf. musst du halt selbst die USB<->RS232 einkaufen, 
konfigurieren und dem Produkt beilegen.

Parallel könntest du ein Redesign starten und die MCU gegen irgendwas 
mit USB-Peripherie ersetzen.

von Bentschie (Gast)


Lesenswert?

Du kannst es auch komplett in die Software auslagern.

Die PC-Software fragt einfach alle COM-Ports (COM0..COM255) ab.
Die meisten lassen sich nicht initalisieren, da sie schlicht nicht 
existieren.

Bei allen Ports wo ein INIT klappt, schickst Du einfach eine Anfrage an 
Dein Gerät (zb. "IDN?" wie bei Messgeräten..)
Das Gerät, das die richtige Antwort schickt wird verwendet.

Der Nutzer merkt das gar nicht, das dauert in Labview unter Win7 
vielleicht 3 Sekunden, je nachdem wie viele Ports sich Initalisiern 
lassen und dann falsch antworten.

Blöd wirds dann, wenn mehrere Deiner Geräte an einem PC hängen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bentschie schrieb:
> Bei allen Ports wo ein INIT klappt, schickst Du einfach eine Anfrage an
> Dein Gerät (zb. "IDN?" wie bei Messgeräten..)
> Das Gerät, das die richtige Antwort schickt wird verwendet.

Das ist derber Pfusch, da nicht sichergestellt werden kann, daß andere 
Geräte darüber glücklich sind, wenn über ihre Schnittstellen einfach 
irgendwas 'reingerotzt wird.

von Pandur S. (jetztnicht)


Lesenswert?

Die verfuegbaren Comports werden aus der Registry abgefragt.

von Bentschie (Gast)


Lesenswert?

Damit müssen die aber immer rechnen. Wenn ich das "händisch" 
ausprobiere, kann das auch passieren.
Ja, gut. Ich hab das bisher nur "für mich" im Labor gemacht. Der eine 
oder ander Kunde könnte damit Zicken haben.

Dann halt umgedreht. Das Gerät sendet ständig einen String an den PC zur 
Identifikation.

Ich lausche also auf allen COM Ports, ob des richtige kommt.
Dann dauert halt das suchen etwas länger, aber es wird niemand 
belästigt.

Der Vorteil dieser Methode ist halt, das geht immer. Auch mit dem 
neuesten Win10 Upgrade und dem dümmsten USB-Seriell Adapter (natürlich 
nur, sofern der Adapter prinzipell tut). Ohne irgendwelchen Eingriffe in 
die Registry.
Auch unter Linux in WINE oder sonst wo.

von Wolfgang (Gast)


Lesenswert?

Bentschie schrieb:
> Bei allen Ports wo ein INIT klappt, schickst Du einfach eine Anfrage an
> Dein Gerät (zb. "IDN?" wie bei Messgeräten..)
> Das Gerät, das die richtige Antwort schickt wird verwendet.

Es soll ein Betriebssystem geben, das standardmäßig alle COM-Ports, auf 
denen serielle Daten rein kommen, als Serial Ballpoint Mouse im 
Betriebssystem anmeldet. Da muss man nur ein GPS mit NMEA Daten 
anstecken ... und schon geht's ab.

Wie hieß die Firma noch - Micro<irgendwas>?

von Tany (Gast)


Lesenswert?

Bentschie schrieb:
> Dann halt umgedreht. Das Gerät sendet ständig einen String an den PC zur
> Identifikation.
Naja, warum nicht die Lösung mit dem Namenspace wie oben erwähnt?

Wolfgang H. schrieb:
> Hi... Warum nicht so ansprechen wie man es richtig macht...
> https://docs.microsoft.com/en-us/uwp/api/Windows.D...
> ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bentschie schrieb:
> Dann halt umgedreht. Das Gerät sendet ständig einen String an den PC zur
> Identifikation.
> Ich lausche also auf allen COM Ports, ob des richtige kommt.

Das ist immer noch Pfusch. Vor allem kann das lustige Effekte haben; der 
Plug&Play-Mechanismus von Windows ist immer noch dafür ausgelegt, 
serielle Mäuse zu erkennen. Und dann ist a) die serielle Schnittstelle 
für den Maustreiber blockiert und b) Dein Mauszeiger macht potentiell 
sehr interessante Dinge.


Nein; der saubere Weg ist es, einen sinnvollen 
Geräteidentifikationsstring im USB-Devicedescriptor unterzubringen, dann 
nämlich kann nach USB-Geräten mit diesem String gesucht werden. VID & 
PID lässt man natürlich, wie sie sind, damit der richtige Devicetreiber 
verwendet wird.

von fchk (Gast)


Lesenswert?

markus c. schrieb:
> Der Baustein MCP2221 kann CDC und HID
> So wie ich das verstanden habe, benötigen ich aber ein Mass Storage
> Device, wenn ich Daten per Drag and Drop hin und her kopieren möchte.

Ja, kann man so machen. Bedeutet einiges an Hardwareaufwand und an 
Kosten.

Wenn Du aber akzeptierst, dass Du eine eigene Applikation hast, die das 
Drag&Drop macht (d.h. auf die Du Dateien im Explorer fallen lassen 
kannst) und die dann über den MCP2221A (die Version ohne A ist veraltet) 
mit Deiner Hardware spricht, dann kommst Du mit viel weniger Hardware 
aus. Statt 50€ pro Gerät an Hardware werden es dann nur maximal 10€. 
(ganz grob geschätzt, wirklich nur pi mal Daumen, nagelt mich darauf 
jetzt bloß nicht fest).

In einem Fall musst Du die Firmware für den zusätzlichen Mikrocontroller 
entwickeln, im anderen Fall eine Windows-Applikation. Kommt in etwa aufs 
gleiche raus.

fchk

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.