2012-01-07 1 views
1

Я пытаюсь ускорить работу довольно вялого загрузчика. В настоящее время я отправляю данные на одной конечной точке USB HID, а поскольку это низкоскоростное устройство, я, по-видимому, ограничен одним 8-байтовым пакетом за интервал 10 мс для колоссальных 800 байт в секунду.Ускоренный вывод USB HID

Возможно ли как-то увеличить частоту отчетности? Или использовать несколько конечных точек вывода в одном интерфейсе или как часть составного устройства? Или, возможно, злоупотреблять контрольной точкой для отправки дополнительных данных?

Лучшее сжатие - это всегда альтернатива, я полагаю, но это область уменьшающейся отдачи, а перепроектирование аппаратного обеспечения, позволяющее полноскоростному USB, на самом деле не является вариантом.

Для записи я был бы доволен решением для Windows.

ответ

2

Или, возможно, злоупотреблять контрольной точкой для отправки дополнительных данных?

Для этого вы можете использовать «особые запросы поставщика». Чип TI TUSB3410 работает таким образом AFAIK. У многих стеков USB есть крючки для них уже на месте.

Для этого требуется драйвер или libusb на стороне хоста.

+0

Спасибо за предложение! Микроконтроллер PIC18, который я использую, должен поддерживать их довольно легко. Я не собираюсь писать драйвер, но использование готового, конечно же, не может быть и речи, особенно с общими отчетами HID, хранящимися как резерв. – doynax

1

Кто сказал, что вы ограничены 8-байтовым пакетом за 10 мс? Я не знаю точных цифр с головы, но я знаю, что вы можете отправлять более крупные пакеты, чем это. Я сделал HID-устройство и использовал 64-байтные пакеты. Я думаю, что я мог бы пойти больше, но этот предел, вероятно, зависит от оборудования. Какое оборудование вы используете?

Кроме того, вы консультировались с USB in a NutShell?

+0

Стр. 4 из «USB в NutShell» гласит: «Максимальный размер полезной нагрузки данных для низкоскоростных устройств составляет 8 байтов»; и в соответствии со стр. 51 стандарта USB 2.0: «Низкоскоростные конечные точки ограничены указанием только от 10 мс до 255 мс». Возможно, я ошибаюсь, что они понимают. – doynax

+0

Учитывая, что «низкоскоростной» USB работает со скоростью 1,5 Мбит/с, вы действительно должны неправильно интерпретировать текст. – Clifford

+1

Это передача прерываний. Устройство может указать интервал опроса, на котором он может прервать хост. И этот диапазон составляет от 10 мс до 255 мс. –

0

Фактический предел составляет 8 байт каждые 10 мс для низкоскоростных устройств и 64 байта каждые 1 мс для высокоскоростных устройств на конечную точку прерывания.

Похоже, что первое, что нужно попробовать, это переключиться на высокоскоростной режим, если его поддерживает аппаратное обеспечение. Следующая вещь в списке - использование нескольких конечных точек. Если вы действительно хотите получить максимально возможную скорость передачи, класс HID является плохим выбором.

0

Я смог ускорить загрузку по порядку, используя запросы SET_REPORT на конечной точке управления, вместо объявления отдельной конечной точки прерывания. Таким образом, вы получаете всю доступную пропускную способность для контрольных передач.

Также использование более крупного отчета, разбитого на несколько сегментов, помогло уменьшить количество необходимых пакетов SETUP.