4

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

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

3 ответа3

4

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

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

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

3

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .