2009-12-09 3 views
1

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

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

спасибо.

-AD

ответ

1

Чем больше, тем лучше Как правило, чем больше вы отправляете, тем быстрее переводы USB будет (масса). Думаю, мы попали в сладость на 2 Мбайт куска. Единственное ограничение - это размер буфера, который может обрабатывать ваш хост-контроллер.

Немного почему времен протокола шины в 1 мс (полная скорость) 1/8 мс (высокая скорость) куски. Во время которого может быть отправлено 0-15 пакетов (64B/512B full/high speed).

Требуется время для настройки передачи USB в контроллере и для его завершения.

Пример передачи 10byte полной скорости: ms0 - установка OHCI для передачи 10bytes MS1 - 10bytes передаются (это может произойти на самом деле на следующем интервале 1мс) ms2 - прерывание для уведомления о завершении. - 3ms отправить 10bytes

Пример передачи 640byte: ms0 - установка OHCI MS1 - передача 640bytes MS3 - прерывание - 3 мс для отправки 640bytes.

Думаю, вы получите картину.

Размер буфера IO устройства не изменяет вышеуказанное утверждение, так как большие передачи хоста/устройства исключают служебные данные настройки/обработки.

Пример очень медленного устройства и передачи 256byte ms0 - установка OHCI ms1 - отправить 64, получить НАКС .. ms2 - отправить 64, получить НАКС .. MS3 - отправить 64, получить ОПП .. MS4 - послать 64, получить НАКС .. MS5 - прерывание

Надеются, что это помогает

+0

Отличный ответ @Boris, касающийся «Единственное ограничение - это размер буфера, который может обрабатывать ваш хост-контроллер». Знаете ли вы, что в любом случае, чтобы определить этот размер? –

+1

@DaviddCeFreitas, который зависит от аппаратного обеспечения контроллера. Это обычно указывается в документации контроллера и имеет специфику оборудования. – Boris

1

Если он читается(), писать() файловую систему называют вы говорите?

Затем, AFAIK, у вас практически нет контроля над политикой планирования данных базового устройства. Сказав это, всегда лучше, чтобы приложение оказалось в очереди на большой объем данных, так что количество транзакционных накладных расходов COMMAND-RESPONSE .

Кстати, если вы говорите о BUS LEVEL READ WRITE & сделку, то в USB 2.0, MAXIMUM BULK РАЗМЕР ПАКЕТА поддерживается 512 байт (что совпадает с размером 1 сектора в большинстве устройств хранения данных), и это достаточно хорошо.

И много раз, эти ТРУБЫ будут иметь реализацию PING-Pong в принимающем буфере, который будет означать, что-нибудь более 1024 байт, будет эффективно ждать некоторые, где в верхних слоях физического оборудования (например, хост Кэш ПК ~~~)

0

Чтобы ответить на ваш вопрос, вы не можете увеличить размер максимального пакета. Он определяется USB, поскольку он по ряду причин.

Однако фактический максимальный размер пакета не ограничивает размер передачи на уровне SW. При максимальном размере пакета размером в 64 байта вы можете настроить гораздо большую передачу с помощью одного URB. На самом деле, это единственный способ получить достаточно большую пропускную способность - ваш SW должен работать на уровне «передачи» USB, а не на уровне пакета.

Более короткий размер пакета вызывает некоторые дополнительные накладные расходы на проводе (больше заголовков, CRC и межпакетов), но это порядка 5-10%. И вы все равно не можете его изменить.