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.
"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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.