Hallo, viele USB-Geräte implementieren die HID-Klasse, da hierfür keine signierten Treiber in 64-Bit Windows-Versionen notwendig sind. Bei kleineren Datenraten ist das auch ausreichend. Allerdings scheint es "über" HID nichts zu geben, was mit einem 64-Bit Windows ohne Treibersignierung läuft. Also nichts, was generisch ist und eben Bulk-Transfers unterstützt oder mehr als die 64kB schaufeln kann, wie es bei den HID-Interrupt-Transfers maximal möglich ist. Für WinUSB von Microsoft selbst braucht es eine Signierung, es sei denn man hat WinXP SP3 und aufwärts, dann geht es wohl über die WinUSB-Requests. Für EasyUSB gibt's keine Signierung, für libusb32/.net muss ich erst noch schauen, was (L)GPL für "Konsequenzen" nach sich zieht, wann darf man die Sourcen geschlossen halten, etc. Natürlich gibt's diverse kommerzielle Treiberpakete, aber die sind im Prinzip auch wieder an eine Signierung gebunden. Alternativ die altbekannten USB-UART-Brücken, doch die möchte ich aussen vor lassen. Weiss jemand, ob's noch andere Möglichkeiten gibt? Ralf
Für WinUSB brauchst du nicht zwingend eine Signierung. Wenn du gar keine hast, klappt das meines Wissens trotzdem, da keine Dateien ins Systemverzeichnis kopiert werden. Die WInUSB.sys ist ja eh drauf. Du bekommst dann halt das rote UAC Fenster, dass der Treiber nicht signiert ist, kannst ihn aber auf Wunsch trotzdem installieren. Wir nutzen WinUSB auch, haben aber eine Code Signing Signatur von Verisign, die kostet nicht viel, und wenn man die dran pappt, kommt nur noch das blaue UAC Fenster, ob man dem Hersteller vertrauen will, und wenn ja, ob immer. Dann ist Ruhe. WHQL ist nicht erforderlich. Mit Windows 8 kannst du im OS String Descriptor des USB Gerätes gleich WinUSB angeben, dann brauchst du überhaupt gar keine Dateien mehr, nicht mal die Inf.
@Christian: Das hört sich gut an. Ich möchte mich näher mit der USB-Implementierung auf Controllern beschäftigen und arbeite mich gerade entsprechend ein. Darf ich fragen, auf welchen Controller du es implementiert hast? Kannst du evtl. ein WinUSB-Beispiel posten? Ich suche noch die Infos zusammen, wie ein WinUSB-Gerät zu implementieren ist. Anfangen werde ich trotzdem erstmal mit HID, aber ich finde es praktisch von anfang an soviele Infos wie möglich zu haben. Ralf
WinUSB hat rein gar nichts mit dem Controller und dessen Firmware zu tun, WinUSB kann mit allen (außer isochron) USB Geräten kommuzieren, ähnlich der LibUSB. Konkret haben wir den Cypress FX2 und FX3 im Einsatz. Im einfachsten Fall jeweils ein BULK Endpoint für IN und OUT. HID ist schon schön, aber viel zu langsam, USB Test and Measurement Class ist schon besser, aber komplex und schafft nur 24MB/s bei HighSpeed. Geht dafür aber meines Wissens auch als Standard Klasse.
> WinUSB hat rein gar nichts mit dem Controller und dessen Firmware zu > tun, WinUSB kann mit allen (außer isochron) USB Geräten kommuzieren, > ähnlich der LibUSB. Die Frage war wohl etwas ungünstig formuliert, sorry. Das ist mir klar, dass es unabhängig vom Controller ist, es kommt ja drauf an, ob die WinUSB-bzw. die OS-Requests implementiert sind. > Konkret haben wir den Cypress FX2 und FX3 im Einsatz. Im einfachsten Fall > jeweils ein BULK Endpoint für IN und OUT. Okay. Hmmm... ich schau mal auf der Cypress-Seite vorbei, vielleicht find ich da ja ein Beispiel. > HID ist schon schön, aber viel zu langsam, ... Deswegen hatte ich nach einer Alternative gefragt :) > USB Test and Measurement Class ist schon besser, aber komplex und schafft > nur 24MB/s bei HighSpeed. Geht dafür aber meines Wissens auch als Standard > Klasse. Mein Controller kann nur Full-Speed, das fällt also leider raus. Ralf
Ralf schrieb: > es kommt ja drauf an, ob die > WinUSB-bzw. die OS-Requests implementiert sind. Im einfachsten Fall ein BULK OUT Endpoint und ein BULK IN Endpoint. Fertig. Im Descriptor keine der Standard-Device Klassen nehmen, sondern 0xFF für Vendor Class und dann kannst du WinUSB oder LibUSB zum Datentransfer nutzen. Spezielle WinUSB Request gibts da keine.
Zum Einlesen vllt. auch nicht ganz uninteressant: http://www.lvr.com/winusb_article.htm http://www.lvr.com/winusb.htm
@Christian R.: > Im einfachsten Fall ein BULK OUT Endpoint und ein BULK IN Endpoint. > Fertig. Im Descriptor keine der Standard-Device Klassen nehmen, sondern > 0xFF für Vendor Class und dann kannst du WinUSB oder LibUSB zum > Datentransfer nutzen. Das ist klar, aber soweit ich die MS-Doku zu WinUSB verstanden braucht's auch hier ein signiertes INF-File um auf Win 64-Bit arbeiten zu können. > Spezielle WinUSB Request gibts da keine. Ab WinXP SP3 gibt's die Möglichkeit spezielle WinUSB-Requests zu implementieren, so dass keine INF-Datei nötig ist. Das müsste man sich dann eben mal angucken. Ich schau mal nach dem Link zu den Infos. @ bluppdidupp: Ich war schon am Überlegen, mir eins der Bücher von J.Axelson zu kaufen :) Ralf
Ich müsste es auf einem Testrechner mal probieren, aber ich bin ziemlich sicher, dass das inf file nicht zwingend signiert sein muss (ist ja eh nur das CAT File signiert). Die Requests du du meinst sind einfach OS String Descriptoren, gibts die wirklich schon bei XP?. Ich hatte mal diesen Descriptor für WinUSB testweise implementiert, aber Windows 7 hat die ignoriert. Vielleicht war da auch noch ein Bug drin... Edit: Es gibt ab Windows 8 einen extra WinUSB Teil im OS String Descriptor, der dann ohne Inf WinUSB lädt...aber eben erst ab Windows 8.
Da stehts: http://msdn.microsoft.com/en-us/library/windows/hardware/hh450799%28v=vs.85%29.aspx "Before Windows 8, to load Winusb.sys as the function driver, you needed to provide a custom INF." ... "In Windows 8, the in-box Winusb.inf file has been updated to enable Windows to automatically match the INF with a WinUSB device. "
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.