msn 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Здравствуйте специалисты! Подскажите, пожалуйста, как для конечной точки (EP) размером 64 Байт (максимум для Bulk Full Speed) получается скорость обмена почти 1 МБайт/сек, если 64 Байта / 1 мс будет всего 64 КБ / сек. Ни где не нашел в спецификации, что за один фрейм одна и та же EP может получать несколько транзакций с запросом на передачу данных в сторону Хоста (IN) и соответственно выполнять несколько передач блоков максимальной длины. Может ли быть такое: Host Application хочет прочитать, например 645 байт из Bulk EP, оно просто передает IRP драйверу с размером буфера в 645 байт и в течении TimeOut ждет данные. Драйвер разбивает этот IRP на 11 транзакций IN и передает их в шину? И тогда в течении 1 фрейма может, будет: [ IN Token 0] {Data 0-63} [ACK] … [ IN Token 9] {Data 576-639} [ACK] [ IN Token 10] {Data 640-644} [ACK] А Firmware просто опрашивает например флаг опустошения EP, и при необходимости записывает новую порцию данных? Спасибо за ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abo 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Так и будет, если шина в данный момент свободна. В моем случае при использовании в устройстве двойной буферизации и при пересылке блоков данных размером в десятки мегабайт прокачка достигала 920 - 960 Кб/с. Скорость ограничивается еще тем, что за один IRP запрос нельзя переслать больше 64Кб. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msn 0 20 января, 2006 Опубликовано 20 января, 2006 · Жалоба Спасибо за ответ. А, вы не подскажите где об этом написано, или можно прочитать. Может я плохо читал спецификацию USB, но так, к сожалению и не нашел, что за 1 фрейм может передаваться несколько транзакций для EP в режиме Bulk. Еще хотел уточнить для изохронных EP и по прерываниям в одном фрейме для одной и той же EP может быть несколько транзакций? В спецификации есть таблицы для каждого типа передач, один из столбцов называется Max Transfers, не подскажите, что он определяет: теоретически возможное количество транзакция для всей шины (несколько устройств, несколько EP), или для возможное количество транзакция для одного устройства с одной EP. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abo 0 21 января, 2006 Опубликовано 21 января, 2006 · Жалоба В общем то я сам спецификацию читал по диагонали ;). Все больше на собственных ошибках опыта набираюсь. Про изохронные ЕР - одна транзакция за фрейм, буфера при двойной буферизации переключаются у тех камней с которыми работал, по SOF. Max Transfer определяет теоретический предел пропускной способности шины вобщем. Но в каждом конкретном случае надо разбираться отдельно. Например ISO trans max size - 1023 byte/ms. Это значит что одно устройство может само их передавать, могут два устройства поделить между собой но уже меньшее количество (накладные расходы на передачу служебной информации в этом случае увеличиваются). При этом 10% останется для Control Transfer и возможно Bulk. Многое зависит еще и от софта на хосте. Винда иногда, как мне кажется не совсем корректно обрабатывает скользкие ситуации. В общем - большое поле для экспериментов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msn 0 21 января, 2006 Опубликовано 21 января, 2006 · Жалоба Большое спасибо за ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johny 0 24 января, 2006 Опубликовано 24 января, 2006 · Жалоба В спецификации USB естественно прямо не указано, что чере один EP за фрейм может передаваться более одного пакета. Но реально это так - Bulk передача занимает все свободное время шины, и если других активных устройств нет, то при отсутствии задержек на обработки запроса на передачу, можно достигнуть 900 кБ/сек на USB 1.1. Изохронные транзакции от Bulk практически не отличаются, тут зависит от драйверов хоста. В Windows я не нашел поддержки interrupt-канала, работал с ним как с bulk. По изохронному каждый фрейм идет запрос на передачу, но реально пакет может и не передаваться. За фрейм от одного ЕР передается только один пакет, длиной не более максимальной установленной для данного ЕР. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться