mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Martini (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
-1 lesenswert
nicht 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.

: Bearbeitet durch User
Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
3 lesenswert
nicht 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.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
VID/PID beschaffen!
Ohne geht nix, mit Individualtreiber.

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

Bewertung
1 lesenswert
nicht 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.

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jim M. (turboj)
Datum:

Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.