Auf USB.org sind verschiedene Dokumente erhältlich. Beinhaltet die "USB
3.2 Specification" auch die "USB 2.0 Specification". Die 2.0 ist
immerhin von 2000.
Daher frage ich mich, welche ich zum einlesen verwenden soll?
Sofern du nicht explizit USB 3.0 brauchst, lies die USB 2.0
Spezifikation. Die ist immer noch gültig, und die meisten
USB-Peripherien in Mikrocontrollern unterstützten USB 2.0.
Jens schrieb:> Daher frage ich mich, welche ich zum einlesen verwenden soll?
Sammle, was du kriegen kannst. Es gibt da nicht nur ein paper, sondern
einen ganzen Sack davon - und jedes baut im Grunde auf einem anderen
auf. Aber normalerweise wollen die für's Papier richtig Geld haben.
W.S.
...und wenn du etwas lesen willst, wo du noch eine Chance hast, es
nachzuvollziehen, dann fang mit USB1.1 an. Ja, das ist uralt. Aber um
die Grundlagen nachzuvollziehen, reicht es - und du hast viel, viel,
viel weniger textuelle kreuz-und-quer-Verweise im Dokument (nach dem
Motto "this behaviour depends on the status of ABC and DEF, oft ohne
Links)
Zumindest war das 2002 so, als ich mal damit gearbeitet habe...
MfG, Arno
Niklas G. schrieb:> Und meinen supertollen Artikel
Ähemm..
"Anwendungen können anhand VID/PID direkt das korrekte Gerät finden, es
muss nicht wie bei der seriellen Schnittstelle der richtige Port
ausgewählt werden"
Das ist eine kühne Behauptung, die ich so nicht bestätigen kann. Bei
USB-Geräten, die ein VCP darstellen, hat man in der Regel keine andere
Chance, als der Reihe nach alle Ports von COM1..COMxyz durchzutesten, ob
dieser Stream sich öffnen läßt oder nicht. Und wenn er sich öffnen läßt,
dann ist noch immer nicht gesagt, daß es das richtige Gerät ist.
Also schreib mal, wie man es macht, daß man den richtigen COM-Port aus
vorgegebener vid&pid herausfindet.
W.S.
W.S. schrieb:> Das ist eine kühne Behauptung, die ich so nicht bestätigen kann. Bei> USB-Geräten, die ein VCP darstellen, hat man in der Regel keine andere> Chance, als der Reihe nach alle Ports von COM1..COMxyz durchzutesten, ob> dieser Stream sich öffnen läßt oder nicht.
Ganz genau. Wenn man daher eben keinen VCP implementiert sondern ein
"normales" USB-Gerät, auf welches man per Kernel-Treiber, libusb
und/oder WinUSB zugreift, kann man darüber via VID&PID das Gerät finden.
Ein Beispiel:
https://github.com/Erlkoenig90/usbclient/blob/master/src/main.cc#L101
Wenn man einen VCP implementiert, hat man aus Anwendungssicht einen
Serial-Port mit genau den beschriebenen Nachteilen des Serial-Ports. Mit
"Vorteile USB" ist natürlich nicht gemeint, dass man wieder auf Serial
umadapterisiert (VCP)! Ein VCP vereint gewissermaßen die Nachteile von
USB und Serial-Port, diesen Fall sollte man also nicht als Grundlage für
die Suche nach USB-Vorteilen nehmen.
W.S. schrieb:> Also schreib mal, wie man es macht, daß man den richtigen COM-Port aus> vorgegebener vid&pid herausfindet.
Ich würd versuchen die Liste aller angeschlossenen USB-Geräte
durchzugehen und schauen ob das gesuchte Gerät
(VID/PID/Seriennummer/Geräteklasse) dabei ist und auf welchen COM-Port
das gerade gemappt ist. Oder vielleicht kann man auch alle COM-Ports
durchgehen und schauen welches Gerät das ist. Geht mit Sicherheit
irgendwie.
W.S. schrieb:> Das ist eine kühne Behauptung, die ich so nicht bestätigen kann. Bei> USB-Geräten, die ein VCP darstellen, hat man in der Regel keine andere> Chance, als der Reihe nach alle Ports von COM1..COMxyz durchzutesten, ob> dieser Stream sich öffnen läßt oder nicht. Und wenn er sich öffnen läßt,> dann ist noch immer nicht gesagt, daß es das richtige Gerät ist.
Richtig, das ist übler Hack, der leider immer noch von vielen als
"Lösung" angesehen wird.
Gerade bei USB-Serialports geht das auch sauber umzusetzen.
W.S. schrieb:> Also schreib mal, wie man es macht, daß man den richtigen COM-Port aus> vorgegebener vid&pid herausfindet.
VID/PID allein reicht nicht, dafür hat man bei der USB-Org ja
glücklicherweise vorgesorgt, und die Seriennummer in den Standard
geschrieben. Wenn der Hersteller bzw. der Implementierer die
eineindeutig programmiert hat, lässt sich jedes Gerät zuordnen. Dann
muss man "nur" noch in der Registry schauen, welches USB Gerät momentan
am Rechner steckt und an einer anderen Stelle schauen, welche
VID/PID/SerialNumber Kombi da drauf gemapt ist. Und das geht dann ganz
ohne wildes Öffnen oder gar schon irgendwas auf ein unbekanntes Gerät
schreiben.