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

 
 
> ОС и USB, Проблема с задержками USB
MerQcio
сообщение Apr 14 2011, 18:36
Сообщение #1





Группа: Validating
Сообщений: 5
Регистрация: 20-11-10
Пользователь №: 61 038



Доброго времени суток! Буду очень признателен, если кто-то из сведущих поможет разобраться в вопросе: в чём может быть причина очень долгой отправки пакета от девайса к хосту? Т.е. - имеется девайс, которому с ПК через USB шлётся 2 байта, и после некоторых преобразований (довольно быстрых - 5-10 мкс), девайс записывает 2 байта в буфер своей IN-точки. ПК непрерывно ждёт ответа. Так вот этот буфер опустошается через 4-12 мс(!). Причём очень периодично: пакеты уходят со следующими паузами: 4мс-4мс-12мс-4мс-4мс-12мс... (смотрю осцилом). Если немного подождать, то бывают моменты, когда пакеты идут непрерывно, но тоже только через 4мс (такие моменты быстро пропадают и снова 4-4-12)... На всякий случай проверил ( wacko.gif ) - опросы хоста идут как и положено - через 1 мс. Других USB-устройств не подключено.
Вот такая беда. Операционка - МСВС, юзается LibUSB, используются потоки - всё, что могу сказать про сторону ПК (моя часть - девайс laughing.gif ). Может ли ненагруженная ОС приводить к таким задержкам? Или дело в кривизне рук программиста? Или ещё в чём?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MerQcio
сообщение Apr 16 2011, 07:13
Сообщение #2





Группа: Validating
Сообщений: 5
Регистрация: 20-11-10
Пользователь №: 61 038



Цитата(sergeeff @ Apr 15 2011, 16:15) *
Если перейти на bulk, накопить приличную порцию на передачу и скинуть за раз, то можно ее совсем с другой скоростью передать, но задержка в начале отправки составит все те же 1-хх ms.

sergeeff, извините, я, видимо, ввёл вас в заблуждение неправильно (не до конца) сформулированным ТЗ rolleyes.gif
Моя железка - посередине между тестируемым устройством и ПК и обеспечивает их обмен. С устройством общаюсь по определённому протоколу с квитированием,т.е. после того, как оно мне что-то прислало, я должен быстро (~200мкс) отправить ему ответ. А ответ этот получаю от ПК. Поэтому накапливать запросы устройства я не могу.
И вообще, понял, что USB мне совсем не подходит,если времена ответа такие маленькие (о чём раньше думал?.. wacko.gif ).
kovigor: периодичность опроса конечно же 1мс, а то наверное вообще по полчаса ждал бы))
PS И всё-таки: время от помещения данных в буфер точки устройства до его(буфера) очищения при interrupt-передачах (а также любых других при свободной шине) в моём понимании от 1мс до 2мс. Я прав? Откуда же эти 4-12мс?.. Только если действительно пакеты "бьются"... Но это ж как надо биться))). Кабель и плата от Миландра, вроде бы качество должно присутствовать)
Ещё раз спасибо за ответы

Сообщение отредактировал MerQcio - Apr 16 2011, 07:18
Go to the top of the page
 
+Quote Post
evg123
сообщение Apr 25 2011, 07:13
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282



Кто у вас хост? Если это винда - то у неё HOST-драйвер такой, что отправляет пакеты с задержкой. Циклограмма USB - 1 миллисекунда. => быстрее чем одна миллисекунда - не будет никогда. Interrupt - это то же что и bulk, только медленнее. => bulk по-любому будет лучше.
Любой отравляемый пакет должен быть смаршрутизирован в общую 1-ms-ную циклограмму, в которой кроме вашего устройства предполагается наличие ещё 255 USB-устройств. (даже если этих устройств нет - это ничего не меняет). Пока все данные соберутся в один стандартный длинный запрос - проходит несколько контекстных переключений, квант переключения - 15 миллисекунд. Короче, это особенность винды. Линукс будет сто пудов быстрее. А если возьметё в качестве хоста PIC-32, то тогда выйдете на желаемое быстродействие.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 22:56
Рейтинг@Mail.ru


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