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

 
 
> А если из двух ендпойнтов одновременно принимать?, Одна - High Speed, вторая - можно Full Speed
jur
сообщение Apr 20 2006, 21:05
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Привет!

Соорудил я устройство на CY7C68001. В составе имеется микросхема USB CY7C68001, простенький управляющий микроконтроллер и ПЛИС. Это устройство по одной односторонней ендпойнте гонит поток данных в компьютер на High Speed, на скорости (в пике) 12.5 MHz. По другой вдухсторонней ендпойнте я хотел изредка передавать управляющие команды (изменить режим, изменить интенсивность и т.п.). Получилось, что вторая ендпойнта всегда получает нормальную команду от PC, но когда она отвечает, что мол "Все прекрасно, интенсивность изменена!", ее ответ теряется на очень продолжительное время. Для иллюстрации приведу ситуацию "в лицах":

1. Компьютер передает команду изменить интенсивность и ждет подтверждения.
2. Подтверждения нет в течении нескольких сотен миллисекунд.
3. Компьютер не понимает молчания и передает команду повторно.
4. Подтверждения нет в течении нескольких сотен миллисекунд.
...

Это продолжается несколько раз (я задал до 5 попыток) и потом, вдруг, приходит два подтверждения на первые две команды (видимо потому, что в микросхеме USB имеется буффер на два пакета). Смотрел осциллографом, смотрел по последовательному каналу - всегда имею подтверждение со стороны устройства, что команда получена, обработана и выполнена. Но до приборной программы в компьютере эта команда доходит с очень большим опозданием. Опозданием гораздо большим, чем обычный уровень задержки на вытесняющую многозадачность Windows.

Система: Win XP, драйвер CyUSB.sys из их Девелопер Студии.

В чем могут быть грабли?


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
al333
сообщение Apr 21 2006, 06:12
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 27-09-05
Пользователь №: 8 995



попробуй добить буфер, думаю CY7C68001 ждет окончания. Или сформируй сигнал "буфер заполнен" в CY7C68001.
Go to the top of the page
 
+Quote Post
jur
сообщение Apr 21 2006, 07:26
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(al333 @ Apr 21 2006, 09:12) *
попробуй добить буфер, думаю CY7C68001 ждет окончания. Или сформируй сигнал "буфер заполнен" в CY7C68001.
Да, я так и делаю, подаю CY7C68001 команду "отправить буфер" (заношу в регистр 0x20 номер FIFO).

Прошу прощения, забыл уточнить. Это безобразие начинается только при запуске скоростной передачи данных. Т.е. когда ендпойнта данных не активизирована (передача данных остановлена), то ендпойнта управления работает нормально. А когда включается передача данных, то канал управления начинает хандрить. Причем, он даже как-то работает, но крайне ненадежно.

К моему большому сожалению я еще не научился писать драйвера под это дело. Поэтому разобраться с примерным драйвером от Cypress пока не выходит (тёмно там все...). Вот я и подумал, может быть мои проблемы проистекают от того, что к одному драйверу (CyUSB.sys) обращаются два потока? На стороне персональника у меня все организовано довольно просто. Есть основная программа, она взаимодействует с пользователем и время от времени командует моим устройством при помощи ендпойнты управления. А прием данных происходит в отдельном треде, который работает параллельно и асинхронно с основной программой.

Так может быть драйвер CyUSB.sys не является реентрантным? Точнее, API, через которое я к драйверу обращаюсь. Возможно, меня выручит создание еще одного экземпляра класса API, с помощью которого я смогу работать с каналом управления отдельно?

P.S. Прошу прощения за сумбурность, замучал меня уже этот проблем :-) Пока выкрутился очень просто: для канала управления применил простой последовательный порт :-) Но это, конечно, не дело...


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
al333
сообщение Apr 21 2006, 11:31
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 27-09-05
Пользователь №: 8 995



Похоже CY7C68001 или CyUSB.sys пресует твои данные в один фрейм, попробуй 8 раз передать одно и тоже или уменьши скорость приема данных по High Speed или засинхронизируй программы в ХР. Но у BULK нет точной задержки по времени.
Go to the top of the page
 
+Quote Post



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

 


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


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