Gibt es eine Größenbeschränkung für die USB2.0-Datenübertragung?

5222
goldenmean

Können wir mit jeweils nur read () oder write () die Massendatengröße über die USB-Schnittstelle erhöhen? Zum Beispiel möchte ich einen Datenblock von 1024 (1K) Bytes übertragen, und wenn das Gerät Einschränkungen von nur 64 Byte hat, gibt es eine Möglichkeit, die Paketgröße für den Systemaufruf read () und write () über USB zu erhöhen?

Gibt es Einschränkungen hinsichtlich der Größe der Datenübertragung über USB in einer Host-> Geräteumgebung?

4
Wäre diese Frage nicht besser für StackOverflow geeignet? cp.engr vor 7 Jahren 0

3 Antworten auf die Frage

4
Sergey Vlasov

Auf der Ebene des USB-Busses sind die Paketgrößen durch die USB-Spezifikationen  eingeschränkt - Einschränkungen für USB 2.0 sind:

  • für Massentransfers - 512 Bytes für Hochgeschwindigkeitsendpunkte, 8, 16, 32 oder 64 Bytes für Vollgeschwindigkeitsendpunkte (und Bulk-Endpunkte mit niedriger Geschwindigkeit sind überhaupt nicht zulässig);
  • für Interrupt-Übertragungen - bis zu 1024 Bytes für hohe Geschwindigkeit, bis zu 64 Bytes für volle Geschwindigkeit, bis zu 8 Bytes für niedrige Geschwindigkeit;
  • für isochrone Übertragungen - bis zu 1024 Bytes für Hochgeschwindigkeit, bis zu 1023 Bytes für Vollgeschwindigkeit (und Low-Speed ​​ist nicht mehr zulässig).

Einschränkungen für read () und write () können jedoch aufgrund von Pufferung durch Kerneltreiber unterschiedlich sein. Bei Verwendung von usbfs mit aktuellen Linux-Versionen können beispielsweise mit einem Systemaufruf bis zu 16384 Byte übertragen werden.

usbfs beschränkt nun die Übertragungsgröße auf knapp 2 GBiB. Was die zugrunde liegende Kernel-Infrastruktur tatsächlich liefern kann, ist eine andere Frage. goertzenator vor 8 Jahren 0
@goertzenator, diese Antwort bezieht sich auf "Paketgrößen" und nicht auf "Übertragungsgrößen". Kurz gesagt, bei USB bestehen Übertragungen aus mehreren Paketen. Mir ist nicht klar, um was es das OP geht. cp.engr vor 7 Jahren 0
3
Mokubai

Ich bin kein USB-Protokolltechniker, aber dieses Dokument aus der Intel EHCI USB-Spezifikation scheint zu vermuten, dass die größte zulässige USB-Paketgröße 1024 Byte beträgt und der größte Datenblock, der auf einmal übertragen werden kann, 24576 Byte beträgt auf Seite 35:

Es stehen sieben Seitenzeiger zur Verfügung, um den Ausdruck von 8 isochronen Transfers zu unterstützen. Die sieben Zeiger ermöglichen, dass 3 (Transaktionen) * 1024 (maximale Paketgröße) * 8 (Transaktionsdatensätze) (24576 Bytes) mit dieser Datenstruktur verschoben werden

0
Stephen

Nein, ich glaube es hängt von der Clustergröße des Laufwerks ab. Sie können dies durch Formatierung definieren.

the idea that a filesystem formatting choice has any influence over the link capabilities of a USB mass storage device doesn't make any sense to me. the underlying device structure might affect link capabilities, but not the particulars of a filesystem. but i think any limitation is in the USB data protocol (or drivers' interface to it). quack quixote vor 14 Jahren 1