Forum: PC Hard- und Software USB Treiber in Windows


von Sam (Gast)


Lesenswert?

Hallo.
Gleich vorne weg: ich möchte weder etwas bauen, noch entwickeln oder 
programmieren. Meine Frage stützt sich nur auf Intresse und muss daher 
nicht ins Detail beantwortet werden.

Wie der Betreff schon verrät geht es um Treiber im Windows OS (nicht 
Linux!).

An einem Beispiel: Ich habe eine Win Software (sagen wir mal in C++), 
eine Hardware (gehen wir mal von Relais oder LEDs aus, die mit log. +5V 
angesteuert werden). Wie kann ein Win Rechner nun diese Befehle an einen 
µC weitergeben?

Wenn ich mich richtig informiert habe, dann über einen Treiber - oder?

Der Treiber tut nichts anderes als das Ergebnis meiner Software mittels 
Protokoll an meine Hardware zu liefern?

Gehe ich recht mit folgender Annahme (bitte korrigieren, ergänzen oder 
abnicken):
Mein µC sendet durch High- und Low-Pegel Signale über die Datenleiter 
des USB Kabels, der PC bekommt einen Interrupt und weiß durch den 
Treiber diese Signal zu dekodieren und zu speichern. Die Software kann 
auf die Ergebnisse wie auf eine Art TXT-File zugreifen und entsprechend 
der Programmierung verfahren.
Wird vom PC an den µC gesendet, so werden die Werte (LED an / aus) 
codiert übertragen, z. B. 1101 (LED an, LED an, LED aus, LED an - ohne 
Parität). Der µC kann via interrupt das dekodieren und entsprechend 
verfahren.

Bei diesem Ablauf handelt es sich nur um eine Theorie - ich möchte das 
auch nicht nachbauen - nur verstehen will ich das gerne.

Hat jemand ein Beispiel für so einen Treiber?

Danke S.

von Joe (Gast)


Lesenswert?

"Im Prinzip ja", sagt Radio Eriwan.

Aber eine 0 oder eine 1 zu schicken erfordert je nach Treiber und 
Gegenstelle das schicken von Datensätzen mit Adressen in einem 
Übertragungsprotokoll, welches eingehalten werden muss.

Einfacher ist da die alte serielle Schnittstelle.

von Micha (Gast)


Lesenswert?

Hängt vom Device ab. Du hast die Möglichkeit die Kommunikation 
proprietär zu machen oder du baust dir ein HID-Device. Dafür bringt 
Windows schon alle nötigen Funktionen mit. Für Letzteres findest du 
einige Implementierungen unter 
http://www.mikrocontroller.net/articles/USB_HID_Host_Treiber#Alternativen 
und für viele Controller findet man ebenfalls entsprechende Beispiele.

von Micha (Gast)


Lesenswert?

Ergänzung: für ein HID-Device muss die Applikation dennoch wissen, wie 
mit dem Gerät zu kommunizieren ist, sprich wie die Nachrichten zu 
interpretieren sind. Aber ein richtiger Treiber ist nicht nötig, da 
Windows alles dafür mitbringt.

von bluppdidupp (Gast)


Lesenswert?

Die USB-Geräteklassen CDC, HID und WinUSB/libusb dürften da die 
interessantesten sein, dafür liefert Windows (und auch Linux) mehr oder 
weniger direkt Treiber mit sowie Programmierschnittstellen um den 
Treiber von eigener Software aus nutzen zu können.

Bei CDC ("Communications Device Class") erscheint unter Windows eine 
virtuelle serielle Schnittstelle, eine Software kann sich dann einfach 
mit dem COM-Port verbinden um Daten an den µC zu senden.
Neuere Windows-Versionen erfordern das Erstellen einer *.inf-Datei und 
eine digitale Signatur, der Treiber für CDC selbst muss nicht 
geschrieben werden.
Ab Win10 wird die *.inf nach aktuellem Stand wohl nicht mehr nötig sein.

HID ("Human Interface Device") wird u.A. von USB-Tastatur und USB-Mäusen 
benutzt, ist aber auch für andere Dinge als nur Eingabegeräte geeignet.
Treiber haben die üblichen Betriebssysteme dafür schon an Board.
Unter Windows gibt es da diverse Funktionen um eigene Anwendungen mit 
HID-Geräten kommunizieren zu lassen:
https://msdn.microsoft.com/en-us/library/windows/hardware/jj126202(v=vs.85).aspx
...allerdings ist die Geschwindigkeit bei HID relativ begrenzt.

Ansonsten bietet sich noch WinUSB als Alternative zu HID an.
Unter neueren Windows-Versionen ist der Treiber schon an Board und es 
wird auch keine *.inf oder digitale Signatur benötigt, es können dank 
Bulk-Transfers allerdings gegenüber HID höhere Geschwindigkeiten genutzt 
werden.
Hier gibts unter Windows ebenfalls APIs:
https://msdn.microsoft.com/en-us/library/windows/hardware/dn303342(v=vs.85).aspx
...unter Linux und Windows kann hier (oder generell) auch libusb 
verwendet werden.

Chips wie die ft232 bringen eigene native Treiber und 
Programmierschnittstellen mit.

siehe auch:
https://www.mikrocontroller.net/articles/USB#USB-Devices
https://www.mikrocontroller.net/articles/Kommunikation_%C2%B5C_und_PC/Smartphone

von Frank K. (fchk)


Lesenswert?

Sam schrieb:

> Gehe ich recht mit folgender Annahme (bitte korrigieren, ergänzen oder
> abnicken):
> Mein µC sendet durch High- und Low-Pegel Signale über die Datenleiter
> des USB Kabels, der PC bekommt einen Interrupt und weiß durch den
> Treiber diese Signal zu dekodieren und zu speichern. Die Software kann
> auf die Ergebnisse wie auf eine Art TXT-File zugreifen und entsprechend
> der Programmierung verfahren.
> Wird vom PC an den µC gesendet, so werden die Werte (LED an / aus)
> codiert übertragen, z. B. 1101 (LED an, LED an, LED aus, LED an - ohne
> Parität). Der µC kann via interrupt das dekodieren und entsprechend
> verfahren.

Vergiss das mit den Hi- und Low-Leveln und stell Dir das eher wie eine 
Art Netzwerkschnittstelle vor, über die Datenpakete geschickt werden. Im 
Unterschied zu einem normalen Netzwerk kann bei USB nur der Host (PC) 
Daten aktiv schicken oder holen, die Devices sprechen nur, wenn sie 
gefragt werden.

fchk

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.