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
Matz K. schrieb: > Habt ihr andere Ideen? USB Verbindung ohne Treiberinstallation? Die Frage ist welche Datenrate du brauchst? USB-CDC geht auch überall.
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?
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
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.
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
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ß
Ich habe mal den CP2110 verwendet, der nutz auch HID aber stellt eine gute DLL zum ansprechen bereit (Windows, Mac, Linux)
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.
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
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
Sorry, kleine Ergänzung Das ganze basiert auf der HID API von Alan Ott http://www.signal11.us/oss/hidapi/
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
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
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.
Jetzt Nicht schrieb: > HID ist 64 messages pro sekunde oder so. Blödsinn, 64 Bytes / ms. Also theoretisch 64000 Bytes/s
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
> 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.
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
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.
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!
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.
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.
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?
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.
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)
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.
Ich sehe da bei HID irgendwie gar keinen nennenswerten Aufwand im Vergleich zu CDC ...
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.
Christian R. schrieb: > Wir > nutzen für unsere Hardware auch WinUSB, klappt bestens, ... Auch auf Linux und MAC ?
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).
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.
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.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.