Hallo,
es gibt Geräte mit einem USB Anschluss die aber in Wirklichkeit einen
Virtuellen COM-Port machen wie z.B. mit dem FDTI Chip.
und dann gibt es Geräte die einen echten USB Erkennung haben.
Warum ist das so?
Was ist der unterschied zwischen den echten USB und VUSB bzw virtuel
COM-Port?
Was ist besser?
VG
Nicole
Alle drei sind "echtes" USB.
V-USB implementiert USB notdürftig in Software, mit Bit-Banging (deshalb
kann es nur Low Speed); normalerweise hat man dafür Hardware.
Auf einer höheren Ebene kann man über USB viele verschiedene Protokolle
sprechen. CDC (für COM-Ports) ist nur eines davon, und wird oft benutzt,
weil der Treiber dafür heutzutage schon im Betriebssystem dabei ist. Es
gibt auch andere Protokolle wie UAS (Festplatten, Sticks) und HID
(Mäuse, Tastaturen), und wenn keins passt, kann man sich auch selbst was
ausdenken (und muss dann einen eigenen Treiber schreiben).
Nicole28 schrieb:> es gibt Geräte mit einem USB Anschluss die aber in Wirklichkeit einen> Virtuellen COM-Port machen wie z.B. mit dem FDTI Chip.>> und dann gibt es Geräte die einen echten USB Erkennung haben.>> Warum ist das so?
Weil die meisten µC zwar einen seriellen Port haben (oder sehr leicht in
Software emulieren können), aber nur vergleichweise wenige einen
USB-Anschluss. Das liegt einfach daran, dass USB sehr viel aufwendiger
ist als ein einfacher serieller Anschluss, sowohl was die Hardware
betrifft als auch die Software. Vor allem für kleinere µC ist das ein
Problem.
> Was ist der unterschied zwischen den echten USB und VUSB bzw virtuel> COM-Port?
Da gibt es eigentlich keinen. Auch "echtes" USB benutzt letztlich einen
virtuellen COM-Port, jedenfalls USB-CDC. Es gibt aber auch noch andere
Geräteklassen bei USB, aber die sind eben nicht für den Austausch von
Datenströmen gedacht, sondern zu anderen Zwecken. Aber sie lassen sich
notfalls auch zum Austausch von Datenströmen missbrauchen.
Besonders häufig wird USB-HID missbraucht. Das ist OK, solange die
auszutauschenden Datenmengen gering sind und in die Beschränkungen
passen, die der zugrunde liegende "Interrupt-Transfer" ihnen auferlegt.
Für größere Datenmengen braucht man aber andere Transfertypen, z.B. den
"Bulk-Transfer", den halt auch USB-CDC benutzt. Das Blöde ist halt nur:
Bulk-Transfers sind nicht allen Geräten erlaubt. Sie müssen mindestens
mit Fullspeed (12Mbit/s) kommunizieren können, Lowspeed-Geräte
(1,5MBit/s) dürfen ihn hingegen nicht verwenden. Das sperrt sie leider
auch von der Verwendung von USB-CDC aus, denn dafür sind halt
Bulk-Transfers vorgeschrieben.
Diese Beschränkung ist mehr oder weniger künstlich. Früher(tm) haben
sich die Betriebssysteme nicht darum gekümmert und so war es möglich,
auch mit Lowspeed-Geräten USB-CDC zu implementieren. Aber mit der
massenhaften verfügbarkeit dieser Möglichkeit (durch V-USB) sahen die
Leute, die an USB verdienen wollen, ihre Felle wegschwimmen und übten
über die Standardisierungsorganisation Druck auf die
Betriebssystemanbieter aus, diese künstliche Beschränkung auch praktisch
zu erzwingen.
Microsoft tut das ganz rigeros, solche Geräte funktionieren mit
aktuellen Windows-Versionen einfach nicht. Bei Linux hat man sich einen
anderen Trick einfallen lassen, hier werden die Bulk-Endpoints solcher
Geräte einfach in Interrupt-Endpoints verwandelt. Damit funktionieren
sie zwar wenigstens irgendwie, aber weit langsamer als sie funktionieren
könnten.
c-hater schrieb:> Aber mit der massenhaften verfügbarkeit dieser Möglichkeit (durch V-USB)> sahen die Leute, die an USB verdienen wollen, ihre Felle wegschwimmen> und übten über die Standardisierungsorganisation Druck auf die> Betriebssystemanbieter aus, diese künstliche Beschränkung auch praktisch> zu erzwingen.
Das halte ich für eine an Telly Savalas' Haaren herbeigezerrte
Verschwörungstheorie.
Nicole28 schrieb:> es gibt Geräte mit einem USB Anschluss die aber in Wirklichkeit einen> Virtuellen COM-Port machen wie z.B. mit dem FDTI Chip.>> und dann gibt es Geräte die einen echten USB Erkennung haben.>> Warum ist das so?> Was ist der unterschied zwischen den echten USB und VUSB bzw virtuel> COM-Port?
Von der Hardware aus betrachtet wird ein System das noch einen
zusätzlichen Chip wie den FTDI braucht natürlich größer und teurer.
Softwareimplementierungen wie VUSB sind natürlich etwas "eingeschränkt",
verwendbar brauchen aber nur einen Chip.
Bei MCs mit USB fallen mir spontan keine Nachteile ein.
Nicole28 schrieb:> Was ist besser?
Kommt drauf an ;-) Ich persönlich würde aber einen Controller mit
integriertem USB verwenden.
c-hater schrieb:> Diese Beschränkung ist mehr oder weniger künstlich.
Nein; Low-Speed-Pakete sind acht mal langsamer als Full-Speed-Pakete,
und blockieren deshalb den Bus so lange wie Full-Speed-Pakete mit acht
mal so viel Daten (sogar etwas mehr wegen des Protokoll-Overheads).
Low-Speed-Bulk würde die anderen Geräte am selben Bus größtenteils
lahmlegen.
Clemens L. schrieb:> c-hater schrieb:>> Diese Beschränkung ist mehr oder weniger künstlich.>> Nein; Low-Speed-Pakete sind acht mal langsamer als Full-Speed-Pakete,> und blockieren deshalb den Bus so lange wie Full-Speed-Pakete
Natürlich, da hast du vollkommen Recht.
Nur: Das wäre nicht wirklich ein Problem. Sie belegen den Bus längst
nicht lange genug, als dass die Busfunktionalität insgesamt dadurch
gefährdet wäre. Alles, was lt. Standard zwingend über den Bus muss, kann
über den Bus. Natürlich steht den restlichen Endgeräten weniger
Bandbreite zur Verfügung.
Das ist aber in einem hierarchischen Bussystem wie USB der NORMALFALL.
Deine eigene Ansage zeigt das doch bereits: Wenn man acht
Fullspeed-Geräte an den Bus hängt, ist seine Belastung nämlich ganz
genauso hoch und er muss damit ebenfalls klarkommen (und tut das auch
problemlos).
Schlimmstenfalls (bei saumies implementierten Hostcontrollertreibern)
könnte die Erkennung von potentiellen Problemen für isochrone Transfers
scheitern, d.h.: es könnte u.U. ein Gerät am Bus akzeptiert werden, was
nicht hinreichend schnell bedient werden kann. Das Gerät würde dann
nicht funktionieren.
Der einzige Unterschied zu dem Szenario mit 8 Fullspeed-Geräten wäre
dann: Hier würde das Gerät mit den isochronen Transfers und für die
Busbelegung zu hohen Bandbreiten erst garnicht akzeptiert werden.
Effektiv (für den Anwender) ändert sich dadurch aber rein *garnix*: Der
Endeffekt ist nämlich übereinstimmend: Das Gerät funktioniert nicht.
So sieht das aus. Und wenn der Hostcontrollertreiebr halt nicht saumies
implementiert ist, berechnet er Bulk-Bandbreite auch für LowSpeed
richtig und es entfällt auch noch dieser kleine Unterschied zwischen dem
erlaubten und dem verbotenen Szenario.
Wenn das keine künstliche Limitierung ist, was denn sonst?
Rufus Τ. F. schrieb:> Das halte ich für eine an Telly Savalas' Haaren herbeigezerrte> Verschwörungstheorie.
Hmm. Na klar ist das irgendwie eine Art Verschwörungstheorie, denn für
den eigentlichen Vorgang der Einflussnahme habe ich natürlich keinen
sachlichen Beweis.
Aber: Hast du eine bessere Theorie, die die dargelegten beweisbaren
Fakten (insbesondere unter Berücksichtigung des Zeitfaktors) plausibel
erklärt? Dann würde ich sie gerne lesen.
Oder willst du gar die dargestellten Fakten abstreiten? Dann aber bitte
konkret werden. Alles andere wäre so unseriös wie
Verschwörungstheorien...
Also ich kann mir beim besten Willen nicht vorstellen, dass V-USB irgend
jemanden der an USB verdient nur im entferntesten juckt.
Was hat VUSB überhaupt mit verdienen oder nicht zu tun?
Volker S. schrieb:> Was hat VUSB überhaupt mit verdienen oder nicht zu tun?
Mein Gott, bist du dumm, wenn du dir nichtmal das allein zusammenreimen
kannst.
Wenn ich irgendwas mit V-USB implementieren kann, brauche ich nicht die
teureren Chips mit integrierter USB-Hardware kaufen oder die (relativ)
noch teureren zusätzlichen USB-Chips.
Das kann den Herstellern der genannten Chips natürlich nicht gefallen,
denn hier kommt das "verdienen" in's Spiel: sie würden dadurch einfach
weniger verdienen. Und sie sind nachweislich Mitglieder im (inzwischen
ziemlich elitären) USB-Standardisierungsclub...
c-hater schrieb:> Mein Gott, bist du dumm,
Scheint so :-(
c-hater schrieb:> oder die (relativ) noch teureren zusätzlichen USB-Chips.
Zumindest da muss ich dir zustimmen ;-)
>und dann gibt es Geräte die einen echten USB Erkennung haben.
Was auch immer eine "echte USB Erkennung sein soll" ;-)
>Kommt drauf an ;-) Ich persönlich würde aber einen Controller mit>integriertem USB verwenden.
Kann man machen, viel Spass dabei, den eigenen Treiber für's Windoof zu
schreiben und signieren zu lassen. Außerdem kannst Du Dir dann auch
gleich für ein paar Euro bei der USB.org eine Vendor ID rauslassen ;-)
Die FTDI-Teile haben gegenüber den "echten USB Ports" z.B. von uC
den VOrteil, dass man ein Interface über USB in den PC hat und die
Treiber von FTDI fertig sind und signiert. Dann meckert Windows nicht
wegen fehlender Signierung rum. Hat man dann noch eine Anbindung an eine
einfache "serielle Schnittstelle" (COM-Port) in der PC-Software, dann
mus man sich mit dem USB-Subsystem etc. pp nich rumschlagen, sondern
kann Standard-Code verwenden. Vom FTDI zum uC kann man sich dann
entweder eine FIFO oder eine UART-Schnittstelle wünschen (je nach IC).
Nimmt man den USB-Port eines uC (ASICs man aussen vor) direkt, dann
muss man sich von der USB.org eine Vendor ID ziehen und prinzipiell auch
eine (signierte?) Treiber-Infodatei (INF) fuer Windows organisieren.
Zusätzlich muss man das entsprechende USB-Device-Zeugs implementieren.
Teilweise gibt es das fertig, einige uC-Hersteller haben auch
"Demo"-Code für CDC und andre USB Device-Klassen. Deren PID/VID "sollte"
man aber nicht verwenden. ("Hobbybastler / Privatpersonen" könne das,
Firmen sollten da nicht run ;-) )
Wie ist das eigentlich mit CDC und neueren Windoof Versionen nach Win7?
Braucht man da noch eine .inf Datei oder geht das inzwischen so
problemlos wie HID, bzw wie bei Linux?
Dass Kosten für die Vendor ID anfallen ist klar, aber bei höheren
Stückzahlen müsste das im Vergleich zu den FTDI Preisen doch drin sein.
Bin da aktuell nicht im Bilde. Vor Jahren waren es 2k€ oder so?
Selber habe ich 3 kostenlose Sublizenzen von MCHP. Wenn ich mich richtig
erinnere sollten da aber nicht mehr als je 10k Teile verkauft werden ;-)
Softwarelösungen wie VUSB brauchen ja auch eine VID wenn die "legal"
sein sollen, oder?
Das "entsprechende USB-Zeugs" gabs oder gibt es inzwischen tatsächlich
"fertig". Weiss ich natürlich wieder nur sicher von MCHP aber wird es
vermutlich von den meisten MC Herstellern was geben.
Volker S. schrieb:> Bin da aktuell nicht im Bilde. Vor Jahren waren es 2k€ oder so?
Es waren wohl vor 10 Jahren 2k$. Jetzt scheinen es schon mindestens 5k
zu sein.
René K. schrieb:> http://www.usb.org/developers/vendor> Ich zitiere mal: "If you would like to purchase a vendor ID without> signing the logo license agreement, the administration fee for this> purchase is US$2,000."
c-hater schrieb:> Deine eigene Ansage zeigt das doch bereits: Wenn man acht> Fullspeed-Geräte an den Bus hängt, ist seine Belastung nämlich ganz> genauso hoch und er muss damit ebenfalls klarkommen (und tut das auch> problemlos).
Aber acht solche Low-Speed-Geräte würden nicht funktionieren.
Ein Gerät, das genügend Power hat (und verbraucht), um Bulk-Daten zu
verarbeiten, kann sich auch die Full-Speed-Hardware leisten. Das jemand
auf die Idee kommen würde, so eine leistungsfähige Hardware dazu zu
benutzen, jedes Bit einzeln anzufassen, ist damals niemand gekommen.
Volker S. schrieb:> Wie ist das eigentlich mit CDC und neueren Windoof Versionen nach Win7?
Seit Windows 10(?) geht das auch ohne Extra-.inf.
> Selber habe ich 3 kostenlose Sublizenzen von MCHP.
So etwas bieter praktisch jeder Hersteller von USB-Chips an.
(Und für Open Source gibt es kostenlose IDs von Openmoko oder
pid.codes.)
> Softwarelösungen wie VUSB brauchen ja auch eine VID wenn die "legal"> sein sollen, oder?https://github.com/obdev/v-usb/blob/master/usbdrv/USB-IDs-for-free.txt