2016-10-07 3 views
1

USB Full Speed ​​hat eine Geschwindigkeit von 12 MBit/Sekunde = 1,5 MByte/s.Wie hoch ist der effektive maximale Payload-Durchsatz für USB in voller Geschwindigkeit?

Aber innerhalb dieser 12 MBit wird auch eine Menge zusätzlicher Daten übertragen, die nicht Nutzlast, wie Token, Endpunktadresse, CRC5, CRC16, Acknowledge, SOF + EOF-Pakete, etc .. Zusätzlich behält der Busmanager 10% von ein Frame für Control Transfers.

Siehe Interrupt Transfer in USB Made Simple Part 3

Wenn ich mit einem Abfrageintervall von 1 ms einen USB-Endpunkt in dem Unterbrechungsmodus habe, dann kann ich 64 Bytes pro Rahmen = 64kByte/Sekunde übertragen.

Aber was ist, wenn ich 2 Endpunkte mit 1 ms Polling habe? Dann wird der Host beide Endpunkte innerhalb von 1 ms abfragen, also habe ich einen Gesamtdurchsatz von 128 kByte/s?

Und wenn der Host gleichzeitig 15 IN-Endpunkte abfragt, würde das 15 * 64 kByte = 960 kByte/s ergeben?

(wir der Einfachheit halber annehmen, dass es keine OUT-Transfers sind)

Erste Frage: Obwohl viele Benutzer ich keine Website reden über die maximale effektive Nutzlast Durchsatz bei voller Geschwindigkeit finden.

Zweite Frage: Volle Geschwindigkeit erlaubt ein Maximum von 64 Byte/Paket und ein minimales Poll-Intervall von 1 ms. Wenn ich über IN-Transfer die maximal mögliche Payload übertragen möchte, sollte ich mehrere Endpunkte verwenden und die Datenübertragung über diese Endpunkte verteilen? Mit wie vielen Endpunkten komme ich ans Limit?

Dritte Frage: Ich sehe, dass in einer Massenübertragung der Host IN Daten häufiger als einmal pro Millisekunde anfordert. Bedeutet das, dass Bulk schneller ist als Interrupt-Übertragung?

Antwort

0

ich eine Teilantwort in der USB-2.0-Spezifikation in Kapitel 5.7.4 und 5.8.4:

Die Protokoll-Overhead ist 13 Bytes für Massenübertragungen: (3 SYNC-Bytes, 3 PID-Bytes, 2 Endpoint + CRC-Bytes, 2 CRC-Bytes und eine 3-Byte-Interpacket-Verzögerung) und 19 Bytes für Interrupt-Übertragungen (5 SYNC-Bytes, 5 PID-Bytes, 2 Endpoint + CRC-Bytes, 2 CRC-Bytes und eine 5-Byte-Interpacket-Verzögerung)

Wenn eine Datennutzlast von 64 Bytes verwendet wird, beträgt die maximale Bandbreite 1.216.000 Bytes/s für Massenübertragungen. Dies bedeutet, dass ein Rahmen von 1 ms 1216 Bytes = 19 Blöcke von 64 Byte übertragen kann.

Interrupt-Endpunkte werden mit einem maximalen Intervall von einmal pro Millisekunde abgefragt, sodass die maximale Nutzlast 64 KB/s oder weniger beträgt.

Aber diese Werte sind Theorie. Das Dokument gibt an, dass Bit Stuffing ignoriert wird. Auch die für Control-Transfers reservierte Bandbreite von 10% wird hier ignoriert. Und für Interrupt-Endpunkte beträgt der maximale Durchsatz 64 Byte pro Millisekunde = 64 kByte/Sekunde.

Ein anderer interessanter Artikel über die Geschwindigkeit in der realen Lebensdauer von verschiedenen Full-Speed-Geräten und verschiedenen Betriebssystemen ist sehr interessant, weil es sich extrem von den theoretischen Werten speziell für Windows unterscheidet.

Paul gemessen eine maximale Geschwindigkeit von 1 Megabyte/Sekunde, aber in Richtung OUT.

http://www.pjrc.com/teensy/benchmark_usb_serial_receive.html

und

https://www.pjrc.com/teensy/usb_serial.html

+0

Interrupt Endpunkte kann nur ein 64-Byte-Paket alle 1 ms senden. Somit beträgt das Limit nach dem Overhead etwa 64 kB/s. –

+0

Sie haben völlig Recht. Wenn repariert meine Antwort. – Elmue

0

Dritte Frage: Ich sehe, dass in einer Massenübertragung der Host IN Daten öfter als einmal pro Millisekunde anfordert. Bedeutet das, dass Bulk schneller ist als Interrupt-Übertragung?

A Los schneller. Sie können ungefähr 1 MByte/s mit einem einzelnen Bulk-Endpunkt erreichen - dies ist auch der maximale Durchsatz, den Sie für USB Full speed erzielen können.

Auf den Punkt gebracht: Wenn Ihre Anwendung Daten so schnell wie möglich übertragen möchte, verwenden Sie Bulk-Endpunkte.

Verwandte Themen