msn 0 9 февраля, 2006 Опубликовано 9 февраля, 2006 · Жалоба Специалисты подскажите, пожалуйста, новичку. Суть проблемы такая: Пишу софт для непрерывной передачи в компьютер потока 800-900 KB/s. В качестве функции использую Cygnal C8051F32x, одна EP (64+64) с двойной буферизацией передачи типа Bulk на Full Speed в сторону Хоста. Между запросами к драйверу DeviceIoContro(,,,,,0x10000,,) в Win XP есть существенные задержки (2-3 мс) только между блоками по 64K, которые убираются ‘хитрым’ программным FIFO (именно в конце блока начинается буферизация, т.е. перед самой большой задержкой). Но в Win98 SE для Хоста Intel 82371 AB / EB есть еще существенные задержки (до 1 мс) между блоками 4К, хотя используется тоже самый драйвер, что и в Win XP и замер буфера в DeviceIoContro тот же самый – 64К. Складывается такое ощущение, что это ограничение вносит именно драйвер Хоста USBD.sys в Win 98 SE (хотя в этом не уверен). Подскажите, пожалуйста, как программно определить размер внутреннего буфера USB Хоста драйвера? Можно ли его как-то увеличить или обновить? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abo 0 16 февраля, 2006 Опубликовано 16 февраля, 2006 · Жалоба На мой взгляд не верен подход к решению задачи. Если используешь Bulk - придется смирится с возможными задержками и проектировать систему учитывая их (представь что в этот же хаб воткнули принтер и веб камеру - пошла печать и у тебя на время печати прокачка упадет в двое, включили камеру и прокачка упадет на время работы камеры на непрогнозируеммый уровень). Если нужна гарантированная полоса пропускания - используй изохронный режим, правда Сигнал тут не катит - FIFO слишком мало (макс. 256 байт пр двойной буферизации). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msn 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба Да Вы правы, подход не совсем правильный. Но только Bulk может обеспечить 1 МБ/сек. Предполагается что к компу ни чего не будет подключено кроме этой железяки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johny 0 22 февраля, 2006 Опубликовано 22 февраля, 2006 · Жалоба Специалисты подскажите, пожалуйста, новичку. в Win XP есть существенные задержки (2-3 мс) только между блоками по 64K, которые убираются ‘хитрым’ программным FIFO (именно в конце блока начинается буферизация, т.е. перед самой большой задержкой). Но в Win98 SE для Хоста Intel 82371 AB / EB есть еще существенные задержки (до 1 мс) между блоками 4К, хотя используется тоже самый драйвер, что и в Win XP и замер буфера в DeviceIoContro тот же самый – 64К. Складывается такое ощущение, что это ограничение вносит именно драйвер Хоста USBD.sys в Win 98 SE (хотя в этом не уверен). Подскажите, пожалуйста, как программно определить размер внутреннего буфера USB Хоста драйвера? Можно ли его как-то увеличить или обновить? Спасибо. Есть подозрение, что виноват не драйвер USB, а драйвер DMA. В свое время я ковырял LPT под Win98, там тоже были задержки между блоками по 4К. С задержками либо надо смириться, либо перейти на другой процессор и ISO-transfer (на full-speed максимум 1023 байта/мс, на hi - 1024 за 125 мкс). Чем Cypress FX2 не устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
левша 0 26 февраля, 2006 Опубликовано 26 февраля, 2006 · Жалоба Как вариант могу предложить перейти на High SPeed USB на FX2 от Cypress т.к. эта дорога уже пройдена многими. Fullspeed щас годится наверно только для мышей и прочей живности. Виновата скорее всего система синхронизации задач в форточках. Мне ситуация представляется следующем образом: Кванты времени не резиновые если выделена 1мс потоку передачи данных драйвера то он может передать/принять за эту 1 мс либо 64 кб либо 512, либо N*512. Не забывайте что кадр в USB FullSpeed 1 мс. Так как передача идёт под управлением хоста а не самоходом то размера буфера драйвера ИМХО не причём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться