Forum: PC-Programmierung USB Grundsätzliche Frage


von Michael (Gast)


Lesenswert?

Hallo

habe mal eine Anfänger frage zu USB.

Wenn ich unter XP ein USB gerät ansprechen möchte, verstehe ich es 
richtig das ein Herrsteller für sein Gerät einen Treiber zu verfügung 
stellt bzw. es in Windows Standarttreiber gibt die ich ansprechen kann. 
Allerdings müßte ich dann auch eine Dokumentation besitzen.

von Stefan (Gast)


Lesenswert?

Das verstehst du richtig.

Wenn du ein USB Gerät gekauft hast, müsste im Handbuch oder den 
Unterlagen oder nur auf der Packung stehen, wie es unter z.B. Windows XP 
zu installieren und zu betreiben ist. Da kann stehen "Zuerst x von der 
beiliegenden CD ausführen" oder "Funktioniert direkt mit Windows XP"

Wenn du ein USB Gerät selbst per Programm ansprechen möchtest, sieht es 
etwas anders aus.

Entweder stellt der Hersteller dazu technische Unterlagen bereit, oder 
er tut's aus irgendwelchen Gründen nicht.

Bei manchen Geräten ohne Entwicklersupport vom Hersteller kann man sich 
erschliessen, wie sie angebunden sind. Insbesondere wenn Standardtreiber 
von Windows benutzt werden. Dann kann man auch nachsehen, ob Micro$oft 
technische Unterlagen zu den Standardtreibern bereitstellt. Micro$oft 
hat für solche Infos verschiedene Kanäle u.a. Hilfedateien bei den 
Entwicklungswerkzeugen, SDKs, DDKs, Online-Hilfe, das Developer-Network 
MSDN, das MSDN-TV....

von Michael (Gast)


Lesenswert?

Habe mich jetzt ein wenig eingelesen und möchte gleich eine zweite Frage 
hinterher schiessen. Es gibt von FTDI diverse CHips die ich direkt an 
meinen AVR anschliessen kann.

Dann sende ich einfach, wie immer seriell Daten. JEtzt habe ich aber 
gelesen das immer der Host die kommunikation aufnimmt, d.h wenn ich 
etwas Sende woher weiß der Host das ? Oder fragt der einfach so oft ab ( 
Polling ) das ich unter windows den Com eingangs buffer nur auslesen 
muß.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du hast richtig vermutet. Der USB-Host pollt zyklisch alle 
angeschlossenen Geräte. Das geschieht im 1ms-Takt.

von Michael (Gast)


Lesenswert?

Dann werd ich mir wohl einen FTDI besorgen.  Habt ihr nen Tip scheint ja 
jede Menge zu geben .

Es gibt mitlerweile doch Atmel 's  die haben doch auch einen USB 
anschluss. Ist dieser FTDI dann quasi integriert ? Oder ist das ein 
"echter" usb anschluss der nicht als "Com" sondern über Treiber 
angesteuert wird.

von Stefan (Gast)


Lesenswert?

Du meinst diese Controller?
http://www.atmel.com/products/AVR/usb/

Das können als "echte" USB Clients in verschiendenen Modi (HID, Mass 
Storage, ...) betrieben werden und werden dafür nicht über eine 
virtuelle COM angesteuert.

von Michael (Gast)


Lesenswert?

D.h Atmel liefert aber die notwendigen Treiber die ich dann einbinden 
kann um mein USB device ( den Mikrocontroller ) anzusteuern.???

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, das tut Atmel nicht. Warum auch?

Für die Standardgeräteklassen (HID, Audio, Mass Storage Device, 
Communication Device etc.) gehören die Treiber zum Betriebssystem.

Treiber für andere Dinge musst Du sowieso selber schreiben, weil nur Du 
selber weißt, welche Daten auf welche Art und Weise Dein µC von Dir 
erwartet.

von Michael (Gast)


Lesenswert?

Hat den jemmand zufällig eine Seite mit einer Dokumentation der HID ? 
Ich meine Treiber selbst zu schreiben ist ja wohl nicht so leicht !?

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Hallo Michael,

ich habe hier mal einen ps2 zu USB Wandler geschrieben. Im 
Betriebssystem arbeitet immer der Standard HID Treiber. Funktioniert 
unter Linux und Windows.



http://www.ixbat.de/index.php?page_id=98


Gruss Bene

von Andreas (Gast)


Lesenswert?

@Rufus:
>>Du hast richtig vermutet. Der USB-Host pollt zyklisch alle
angeschlossenen Geräte. Das geschieht im 1ms-Takt.


Das ist falsch. Es sind nicht immer 1ms.
Ich empfehle als Lektüre die USB Specs.

von Weinga-Unity (Gast)


Lesenswert?

Hallo!

Richtige Treiber selber schreiben ist nicht so einfach. Es gibt aber den 
Weg mit libusb, die die Standard-USB-Funktionen wieder so aufbereitet, 
dass man sie über eine Bibliothek direkt aufrufen kann (d.h. Lesen 
Endpoint, schreiben Endpoint, Endpoint0 Operationen, Geräte am USB-Bus 
suchen). Hat man am Mikrocontroller die Kommunikation implementiert, 
macht man dann auf der PC-Seite dann ganz einfach das selbe und muss 
nicht über einen eigenen Treiber und die writedevice usw. Funktionen das 
Gerät ansprechen.

libusb funktioniert so, dass ein universaltreiber verwendet wird und die 
standard-USB Funktionen wieder zur Verfügung stellt. Genau dies will ja 
MS mit den Treibern eigentlich verhindern.

VT dieser Variante: WIN32 und LINUX sind auf einen Schlag unter eine 
Haube gebracht.

mfg W.K.

von Jay (Gast)


Lesenswert?

Ahoi,

vielleicht für den geneigten Einsteiger ein paar Links:
http://www.sprut.de/electronic/interfaces/usb/usb.htm
http://de.wikipedia.org/wiki/Usb
Sowie die Specs auf usb.org.

Wenn du mit den Atmel AVRs arbeiten willst, kriegste da nach einer 
Registrierung auch die USB Firmware (mikrocontrollerseitig) als Source 
Code zur Verfügung gestellt. Damit lässt sich zB ne HID-Maus 
implementieren, was für den Anfang ganz sinnvoll ist.

von Stefan (Gast)


Lesenswert?

Jay, hat der Registrierzwang was mit der Erzeugung/Benutzung von 
eindeutigen GUIDs für den jeweiligen (Weiter-)Entwickler zu tun?

von Alexander (Gast)


Lesenswert?

Ich muss für ein Projekt ein USB-MIDI Gerät programmieren. Die 
Descriptoren liest er richtig aus, im Gerätemanager wird es auch als 
Verbund-Audiogerät erkannt. Es kommt sogar die Meldung, dass es 
erfolgreich installiert wurde.

Aber deshalb kann ich trotzdem nicht in einem MIDI-Player zugreifen. In 
der Spezifikation habe ich gelesen, dass ich keine AUDIO und MIDI EP0 
Requests ausprogrammieren muss, was ich auch nicht getan habe.

Könnte das an dem Windowstreiber liegen?

Besten Dank
Alexander

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.