|
|
 |
Ответов
|
Oct 21 2007, 10:59
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 22 2007, 06:25
|

Гуру
     
Группа: Свой
Сообщений: 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 запроса иногда время уходило в десятки миллисекунд.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 12:50
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

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

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

|
Цитата(Седой @ Oct 23 2007, 16:50)  Я уже писал: До сих пор не до конца понимаю. Последовательность команда-ответ-команда-ответ, если вторая команда зависит от первого ответа и не может быть выдана программой до его получения, сколько миллисекунд по минимуму займет? Цитата(Седой @ Oct 23 2007, 16:50)  Я уже писал: Если вы переводите IN в stall - то так и будет. Уже точно не помню - кажется я OUT в STALL пытался переводить.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 13:48
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(Oldring @ Oct 23 2007, 19:32)  До сих пор не до конца понимаю. Последовательность команда-ответ-команда-ответ, если вторая команда зависит от первого ответа и не может быть выдана программой до его получения, сколько миллисекунд по минимуму займет? Если вести речь о задержке между запрос-ответ и вторым запрос-ответ - то точно не меньше 1 мс.
|
|
|
|
|
Oct 23 2007, 15: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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|