Forum: Mikrocontroller und Digitale Elektronik Wie USB Treiber für Windows schreiben.


von Martini (Gast)


Lesenswert?

Ich habe ein (billiges) IO Modul gebaut, das ich aktuell über einen µC 
ansteuere. Um es professioneller zu machen möchte ich das Gerät gerne 
über den PC über USB Port anschließen.
Jetzt benötige ich dafür einen USB-Treiber. Wie programmiere ich das? 
Ich suche nur ein "Stichwort" für den Anfang.

Ich möchte es NICHT über einen FTDI Chip lösen, der sich als COM Port 
ausgibt, da so meine Datenrate stark begrenzt ist.

Wie kann ich eine reine USB Datenübertragung realisieren?

Danke für jeden Tipp! :D

von Einer K. (Gast)


Lesenswert?

Martini schrieb:
> Ich suche nur ein "Stichwort" für den Anfang.

Stichwort:
Treiber Zertifizierung durch Microsoft.

Dort findest du auch die grundlegenden Regeln, an du dich halten musst.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hast du denn überhaupt schon einen USB-Controller auf Geräteseite?

Brauchst du unbedingt einen echten Treiber, welcher dann auch von 
mehreren Anwendungen gleichzeitig genutzt werden kann? Das wird dann 
dank Treiber-Zertifizierung auch nicht ganz billig.

Du kannst auch via WinUSB und/oder libusb aus Anwendungen direkt auf das 
Gerät zugreifen; das erspart den Treiber und ist deutlich einfacher.

von Einer K. (Gast)


Lesenswert?

VID/PID beschaffen!
Ohne geht nix, mit Individualtreiber.

Beitrag #5844574 wurde von einem Moderator gelöscht.
von Adam P. (adamap)


Lesenswert?

Martini schrieb:
> da so meine Datenrate stark begrenzt ist.

Dir reichen keine 3 MBaud (für eine IO Modul)?


Arduino Fanboy D. schrieb:
> VID/PID beschaffen!
> Ohne geht nix, mit Individualtreiber.

Würde ich auch sagen.


Oder du nutzt die standard Implementierungen wie CDC oder HID.
Vorausgesetzt dein µC hat USB.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Michl schrieb im Beitrag #5844574:
> Wenn ich solche Geräte installiere erscheint immer dieses Windows
> typische Installationsmenü mit dem Logo der Firma des Endgerätes.

Dann haben die einen eigenen Treiber der per Windows Update 
nachgeliefert wird.

Michl schrieb im Beitrag #5844574:
> Ist so etwas mit WinUSB/libusb umzusetzten?

Teilweise. Wenn du unbedingt diesen Dialog und die automatische 
Erkennung (via Windows Update) haben willst, musst du eine .inf und .cat 
Datei anlegen, signieren (teuer) und bei Microsoft hinterlegen, auch bei 
WinUSB.

Es gibt mehrere Möglichkeiten:
- Signierter (teuer) eigener Treiber. Eigene .inf und .cat Datei, 
signiert (teuer), wird automatisch installiert, ggf. mit Dialog und 
Logo.
- Kein eigener Treiber, stattdessen Zugriff über WinUSB/libusb. Eigene 
.inf und .cat Datei, signiert (teuer), wird automatisch installiert, 
ggf. mit Dialog und Logo.
- Kein eigener Treiber, selbstsignierte eigene .inf+.cat Datei. Es 
erscheint bei XP-7 eine hässliche Meldung dass der Treiber nicht 
vertrauenswürdig ist, ab Win8 Installation nur über abgesicherten Modus 
(kaum zumutbar).
- Kein eigener Treiber, keine eigene .inf+.cat Datei, Gerät hat dann 
keinen Namen und kein Logo. Durch entsprechende USB-Deskriptoren kann 
das Gerät als "WinUSB Device" markiert und damit ab Win8 vollautomatisch 
ohne Nutzer-Interaktion installiert werden - fast so schön wie unter 
Linux. Bis Win7 muss der Nutzer manuell WinUSB den winusb.sys Treiber 
auswählen oder das Zadig-Tool dafür nutzen.

von Martin (Gast)


Lesenswert?

Wenn es für dich selbst ist, kannst dir eine VID/PID aussuchen. Darfst 
es nur eben nicht veröffentlichen. Es besteht natürlich eine geringe 
Chance dass ein von dir gekauftes Gerät eben diese VID/PID hat, dann 
kommt es zu Problemen. Windows Treiber kannst du dir auch lokal 
zertifizieren, nur für deinen PC. Auch hier ist ein verteilen schwierig, 
da jeder diese Schritte wiederholen müsste.
Ein Startpunkt wäre dort:
https://docs.microsoft.com/en-us/previous-versions/dn913145(v=msdn.10)

von Harald (Gast)


Lesenswert?

Martini schrieb:
> Ich möchte es NICHT über einen FTDI Chip lösen, der sich als COM Port
> ausgibt, da so meine Datenrate stark begrenzt ist.

Du kannst mit dem sogenannten "Baudrate Aliasing" arbeiten, dazu kannst 
Du den FTDI vor Auslieferung entsprechend einstellen. Damit sind dann 
sehr hohe Datenraten möglich. Der Benutzer wählt dann z.B. 300 Baud, 
dahinter verbirgt sich aber in Wirklichkeit 3MBaud.
Wenn das nicht reicht wird es speziell

von Jim M. (turboj)


Lesenswert?

Martini schrieb:
> Jetzt benötige ich dafür einen USB-Treiber. Wie programmiere ich das?
> Ich suche nur ein "Stichwort" für den Anfang.

Am Besten gar nicht!

Ab Win10 ist der VCOM (USB CDC) Treiber im OS mit drin, und das Gerät 
bekommt automagisch einen COM Port.

Für Win7 bräuchte man nur ein .inf, Win8 fällt hinten runter (bräuchte 
M$ Signatur auf dem .inf -> WHQL).

VCOM Beispielcode liefer i.d.R. der Hersteller des µC mit.


Wenn man lieber WinUSB benutzen will, sollte man sich WCID 
(https://github.com/pbatard/libwdi/wiki/WCID-Devices) mal anschauen. 
Damit entfällt das Inf.

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.