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
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
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
Schau mal in der 2.0 Spezifikation unter 5.8.4 Bulk Transfer Bus Access Constraints Gruß Potter
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
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
>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.
@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?
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.
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.
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
>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.
Ich sollte mich mal hier anmelden... 4.8.3 ist zwar auch interessant aber eigentlich meinte ich 4.8.4
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.