Forum: PC Hard- und Software USB Datenübertragung Funktionsweise


von F. R. (freiling)


Lesenswert?

Hallo zusammen,
ich hoffe es kann mir hier jemand meine Fragen zum Thema USB 
Datenübertragung beantworten. Bin grad dabei, mich etwas in das Thema 
USB einzuarbeiten.

Habe ich das soweit richtig verstanden, dass bei FS-Mode jeder Endpoint 
nur ein Paket pro Frame verarbeiten kann? Bzw. bei HS-Mode pro 
microFrame bis zu 3 Pakete? Allerdings nur bei Interrupt und 
Isochron-Übertragung. Im Bulk-Transfer ist auch nur ein Paket je 
microframe möglich. Im Bulk-Modus sind dann ja 512 byte/paket * 8 
pakete/ms * 1000 = 4MB/s möglich? Wie kann dann ein Gerät wie ein 
USB-Stick oder so eine höhere Datenrate erreichen? Besitzt dieses dann 
mehrere Endpoints, oder wie funktioniert das? Oder wird einfach ein 
anderer Modus verwendet, für Isochron bzw. Interrupt ergibt sich nach 
meinen Berechnungen ja max. 24 MB/s pro Endpoint.
Wäre super, wenn mir jemand hierbei weiterhelfen könnte.
Vielen Dank

von Potter68 (Gast)


Lesenswert?

Hallo F. Reiling,

es ist verzwickt.

Für Bulk-Transfers im Full-Speed Mode gilt:

- maximal 1000 Frames/s
- maximal 72 x 8 Bytes pro Frame

-> 1000 x 72 x 8 = 576.000 Bytes/s

Für Bulk-Transfers im High-Speed Mode gilt:

- maximal 8000 uFrames/s
- maximal 14 x 512 Bytes pro uFrame

-> 8000 x 14 x 512 = 57.344.000 Bytes/s

Gruß Potter

von F. R. (freiling)


Lesenswert?

Potter68 schrieb:
> - maximal 72 x 8 Bytes pro Frame

Potter68 schrieb:
> - maximal 14 x 512 Bytes pro uFrame

Das versteh ich leider nicht ganz. Gilt diese Angabe jetzt pro Endpoint 
oder für den gesamten Bus? Oder wie kommst du auf diese Werte?

Wenn ich mir nämlich die USB-Spec anschaue, dann steht dort, dass jeder 
Endpoint pro (u)Frame ein Paket senden/empfangen kann. Bei FS ist die 
max. Framegröße im Bulk-Modus 64byte, im HS-Mode 512Byte.

Für FS-Mode: Wie kommst du dann auf 72 * 8?
Und wieso sind im HS-Mode 14 Pakete pro uFrame möglich? Oder meintest du 
das bezogen auf den gesamten Bus?

mfg

von Potter68 (Gast)


Lesenswert?

Schau mal in der 2.0 Spezifikation unter

5.8.4 Bulk Transfer Bus Access Constraints

Gruß Potter

von F. R. (freiling)


Lesenswert?

Ok, jetzt hab ich gefunden, woher du diese Zahlen hast. Allerdings 
beziehen sich diese Werte auf die maximale Buskapazität. Allerdings ist 
meine Frage: Kann auch ein einzelner Endpoint diese Übertragungsrate 
erreichen? Also 72 Pakete je 8Byte bzw. 14Paket je 512Byte pro 
Frame/uFrame übertragen.

Aus USB2.0 Spec:
Host Controllers are free to determine how the individual bus 
transactions for specific bulk transfers are
moved over the bus within and across (micro)frames. An endpoint could 
see all bus transactions for a bulk
transfer within the same (micro)frame or spread across several 
(micro)frames. A Host Controller, for
various implementation reasons, may not be able to provide the above 
maximum number of transactions per
(micro)frame.

Bedeutet dies also, dass ein einzelner Endpoint auch mehr als 1 Paket 
pro (u)Frame übertragen kann, denn für mich geht das daraus nicht so 
ganz klar hervor. Dagegen spricht für mich nämlich:

USB supports individual high-speed interrupt or isochronous endpoints 
that require data rates up to
192 Mb/s (i.e., 3072 data bytes per microframe). One, two, or three 
high-speed transactions are allowed in
a single microframe to support high-bandwidth endpoints.

Kurz gefasst: Ich möchte gerne wissen, welche Datenrate ein einzelner 
Endpoint erreichen kann, bzw. ob ein Endpoint pro (u)Frame auch mehrere 
Datenpakete senden/empfangen kann?

mfg

von Karl (Gast)


Lesenswert?

Potter68 schrieb:
> Für Bulk-Transfers im Full-Speed Mode gilt:
>
> - maximal 1000 Frames/s
> - maximal 72 x 8 Bytes pro Frame
>
> -> 1000 x 72 x 8 = 576.000 Bytes/s

Sorry, aber das ist doch Quatsch. Habe selbst schon 800 - 900 kiB/s über 
einen FS-Bulk Endpoint gejagt

von NocheinGast (Gast)


Lesenswert?

>Sorry, aber das ist doch Quatsch. Habe selbst schon 800 - 900 kiB/s über
>einen FS-Bulk Endpoint gejagt

Bist du dir da sicher? Potter68 schreibt das es möglich ist bis zu 
72*8Bytes Bulk Transfers über USB FS in einen Frame zu übertragen. Du 
hast wahrscheinlich eine Endpoint Grösse von 64 Bytes verwendet.

von Potter68 (Gast)


Lesenswert?

@Karl: stimmt - da habe ich den Text falsch interpretiert.

@F.Reiling: an anderer Stelle wird immer der theoretische Richtwert von 
19 Transfers x 64 Bytes pro Frame herangezogen (vgl. auch Tabelle 
USB2.0, 5.8.4), was dann theoretisch zu einer maximalen Rate von 1,216 
MByte/s führt. Praktisch liegen die Werte aber eher im Bereich von 
600-800 kByte/s

Allerdings würde mich auch interessieren, wie die Tabellenwerte zustande 
kommen und wie man sie exakt interpretiert?

von Mars (Gast)


Lesenswert?

Die maximalen Werte kann man auch ein Endpoint erreichen.
So habe ich mit dem At90USB127 mit einem Endpoint knapp 1MB/s Linkspeed 
erreicht.
Mit dem LPC31xx erreiche ich mit einem Endpoint ca. 42 MB/s. Hier dürfte 
allerdings der Host-Controller limitieren. Mit anderen HS fähigen 
Host-Controllern wie dem FX2 habe ich auch ungefähr diese ~40MB/s 
erhalten.

von Mars (Gast)


Lesenswert?

Btw.: Die maximale Transferrate im HS-Modus hängt auch sehr stark vom 
verwendeten Host-Controller ab. Mit den Intel Host-Controllern erreicht 
man ~40MB/s. Soweit ich informiert bin, kann der Intel EHCI 
Host-Controller nur max. 10 statt 14 Bulk-Pakete pro µFrame schedulen.
Mit Host-Controllern von SIS und VIA habe ich teilweise nur bis zu 
25MB/s erreichen können.

von F. R. (freiling)


Lesenswert?

Vielen Dank für die Infos.

Mars schrieb:
> Soweit ich informiert bin, kann der Intel EHCI
> Host-Controller nur max. 10 statt 14 Bulk-Pakete pro µFrame schedulen.

Daraus schließe ich, dass der Host entscheiden kann, ob er mehrere 
Bulk-Transfers pro uFrame oder Frame durchführt, in Abhängigkeit von der 
freien Kapazität. Dies ist dann anders als bei Interrupt bzw. Isochron, 
wo von den Specs maximal 1 Paket pro Frame bzw. 3 pro uFrame übertragen 
werden können.
Ich war anfänglich nämlich etwas verwirrt, da oftmals zu lesen ist: für 
FS-Mode: 1Paket pro Frame und HS-Mode: 3 Paket pro uFrame. Dagegen 
sprach allerdings, dass es ja auch schnellere USB-Transfers gibt, da 
hatte ich über legt, ob dann die Daten auf mehrere Endpoints verteilt 
werden.

Aber mit der Aussage: Die maximale Anzahl von Bulk-Transfers pro 
Frame/uFrame ist nicht vom USB-Spec limitiert (ausser durch Bandbreite), 
sondern kann vom Hostcontroller angepasst werden.

Vielen Dank und mfg

von Mars (Gast)


Lesenswert?

>Daraus schließe ich, dass der Host entscheiden kann, ob er mehrere
>Bulk-Transfers pro uFrame oder Frame durchführt, in Abhängigkeit von der
>freien Kapazität.

Das ist richtig.
Ließ dir einmal die EHCI Specification durch. In diesem pdf wird 
beschrieben, wie der Host-Controller Transfers abarbeitet. Insbesondere 
Kapitel 4.8 und 4.8.3 wären für dich interessant.

von Mars (Gast)


Lesenswert?

Ich sollte mich mal hier anmelden...

4.8.3 ist zwar auch interessant aber eigentlich meinte ich 4.8.4

von F. R. (freiling)


Lesenswert?

Ich habe jetzt nochmals weiterrecherchiert und dabei festgestellt, dass 
man deutlich zwischen Transfer und Transaktion unterscheiden muss. Nach 
USB-Spec ist nur 1 Transfer pro (u)Frame möglich (im Bulk-Modus), 
allerdings kann ein Transfer mehrere Transaktionen (enthält Nutzdaten) 
umfassen. Somit lässt sich dann auch die hohe Datenrate leicht erklären.

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.