реклама на сайте
подробности

 
 
> Лишняя задержка перед каждой USB Bulk тразакцией
ValeraVi
сообщение Oct 14 2009, 13:27
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 44
Регистрация: 30-07-05
Из: Kyiv, Ukraine
Пользователь №: 7 211



Может кто встречался с проблемой:
Есть USB full speed девайс с двумя bulk ендпоинтами (один на вход, другой на выход). Написана фирмвара, драйвера под линух и винду, все работает.
Для проверки работоспособности имеется простейшая апликуха, которая пишет 30 байт (это меньше wMaxPacketSize = 32) в девайс и сразу же вичитывает оттуда. Все это в цикле до бесконечности.
Но по хардварному анализатору видно, что виндовский драйвер перед каждой транзакцией делает задержки в 1 мс, т.е. булк пакет посылается (принимается) только в каждом 2-м микрофрейме, т.е. перед каждой транзакцией я в логе анализатора вижу 2 SOF.
При этом линуховый драйвер работает четко - задержек нет, перед каждой транзакцией по одному SOF, а в некоторых случаях умудряется даже в одном фрейме влепить по 2 транзакции (IN, потом OUT).
Девайс и к линуху и к винде подключается один и тот же. Компы с виндой и линухом - разные, но другой периферии кроме этого девайса не подключено. Испытывали на нескольких виндовых компах - все одно и тоже - видна шлет булк пакет только в каждом 2-м фрейме (не первом, не 3-м, не 4-м...).
Это какая-то особенность винды? Глюк моего драйвера виндовского? Писал его на базе примера из ДДК bulkusb. Может нужны какие-то хитрые настройки Дескрипторов usb девайса, которые для линуха подходят а для винды приводят к задержкам?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ValeraVi
сообщение Oct 20 2009, 07:27
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 44
Регистрация: 30-07-05
Из: Kyiv, Ukraine
Пользователь №: 7 211



да, драйвер на чистом DDK, за основу взят пример bulkusb (просто добавил свой код туда). Правда компилируется не make файлом от DDK а в vs2005 как проект (как описано тут)
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 23 2009, 16:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(ValeraVi @ Oct 20 2009, 13:27) *
да, драйвер на чистом DDK, за основу взят пример bulkusb (просто добавил свой код туда). ...


Если вы полностью повторили код, то могли заметить, что вывод в endpoint буферизован, и если количество байт данных превышает MAX transfer size , то из функции завершения вызывается запрос для отправки оставшихся данных и т.д.. Если вы из приложения вызовете Write c количеством данных больше, чем Max transfer size, то сможете посмотреть, есть ли "дыра" в передаче и каков ее размер. После этого можно будет сделать некоторые выводы.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016