Forum: Mikrocontroller und Digitale Elektronik USB Verbindung ohne Treiber für Windows / Apple / Linux


von Matz K. (xt-matz)


Lesenswert?

Hallo zusammen,

Ich suche eine USB Verbindungsmöglichkeiten:
a) ohne dass auf Host Seite etwas installiert werden muss
b) für Windows 7...8, Apple OS X, Linux

Bis jetzt ist m.E. die einzige Lösung, die das erfüllt:
USB-MSD (USB-Stick Funktionalität).
Die Applikation meldet sich brav unter Win7, Win8 und unter Linux als 
USB Stick. Alles wunderbar. Apple OS X Test noch offen.
Eine ständige Datenverbindung über Datei-Austausch zu realisieren ist 
aber etwas - sagen wir - "unbequem".

Virtuelle USB-COM finde ich eigentlich ganz brauchbar und ist leicht 
umzusetzen, benötigt unter Windows aber eine "Gerätetreiberinstallation" 
(via inf/cat-Files).
Unter Windows 8 wird man dann unweigerlich mit dem leidigen Problem der 
notwendigen Treiber-Zertifizierung/Signierung konfrontiert.

Wie sieht das denn mit HID aus? Habe ich noch nicht getestet.
Lässt sich ein HID auf Host Seite auch ohne Treiberinstallation 
verwenden? Ist das dabei vielleicht so schön einfach wie bei einem 
USB-MSD?

Habt ihr andere Ideen? USB Verbindung ohne Treiberinstallation?

Gruß
Matz

von Peter II (Gast)


Lesenswert?

Matz K. schrieb:
> Habt ihr andere Ideen? USB Verbindung ohne Treiberinstallation?

Die Frage ist welche Datenrate du brauchst?

USB-CDC geht auch überall.

von Matz K. (xt-matz)


Lesenswert?

Hi Peter II,

Eine Virtuelle COM via USB-CDC hatte ich bereits getestet.
Verlangt aber auf dem Host leider eine "Gerätetreiberinstallation".
Geht es etwas auch ohne?

von Thomas (Gast)


Lesenswert?

nun generell braucht jedes Gerät unter USB einen Treiber. Für einige 
Geräteklassen sind diese aber im Betriebssystem integriert und werden 
deshalb automatisch geladen.
HID, USB Audio, USB Speicher sind Beispiele dafür. Diese Geräte werden 
deshalb nach dem Einstecken automatisch funktionieren.
Mause ist übrigens eine HID Variante. Solange die Datenrate nicht zu 
groß wird, ist das die beste Variante, da man bei HID Devices direkt im 
Usermode an die Daten kommt.

Thomas

von Rolf M. (rmagnus)


Lesenswert?

Thomas schrieb:
> nun generell braucht jedes Gerät unter USB einen Treiber.

Oder man benutzt libusb.

Peter II schrieb:
> Matz K. schrieb:
>> Habt ihr andere Ideen? USB Verbindung ohne Treiberinstallation?
>
> Die Frage ist welche Datenrate du brauchst?

Für mich wäre die erste Frage, was er denn übertragen will. HID ist z.B. 
für Eingabegeräte da, also würde ich das dann nehmen, wenn das 
angeschlossene Gerät auch ein Eingabegerät ist.

von Timmo H. (masterfx)


Lesenswert?

Hid geht eigentlich überall ohne Treiber, oder musstest du schon mal 
einen Treiber für eine Maus/Tastatur installieren?  Ist halt auf der 
OS-Seite aufwändiger zu programmieren als ein virtueller COM-Port

von Matz K. (xt-matz)


Lesenswert?

Hallo Thomas,

(mann geht das schnell in diesem Forum mit den Antworten).
Danke.
Dann werde ich mich wohl mal mit HID beschäftigen. Hatte in älteren 
Foren jedoch gelesen, dass man auf Host Seite einige Klimmzüge machen 
muss, um dann an die Daten heran zu kommen.

Gruß

von Timmo H. (masterfx)


Lesenswert?

Ich habe mal den CP2110 verwendet, der nutz auch HID aber stellt eine 
gute DLL zum ansprechen bereit (Windows, Mac, Linux)

von Little B. (lil-b)


Lesenswert?

Ethernet wäre noch eine alternative

RNDIS, CDC-ECM, CDC-EEM, CDC-NCM

wobei RNDIS windows-spezifisch ist und auch ein treiber braucht, um das 
endgerät zu identifizieren.

von vloki (Gast)


Lesenswert?

Matz K. schrieb:
> Hatte in älteren
> Foren jedoch gelesen, dass man auf Host Seite einige Klimmzüge machen
> muss, um dann an die Daten heran zu kommen.

Eigentlich nicht ;-)
Ich habe da mal ein Demo-Programm gepostet (noch nicht auf OS X 
getestet)
-> http://picforum.ric323.com/viewtopic.php?f=46&t=103#p745

von Stephan B. (matrixstorm)


Lesenswert?

User defined HID muesste ohne Treiber gehen.
Eine Software die mit deinem Device kommuniziert, brauchst du dann aber 
natuerlich trotzdem.

BootloadHID macht meines Wissens soetwas via HID, damit keine .inf Datei 
benoetigt wird.


MfG

von vloki (Gast)


Lesenswert?

Sorry, kleine Ergänzung

Das ganze basiert auf der HID API von Alan Ott
http://www.signal11.us/oss/hidapi/

von Clemens L. (c_l)


Lesenswert?

In Linux und OS X geht mit libusb praktisch alles.

Microsoft hat einen ähnlichen Treiber (WinUSB), der ab Windows 8 
mitgeliefert wird und bei 7/Vista automatisch über Windows Update 
installiert werden kann. Dazu muss aber die Firmware des USB-Gerätes 
einige spezielle Deskriptoren implementieren: 
https://github.com/pbatard/libwdi/wiki/WCID-Devices

von vloki (Gast)


Lesenswert?

Libusb geht auch unter Windows. (habe ich schon benutzt)

-> http://libusb.info/

"It is portable: Using a single cross-platform API, it provides access 
to USB devices on Linux, OS X, Windows, Android, OpenBSD, etc."

Aber gefragt war ja nach ohne Treiber

von Pandur S. (jetztnicht)


Lesenswert?

HID ist 64 messages pro sekunde oder so. Nicht wirklich der Hammer. 
USB-2-Serial ist glaub auch schon Teil des Betriebsystems. Falls nicht 
wuerd ich Ethernet verwenden.

von vloki (Gast)


Lesenswert?

Jetzt Nicht schrieb:
> HID ist 64 messages pro sekunde oder so.

Blödsinn, 64 Bytes / ms.
Also theoretisch 64000 Bytes/s

von vloki (Gast)


Lesenswert?


von Timmo H. (masterfx)


Lesenswert?

1
The downside to using the HID class is that the typical class drivers support 
2
only one type of endpoint communication—an interrupt—and the bandwidth is 
3
limited to well below the USB's maximum throughput. The bandwidth is limited to 
4
800 bytes/sec/report (8 bytes/msec/I/O report) for low-speed devices, 64,000 
5
bytes/sec/report (64 bytes/msec/I/O report) for full-speed devices, and 
6
approximately 23.4 Mbytes/sec/report (3072 bytes/microframe/I/O report) for 
7
high-speed devices. An HID may specify multiple reports if more than the 
8
"per-report" bandwidth is necessary.
http://www.edn.com/design/communications-networking/4336292/Using-the-HID-class-eases-the-job-of-writing-USB-device-drivers

von Matz K. (xt-matz)


Lesenswert?

> Ethernet wäre noch eine alternative
Da das Gerät nur einen USB Anschluss haben wird, ist in meinem Falle 
Ethernet keine Alternative.

Die Datenrate ist auch kein Thema. Es geht darum, ein paar Steuerdaten 
und Statusdaten auszutauschen. Wenn da sowas wie 19200 kbit/s rumkommt, 
wird das dicke ausreichen.

Ich werde mich wohl mal mit HID beschäftigen müssen und die vielen 
Hinweise aus dem Thread aufarbeiten (wird was dauern, da nicht ständig 
dran). Es gibt da wohl einen low bandwidth data exchange kanal bei HID. 
Ich nehme mal an, dass ich den dann implementieren muss.

Etwas "umständlicherer" Software Aufwand für die Host Software wird in 
Kauf genommen.

Erstmal Danke.

von Informatik-Abs (Gast)


Lesenswert?

Peter II schrieb:
>
> Die Frage ist welche Datenrate du brauchst?
>
> USB-CDC geht auch überall.

Das ist QUATSCH! Ohne Treiber-"Simulation" geht garnichts, da die 
RX/TX-Datenleitung erst über den USB-Host "freigegeben" wird! also wenn 
schon antwortest, informier Dich vorab, bevor solchen Blödsinn hier 
ablässt! Und mit Datenrate hat das ganze auch absolut NICHTS zu tun, 
Mister "Profi"!

Solchen Blödsinn zu lesen - sowas tut echt weh... sorry

von Peter II (Gast)


Lesenswert?

Informatik-Abs schrieb:
> Das ist QUATSCH! Ohne Treiber-"Simulation" geht garnichts, da die
> RX/TX-Datenleitung erst über den USB-Host "freigegeben" wird! also wenn
> schon antwortest, informier Dich vorab, bevor solchen Blödsinn hier
> ablässt! Und mit Datenrate hat das ganze auch absolut NICHTS zu tun,
> Mister "Profi"!
>
dann hast du die Antwort nur nicht verstanden!

Für USB-CDC liefern alle(?) Betriebssystem die Treiber schon mit, es 
müssen also Manuell keine Treiber installiert werden.

Und das ist was er wollte.

> Solchen Blödsinn zu lesen - sowas tut echt weh... sorry
kann man auch freundlich sagen, wenn man sich nicht sicher ist wie die 
Antwort gemeint ist.

von Informatik-Abs (Gast)


Lesenswert?

Peter II schrieb:
> Informatik-Abs schrieb:
>> Das ist QUATSCH! Ohne Treiber-"Simulation" geht garnichts, da die
>> RX/TX-Datenleitung erst über den USB-Host "freigegeben" wird! also wenn
>> schon antwortest, informier Dich vorab, bevor solchen Blödsinn hier
>> ablässt! Und mit Datenrate hat das ganze auch absolut NICHTS zu tun,
>> Mister "Profi"!
>>
> dann hast du die Antwort nur nicht verstanden!
>
> Für USB-CDC liefern alle(?) Betriebssystem die Treiber schon mit, es
> müssen also Manuell keine Treiber installiert werden.
>
> Und das ist was er wollte.
>
>> Solchen Blödsinn zu lesen - sowas tut echt weh... sorry
> kann man auch freundlich sagen, wenn man sich nicht sicher ist wie die
> Antwort gemeint ist.

genau: Du sagst es: Lesen müßte man können.... und wenn ich irgendwas 
falsch verstanden hab - dann deine Bemerkungen zuvor oder wie versteh 
ich das jetzt?! Er oben wollte eine Lösung, OHNE irgendwelche Treiber! 
Und DU hast drauf geantwortet, dass sowas immer ginge! Wenn schon 
versuchst, zu antworten, dann kuck richtig hin, WAS du getippelt hast 
hast, worauf ich Bezug nahm! also: richtig lesen muss nicht ich, sondern 
DU!

und ob ich friedlich bin, das geht erstens niemanden was an, zweitens 
versuch bitte nicht, hier irgendjemandem klar zu machen, du seist hier 
der Boss und müsstest andre dir unbekannte Personen belehren was höflich 
sein betrifft. Nase fassen, Kumpel und still halten, dann bleiben wir 
das auch! denk mal drüber nach!

von Matz K. (xt-matz)


Lesenswert?

Hallo Peter II

Peter II schrieb:
> Für USB-CDC liefern alle(?) Betriebssystem die Treiber schon mit, es
> müssen also Manuell keine Treiber installiert werden.

Ja und Nein:

Die eigentliche Treiber Datei für eine virtuelle COM via USB ist zwar 
schon dabei (bei Windows 7 z.B. "usbser.sys").
Aber: wenn ich ein eigenes Gerät anstecke, dann muss hier Windows noch 
klar gemacht werden, dass für genau dieses USB Gerät, was da gerade 
angesteckt wurde, genau der Treiber (usbser.sys) verwendet werden soll.
Das passiert über die *.inf Datei und eine *.cat Datei, die ich dann 
speziell für mein Gerät vorbereiten und mit ausliefern muss.
Diese ist aber nun ja NICHT bei Windows dabei und der Benutzer wird im 
Rahmen der Gerätetreiberinstallation aufgefordert, den Pfad zu dieser 
Datei anzugeben. Genau dieser Schritt soll aber vermieden werden.

Die hilfreichen Forenbeiträge haben mir Hoffnung mit HID gemacht.

von Peter II (Gast)


Lesenswert?

Informatik-Abs schrieb:
> genau: Du sagst es: Lesen müßte man können.... und wenn ich irgendwas
> falsch verstanden hab - dann deine Bemerkungen zuvor oder wie versteh
> ich das jetzt?! Er oben wollte eine Lösung, OHNE irgendwelche Treiber!

ohne einen Treiber geht überhaupt nichts bei USB. Weder CDC noch HID.

von X4U (Gast)


Lesenswert?

Matz K. schrieb:
> Das passiert über die *.inf Datei und eine *.cat Datei, die ich dann
> speziell für mein Gerät vorbereiten und mit ausliefern muss.

FTDI Treiber sind bei Windows dabei. Weder unter Win7 noch unter W8 hab 
ich da je was eingestellt. Nur die COM Port Nummer wechselt halt 
dauernd. Mac und Linux  weiß ich aber nicht.

Wenn du 20 HID Devices hast musst du deine Kiste auch aus dem ganzen 
Gemuse rausfummeln, oder eben einen eigenen installieren.

Alternativ kannst du natürlich ne USB Tastaur emulieren und Tastendrücke 
senden. Das geht immer. Nur wo kommen die dann an?

von Jim M. (turboj)


Lesenswert?

Peter II schrieb:
> ohne einen Treiber geht überhaupt nichts bei USB. Weder CDC noch HID.

Stimmt. Aber bei MSD und HID kommt Windoof von alleine auf die Idee, 
einen generischen Treiber zu laden der das Device benutzbar macht.

Bei CDC geht nix ohne INF Datei, und Win 8 will auch eine Signatur dafür 
sehen.

Dafür könnte man bei Win8+ den WinUSB Treiber via WCID laden, das 
braucht aber für Win7 und älter dann einen Treiber.

von vloki (Gast)


Lesenswert?

Matz K. schrieb:
> Hallo zusammen,
>
> Ich suche eine USB Verbindungsmöglichkeiten:
> a) ohne dass auf Host Seite etwas installiert werden muss
> b) für Windows 7...8, Apple OS X, Linux

Nur nochmal zur Erinnerung ;-)
(Dass ein Treiber gebraucht wird ist klar, nur sollte der eben schon 
automatisch da sein)

von Clemens L. (c_l)


Lesenswert?

Jim Meba schrieb:
> Bei CDC geht nix ohne INF Datei, und Win 8 will auch eine Signatur dafür
> sehen.

Eine Alternative zu CDC, aber mit vollautomatischer Treiberinstallation, 
wäre MIDI. Allerdings ist der Aufwand, alle Daten in MIDI-Befehle zu 
verpacken, auch nicht geringer als mit HID.

von vloki (Gast)


Lesenswert?

Ich sehe da bei HID irgendwie gar keinen nennenswerten Aufwand im 
Vergleich zu CDC ...

von Christian R. (supachris)


Lesenswert?

Clemens L. schrieb:
> Microsoft hat einen ähnlichen Treiber (WinUSB), der ab Windows 8
> mitgeliefert wird und bei 7/Vista automatisch über Windows Update
> installiert werden kann. Dazu muss aber die Firmware des USB-Gerätes
> einige spezielle Deskriptoren implementieren:

WinUSB wird seit XP SP2 ausgeliefert. Aber diese automatische 
Installation mit den String Descriptoren geht erst ab Windows 7. Wir 
nutzen für unsere Hardware auch WinUSB, klappt bestens, sogar völlig 
transparent mit USB 3.

von vloki (Gast)


Lesenswert?

Christian R. schrieb:
> Wir
> nutzen für unsere Hardware auch WinUSB, klappt bestens, ...

Auch auf Linux und MAC ?

von Matz K. (xt-matz)


Lesenswert?

Da gibts widersprüchliche Antworten:

Rolf Magnus schreibt:
> generell braucht jedes Gerät unter USB einen Treiber.
> Oder man benutzt libusb.
Hört sich so an, als brauche man für libusb keinen Treiber.

vloki (Gast) schreibt:
> Libusb geht auch unter Windows...
> Aber gefragt war ja nach 'ohne Treiber'.
Das hört sich wiederrum so an, als brauche man für libusb eben doch auch 
noch einen Treiber.

Vielleicht muss man das nochmal präzisieren:
1) Gefordert ist nicht 'ohne Treiber' sondern 'ohne Treiberinstallation' 
(irgendein Treiber wird immer drunter liegen). Die Host Applikation soll 
alles mitbringen, was nötig ist.
2) Lösung für Windows (7,8,ff)  OSX  Linux.

libusb scheint da interessant zu sein.

Aber auch der Hinweis von Timmo H.:
> habe mal den CP2110 verwendet, der nutz auch HID
> stellt eine gute DLL zum ansprechen bereit (Windows, Mac, Linux)
wie libusb: bietet cross-plattform-API-Library.
Aber den Chip will ich nicht zusätzlich einsetzen, wo USB schon auf der 
MCU drauf sein wird (Cortex-M3).

von Clemens L. (c_l)


Lesenswert?

Christian R. schrieb:
> WinUSB wird seit XP SP2 ausgeliefert. Aber diese automatische
> Installation mit den String Descriptoren geht erst ab Windows 7.

Wirklich automatisch? Laut Microsoft geht das erst ab Windows 8:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff540283.aspx

vloki schrieb:
>> Wir nutzen für unsere Hardware auch WinUSB, klappt bestens, ...
>
> Auch auf Linux und MAC ?

Auf Linux und Mac gibt es WinUSB nicht, aber dort kann man sowieso mit 
libusb auf alles zugreifen.

von Christian R. (supachris)


Lesenswert?

Matz K. schrieb:
> Das hört sich wiederrum so an, als brauche man für libusb eben doch auch
> noch einen Treiber.

LibUSB (-win32) ist der Treiber, und der muss installiert werden. 
Unter Windows normal mit inf, cat usw. und unter Linux müssen halt 
irgendwelche udev Regeln oder sowas gebaut werden.

Komplett ohne Treiberinstallation geht nur mit den Standard-Klassen wie 
HID, MSD usw.

Clemens L. schrieb:
> Wirklich automatisch? Laut Microsoft geht das erst ab Windows 8:

Hm, da steht Windows 8, stimmt. Irgendwo anders stand mal dass es in 
Windows 7 mit irgendeinem Update nachgerüstet wurde, finde das aber auf 
die Schnelle auch nicht mehr. Ich hatte es nie getestet, weil wir ja 
einen eigenen Gerätenamen haben wollen und außerdem der Cypress FX3 
damals diese hohen Indizes für die String Descriptoren nicht konnte.

von Volker S. (vloki)


Lesenswert?

Christian R. schrieb:
> LibUSB (-win32) ist der Treiber

LibUSB-win32 ist tot -> http://sourceforge.net/p/libusb-win32/wiki/Home/
>libusb-win32 is now in Bug-Fix-Only maintenance mode. It is recommended
>new project should migrate to libusb-1.0 API and use libusb Windows 
>(http://libusb.info) instead.


Anscheinend gab es mal Unstimmigkeiten im LibUSB Entwicklerteam und es 
hat sich aufgespalten in "einen" und "die anderen" ;-)
Die Anderen haben dann eine Fork namens LIBUSB-X gegründet, mit der auch 
die Erweiterung für Win implementiert wurde.

Irgendwann ging es dann wieder zusammen und heißt jetzt wieder nur 
LIBUSB.
Ob "der Eine" jetzt noch dabei ist, ist mir aber nicht ganz klar 
geworden ...

: Bearbeitet durch User
von Christian R. (supachris)


Lesenswert?

Ein Durcheinander da bei denen. Hoffentlich haben die mal den Bug 
behoben, dsass bei vielen asynchronen BULK Anfragen sporadisch Anfragen 
in der falschen Reihenfolge zurück kamen. Mit dem selben Problem hatte 
damals auch der Cyusb Treiber zu kämpfen, WinUSB hatte das nie. Deswegen 
sind wir damals schnell auf WinUSB umgestiegen und bis heute dabei 
geblieben.

von Gerd E. (robberknight)


Lesenswert?

Zu Linux:

normalerweise hast Du als User keine Rechte auf unbekannte USB-Geräte 
zuzugreifen. Die meisten Distros erlauben einer bestimmten 
Benutzergruppe (z.B. "plugdev" bei Fedora) auf wenige gängige 
Geräteklassen zuzugreifen (z.B. serielle Schnittstellen wie CDC oder 
FTDI und ähnliche Seriellkonverter).

Ein Zugriff, z.B. per libusb, auf sonstige HID-Geräte ist normalerweise 
nur für root erlaubt.

Du wirst also keinen Treiber installieren müssen, dafür aber Dein 
Programm entweder als root laufen lassen (schlechte Idee), oder aber 
udev-Regeln mitliefern, die dann dem normalen Benutzer Zugriffsrechte 
verschaffen.

Diese udev-Regeln müssen dann halt irgendwie installiert werden. Wobei 
die meisten Linux-User wissen dürften was man damit machen muss.

von vloki (Gast)


Lesenswert?

Hmmm, ja stimmt.
Alan Ott's hidapi bringt sogar eine Beispiel-Datei (99-hid.rules) mit:
1
# This is a sample udev file for HIDAPI devices which changes the permissions
2
# to 0666 (world readable/writable) for a specified device on Linux systems.
3
4
5
# If you are using the libusb implementation of hidapi (hid-libusb.c), then
6
# use something like the following line, substituting the VID and PID with
7
# those of your device.
8
9
# HIDAPI/libusb
10
SUBSYSTEM=="usb", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="003f", MODE="0666"
11
12
13
# If you are using the hidraw implementation, then do something like the
14
# following, substituting the VID and PID with your device. Busnum 1 is USB.
15
16
# HIDAPI/hidraw
17
KERNEL=="hidraw*", ATTRS{busnum}=="1", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="003f", MODE="0666"
18
19
# Once done, optionally rename this file for your device, and drop it into
20
# /etc/udev/rules.d and unplug and re-plug your device. This is all that is
21
# necessary to see the new permissions. Udev does not have to be restarted.
22
23
# If you think permissions of 0666 are too loose, then see:
24
# http://reactivated.net/writing_udev_rules.html for more information on finer
25
# grained permission setting. For example, it might be sufficient to just
26
# set the group or user owner for specific devices (for example the plugdev
27
# group on some systems).

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.