Есть ли ограничение размера блока передачи данных USB2.0?

4983
goldenmean

Можем ли мы увеличивать объем данных через интерфейс USB с помощью одного read () или write () за раз? Например, я хочу передать порцию данных размером 1024 (1 КБ), и если устройство имеет ограничения только в 64 байта, можно ли как-нибудь увеличить размер пакета для системных вызовов read () и write () через USB?

Есть ли какие-либо ограничения по размеру передачи данных по USB в среде хост-устройства?

4
Wouldn't this question have been better suited to StackOverflow? cp.engr 7 лет назад 0

3 ответа на вопрос

4
Sergey Vlasov

На уровне шины USB размеры пакетов ограничены спецификациями USB  - ограничения для USB 2.0:

  • для групповой передачи - 512 байт для высокоскоростных конечных точек, 8, 16, 32 или 64 байта для высокоскоростных конечных точек (а низкоскоростные объемные конечные точки вообще не допускаются);
  • для передачи прерываний - до 1024 байтов для высокоскоростной, до 64 байтов для полной скорости, до 8 байтов для низкой скорости;
  • для изохронных передач - до 1024 байтов для высокоскоростных, до 1023 байтов для полноскоростных (и низкоскоростные снова не разрешены).

Однако ограничения для read () и write () могут отличаться из-за буферизации, выполняемой драйверами ядра; например, при использовании usbfs с текущими версиями Linux, до 16384 байтов может быть передано одним системным вызовом.

usbfs теперь ограничивает размер передачи до 2 ГБ. Просто то, что может обеспечить базовая инфраструктура ядра, это другой вопрос. goertzenator 8 лет назад 0
@goertzenator, this answer is referring to `packet` sizes, not `transfer` sizes. Briefly, in USB, transfers consist of multiple packets. It's not clear to me which the OP is asking about. cp.engr 7 лет назад 0
3
Mokubai

Я не инженер по протоколу USB, но этот документ из спецификации Intel EHCI USB, по- видимому, предполагает, что наибольший допустимый размер USB-пакета составляет 1024 байта, а наибольший блок данных, который может быть передан за один раз, составляет 24576 байтов, так как на странице 35:

Для поддержки выражения 8 изохронных передач предусмотрено семь указателей страниц. Семь указателей позволяют перемещать 3 (транзакции) * 1024 (максимальный размер пакета) * 8 (записи транзакций) (24576 байт) с этой структурой данных

0
Stephen

Нет, я считаю, что это зависит от размера кластера диска. Вы можете определить это через форматирование.

Идея о том, что выбор форматирования файловой системы имеет какое-либо влияние на возможности соединения запоминающего устройства USB, для меня не имеет никакого смысла. Базовая структура устройства может влиять на возможности связи, но не на особенности файловой системы. но я думаю, что любое ограничение в протоколе данных USB (или интерфейс драйверов к нему). quack quixote 14 лет назад 1

Похожие вопросы