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

 
 
> Время отклика USB-устройства....
qqqqqq
сообщение Oct 16 2007, 10:26
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277



Померял время между отправкой одного bulk-пакета и приёмом другого. Получил в среднем 40мс.
Что-то не этого я ожидал от HS USB.
Длина пакетов была 10 байт. Драйвер CYUSB, микросхема CY7C68001, на выходе которой стоит CPLD, разворачивающая приходящий пакет, инвертируя его, в синхронном режиме на скорости 48МГц 8бит.

Как бы сократить это время раз этак в 40тысяч?...
Похоже, где-то я действую неправильно...
В интернете ничего на данную тему найти не смог, кроме упоминаний, что "USB response time is unacceptably slow". Неужели этого и добивались разработчики данной шины?
Даже не верится...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
oran-be
сообщение Oct 20 2007, 11:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Чего то как то совсем непонятно.... У шины время кадра на полной скорости 1 мС, а на высокой микрокадр - 0.125 мс. В течении этого времени в самом худшем случае ( это тот случай, если имеется простейший планировщик пакетов - один запрос в кадре) мы буим иметь задержки 2 мСек и 0.25 мСек соответственно. Хотя я еще ни разу не видел простых планировщиков пакетов. На полной скорости шина умудряется в течении 1 мсек пропустить 64 булк пакета туда и обратно при условии, что функция не тормозит с ответом и она на шине единственная. Вопрос заключается в том, каким образом измерялось время реакции. Если через GUI, то можно получить время реакции и больше.
Вообще при таких скоростях самая большая проблема - это грамотная организация потока записи в драйвер и вычитывания из него.

Сообщение отредактировал oran-be - Oct 20 2007, 11:11
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 20 2007, 17:34
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(oran-be @ Oct 20 2007, 15:09) *
Чего то как то совсем непонятно.... У шины время кадра на полной скорости 1 мС, а на высокой микрокадр - 0.125 мс. В течении этого времени в самом худшем случае ( это тот случай, если имеется простейший планировщик пакетов - один запрос в кадре) мы буим иметь задержки 2 мСек и 0.25 мСек соответственно. Хотя я еще ни разу не видел простых планировщиков пакетов. На полной скорости шина умудряется в течении 1 мсек пропустить 64 булк пакета туда и обратно при условии, что функция не тормозит с ответом и она на шине единственная.


Вопрос в том, как драйвер узнает о завершении прокачки пакета? Несколько лет назад железо раз в миллисекунду выдавало прерывание, по которому софт завершал обработку предыдущего фрейма. И И инициализировало прокачку очередного фрейма по заранее составленному расписанию. Сейчас это уже не так?


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 21 2007, 10:59
Сообщение #4


Местный
***

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



Цитата(Oldring @ Oct 20 2007, 23:34) *
Вопрос в том, как драйвер узнает о завершении прокачки пакета? Несколько лет назад железо раз в миллисекунду выдавало прерывание, по которому софт завершал обработку предыдущего фрейма. И И инициализировало прокачку очередного фрейма по заранее составленному расписанию. Сейчас это уже не так?


Давайте конкретизируем задачу.
Насколько я понял, автору ветки необходимо получить минимальное время реакции в процессе ЗАПРОС-ОТВЕТ. Сейчас у него следующая ситуация - USB устройство может отвечать быстро, а хост не готов принимать.
Разрешить эту проблему можно (ИМХО)только в драйвере устройства совместно с firmware устройства следующим образом:

1. Устройство реализует два endpoint - одно OUT (запрос) и одно IN (ответ).
2. Драйвер реализует обработчик определенного DeviceControl - запрос/ответ, запрашиваемый приложением.
3. В этом обработчике драйвер делает следующее:
3.1. Создает URB для IN и направляет его нижележащему драйверу (шины), обязательно указывая функцию завершения, назовем ее CompleteIN .
3.2. Создает URB для ОUТ с данными, полученными от приложения, и также направляет его драйверу шины с функцией завершения CompleteOUT.
3.3. Устанавливает флаг PENDING.
4. Функции завершения делают следующее:
CompleteIN: завершает DeviceControl с данными полученными от устройства (ответ).
CompleteOUT: если произошла ошибка, то прерывает запрос IN и завершает DeviceControl c ошибкой, если нет - не делает ничего.

Реализация такого механизма позволит устройству не только максимально быстро ответить на запрос (даже в пределах одного фрейма), но и передавать данные хосту во время приема пакетов транзакции запроса.

PS0. Насколько я знаю, ни один из фирменных драйверов (Cypress, Silabs, NXP, Atmel, FTDI) не имеет такого механизма, так что придется делать свой драйвер.
PS1. Для транзакций, больших длины пакета, возможно можно поменять местами 3.1. и 3.2.
PS2. Возможно, такой механизм можно использовать и с фирменным драйвером, запуская функцию чтения в отдельном потоке раньше функции записи в другом потоке. Но это потребует работы с синхронизацией потоков. ИМХО, возни больше чем с драйвером.
PS3. Можно также попробовать с фирменными драйверами, если они позволяют, поиграть с overlapped.
PS4. Вышеизложенный механизм работает - используем в своих драйверах.

Сообщение отредактировал Седой - Oct 21 2007, 11:06
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 22 2007, 06:25
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Седой @ Oct 21 2007, 14:59) *
Давайте конкретизируем задачу.

...

3. В этом обработчике драйвер делает следующее:
3.1. Создает URB для IN и направляет его нижележащему драйверу (шины), обязательно указывая функцию завершения, назовем ее CompleteIN .
3.2. Создает URB для ОUТ с данными, полученными от приложения, и также направляет его драйверу шины с функцией завершения CompleteOUT.
3.3. Устанавливает флаг PENDING.
4. Функции завершения делают следующее:
CompleteIN: завершает DeviceControl с данными полученными от устройства (ответ).
CompleteOUT: если произошла ошибка, то прерывает запрос IN и завершает DeviceControl c ошибкой, если нет - не делает ничего.


И какое в результате получилось минимальное наблюдаемое время отклика? У меня, когда я пытался добиться от такой схемы минимального времени от USB 1.1 - 2 мс на цикл. И, кстати, при прерывании IN запроса иногда время уходило в десятки миллисекунд.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 23 2007, 12:50
Сообщение #6


Местный
***

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



Цитата(Oldring @ Oct 22 2007, 12:25) *
И какое в результате получилось минимальное наблюдаемое время отклика? У меня, когда я пытался добиться от такой схемы минимального времени от USB 1.1 - 2 мс на цикл. И, кстати, при прерывании IN запроса иногда время уходило в десятки миллисекунд.


Я уже писал:
Цитата
позволит устройству не только максимально быстро ответить на запрос (даже в пределах одного фрейма), но и передавать данные хосту во время приема пакетов транзакции запроса


Если вы переводите IN в stall - то так и будет.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 13:32
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Седой @ Oct 23 2007, 16:50) *
Я уже писал:


До сих пор не до конца понимаю. Последовательность команда-ответ-команда-ответ, если вторая команда зависит от первого ответа и не может быть выдана программой до его получения, сколько миллисекунд по минимуму займет?

Цитата(Седой @ Oct 23 2007, 16:50) *
Я уже писал:
Если вы переводите IN в stall - то так и будет.


Уже точно не помню - кажется я OUT в STALL пытался переводить.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 23 2007, 13:48
Сообщение #8


Местный
***

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



Цитата(Oldring @ Oct 23 2007, 19:32) *
До сих пор не до конца понимаю. Последовательность команда-ответ-команда-ответ, если вторая команда зависит от первого ответа и не может быть выдана программой до его получения, сколько миллисекунд по минимуму займет?


Если вести речь о задержке между запрос-ответ и вторым запрос-ответ - то точно не меньше 1 мс.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:20
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Седой @ Oct 23 2007, 17:48) *
Если вести речь о задержке между запрос-ответ и вторым запрос-ответ - то точно не меньше 1 мс.


Вот и я о чем. Мне удавалось из USB 1.1 выжать 2 миллисекунды на транзакцию в подобном режиме. Было интересно, помогают ли чем-либо микрофреймы в 2.0, по которым могут генерироваться прерывания в 8 раз чаще, но которые должны быть активированы в регистрах хоста? Если не помогают - значит, Винды их не используют.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Седой
сообщение Oct 23 2007, 15:10
Сообщение #10


Местный
***

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



Цитата(Oldring @ Oct 23 2007, 20:20) *
помогают ли чем-либо микрофреймы в 2.0, по которым могут генерироваться прерывания в 8 раз чаще, но которые должны быть активированы в регистрах хоста? Если не помогают - значит, Винды их не используют.

Не знаю. Но судя по требованию Microsoft - минимальной длительности обработчика прерывания (конкретное значение не указывается, но судя по требованию на spinlock не более 25-30 мкс) - то вряд ли.

Сообщение отредактировал Седой - Oct 23 2007, 15:26
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- qqqqqq   Время отклика USB-устройства....   Oct 16 2007, 10:26
- - VDG   Цитата(qqqqqq @ Oct 16 2007, 14:26) Неуже...   Oct 16 2007, 12:51
- - Oldring   Цитата(qqqqqq @ Oct 16 2007, 14:26) Помер...   Oct 16 2007, 13:10
|- - qqqqqq   Цитата(Oldring @ Oct 16 2007, 19:10) По м...   Oct 16 2007, 14:08
|- - Oldring   Цитата(qqqqqq @ Oct 16 2007, 18:08) Менят...   Oct 16 2007, 14:14
||- - qqqqqq   Цитата(Oldring @ Oct 16 2007, 20:14) inte...   Oct 16 2007, 14:32
|- - blackfin   Цитата(qqqqqq @ Oct 16 2007, 18:08) Специ...   Oct 20 2007, 15:13
- - qqqqqq   Возникло у меня тут предположение одно.... Если п...   Oct 17 2007, 15:22
|- - qqqqqq   Цитата(oran-be @ Oct 20 2007, 17:09)...   Oct 23 2007, 16:00
|- - Седой   Цитата(qqqqqq @ Oct 23 2007, 22:00) Получ...   Oct 24 2007, 05:23
|- - qqqqqq   Цитата(Седой @ Oct 24 2007, 11:23) Все пр...   Oct 24 2007, 07:03
|- - Седой   Цитата(qqqqqq @ Oct 24 2007, 13:03) Непон...   Oct 24 2007, 08:33
|- - qqqqqq   Цитата(Седой @ Oct 24 2007, 14:33) PS. Ка...   Oct 24 2007, 09:01
|- - qqqqqq   Цитата(qqqqqq @ Oct 24 2007, 15:01) Попро...   Oct 26 2007, 09:45
|- - Седой   Цитата(qqqqqq @ Oct 26 2007, 15:45) Остал...   Oct 26 2007, 09:56
|- - qqqqqq   Цитата(Седой @ Oct 26 2007, 15:56) Для Ez...   Oct 26 2007, 14:10
|- - Седой   Цитата(qqqqqq @ Oct 26 2007, 20:10) Прове...   Oct 26 2007, 15:43
|- - qqqqqq   Цитата(Седой @ Oct 26 2007, 21:43) Судя п...   Oct 26 2007, 17:44
|- - aaarrr   Цитата(qqqqqq @ Oct 26 2007, 21:44) Я нав...   Oct 26 2007, 17:51
|- - Седой   Цитата(aaarrr @ Oct 26 2007, 23:51) Да, в...   Oct 27 2007, 04:31
- - Седой   ЦитатаВообще при таких скоростях самая большая про...   Oct 20 2007, 14:19
- - AndreyS   Добрый день. После прочтения топика, хочется вст...   Oct 29 2007, 19:53
- - Седой   ЦитатаПо поводу EzUSB, натолкнулись на то что деба...   Oct 30 2007, 10:10
- - qqqqqq   Цитата(AndreyS @ Oct 30 2007, 00:53) Юзае...   Oct 31 2007, 20:51
- - Седой   Цитата(qqqqqq @ Nov 1 2007, 01:51) И ещё ...   Nov 1 2007, 15:11
- - AndreyS   ЦитатаПытаюсь пока обходиться одним абортом - дабы...   Nov 1 2007, 20:09
|- - Седой   Цитата(AndreyS @ Nov 2 2007, 01:09) А как...   Nov 2 2007, 06:59
|- - Oldring   Цитата(AndreyS @ Nov 1 2007, 23:09) PS. А...   Nov 2 2007, 11:46
|- - AndreyS   Цитата(Oldring @ Nov 2 2007, 15:46) ...   Nov 4 2007, 19:14
|- - Oldring   Цитата(AndreyS @ Nov 4 2007, 22:14) Катас...   Nov 4 2007, 20:26
|- - Седой   Цитата(AndreyS @ Nov 5 2007, 00:14) Спаси...   Nov 5 2007, 10:06
- - qqqqqq   Цитата(Седой @ Nov 1 2007, 20:11) IO-мана...   Nov 4 2007, 19:41


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 00:51
Рейтинг@Mail.ru


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