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

 
 
> ОС и 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
tyro
сообщение May 6 2011, 09:56
Сообщение #4


Любитель Кошек
*****

Группа: Свой
Сообщений: 1 593
Регистрация: 8-06-06
Пользователь №: 17 873



Цитата(evg123 @ Apr 25 2011, 11:13) *
... кроме вашего устройства предполагается наличие ещё 255 USB-устройств. (даже если этих устройств нет - это ничего не меняет). Пока все данные соберутся в один стандартный длинный запрос - проходит несколько контекстных переключений, квант переключения - 15 миллисекунд. Короче, это особенность винды.

А где это можно посмотреть поподробнее?


--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
Go to the top of the page
 
+Quote Post
evg123
сообщение May 10 2011, 10:24
Сообщение #5


Местный
***

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



Цитата(tyro @ May 6 2011, 12:56) *
А где это можно посмотреть поподробнее?

У меня два источника - первый - Практика программирования USB (П. Агуров) http://www.ozon.ru/context/detail/id/2643471/
Второй: стандарт USB2.0 (Это лучше). Файл могу выложить, но он 5 метров. Лучше отсюда: http://www.4shared.com/document/cTGNx2jL/usb_20.html
Может я что-то напутал с цифрами, но в чём я совершенно уверен, так это в том, что запросы со стороны хост-контроллера не могут быть чаще 1 миллисекунды. Они могут быть короткие, но чаще быть не могут. По поводу 15 миллисекунд в винде - это мой личный опыт работы с DSP5509а и борландовским билдером + WinDriver8.11. Я оправлял каждую секунду по одному endpoint-у 100 коротких пакетов в в драйвер, очередь постепенно переполнялась. На осцилографе видел SOF в среднем 1 раз в 15 миллисекунд. Иногда чаще иногда - реже. Трафик мог увеличить только в одном случае - нарастить количество endpoint-ов. Когда задействовал в DSP 7 эндпоинтов - тогда смог отравлять в семь раз больше. Выход увеличить пропускную способность есть два - увеличивать число энд-поинтов или увеличивать объём передаваемых пакетов для одного эндпоинта (но здесь эти подходы не приемлемы).
Go to the top of the page
 
+Quote Post



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

 


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


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