[an error occurred while processing this directive] [an error occurred while processing this directive]
Про один пакет в фрейме
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Илья Гаврилов 28 февраля 2002 г. 16:07
В ответ на: Ответ: Из собственного опыта отправлено John 28 февраля 2002 г. 14:08

Не забывайте, что USB - это не RS-232, приходится делить время на шине между разными устройствами, каковых может быть до 127. Этим занимается входящий в состав операционки драйвер USBD - слой, лежащий непосредственно поверх драйвера хардвера. К USBD стекаются запросы на прием и передачу от драйверов разных устройств. Когда к USBD приходит запрос, он выделяет время на шине для передачи данных. Время на шине USB 1.1 поделено на фреймы по 1 мс. Как правило, если запрос пришел в время фрейма N, время в текущем фрейме для него не выделяется, даже если шина ничем не занята, а выделяется начиная с фрейма N+1.
Пусть для определенности нам нужно принять 4К через bulk in. Если наш драйвер будет давать USBD запрос на прием 64 байт (максимальный размер пакета для bulk), ждать, пока USBD вернет данные, и только после этого давать новый запрос, то как раз и получится один пакет в фрейме. Этого можно избежать двумя способами: ставить в очередь новые запросы, не дожидаясь выполнения предыдущих, либо еще проще - дать запрос на все 4К разом. USBD это позволяет, он сам разобьет его на нужное количество пакетов, и если нет других запросов, будет передавать в каждом фрейме столько, сколько успеет.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru