Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: usbser.sys и PnP
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
owl
Прошелся по топикам и не смог понять, есть ли решение для следующей проблемы.
Подсоединяю уст-во к компу USB на AT91SAM7X.
Тот его определяет как CDC.
Открываю нужный порт, начинаю запись(чтение) - все нормально.
Отсоединяю плату. В диспетчере видно, что уст-во "отвалилось". Однако все операции с портом на компе продолжаются без ошибки.
На сколько я смог понять, все проблемы в usbser.sys.
Если кто сталкивался, поделитесь пожалуйста решением.
HARMHARM
Цитата(owl @ Mar 12 2009, 09:19) *
Если кто сталкивался, поделитесь пожалуйста решением.

Все сталкивались.
Я закрываю порт по таймауту, чтобы порт был доступен при повторном подключении.
Радикальное решение - притвориться устройством, для которого есть нормальные драйвера - много читал на форуме, так ничего и не нашел. Вроде бы у кого-то получалось прикинуться FTDI... Если найдете решение, будет интересно.
owl
Цитата(HARMHARM @ Mar 12 2009, 15:13) *
Все сталкивались.
Я закрываю порт по таймауту, чтобы порт был доступен при повторном подключении.
Радикальное решение - притвориться устройством, для которого есть нормальные драйвера - много читал на форуме, так ничего и не нашел. Вроде бы у кого-то получалось прикинуться FTDI... Если найдете решение, будет интересно.

Да была мысль прикинуться FTDI - но пока не до этого. Будет время обязательно попробую. До создания драйверов пока не созрел.
Таймаут - тоже мысль... Сейчас примерно, так и работаю. Просто криво это как-то.
Если что нибудь найду - поделюсь.
sergeeff
С таймаутами - это пройдет, только вы сами пишете какую-то коммуникационную программу со стороны host'a. Если вы на PC открыли какой-нибудь терминал для связи с вашим устройством, то после reset'a вашего устройства виртуальный COM перестанет существовать и заработает только после перезагрузки PC, что ни в какие ворота не лезет. У NXP есть пример драйвера (с ошибками, правда) для USB CDC - он в этом плане более грамотно реализован. По крайней мере достаточно просто закрыть программу связи и снова ее открыть - COM снова будет работать.
aaarrr
Цитата(sergeeff @ Mar 12 2009, 22:29) *
Если вы на PC открыли какой-нибудь терминал для связи с вашим устройством, то после reset'a вашего устройства виртуальный COM перестанет существовать и заработает только после перезагрузки PC, что ни в какие ворота не лезет.

Только на W2K. Не надо пугать людей.
sergeeff
Цитата(aaarrr @ Mar 13 2009, 00:09) *
Только на W2K. Не надо пугать людей.


Может в XP SP3 это исправили, но в SP2 usbser.sys работал именно так.
aaarrr
Даже в XP SP1 работает нормально, достаточно закрыть порт без перезагрузки.
sergeeff
Цитата(aaarrr @ Mar 13 2009, 01:39) *
Даже в XP SP1 работает нормально, достаточно закрыть порт без перезагрузки.


Вы невнимательно прочитали, что я написал. Именно при открытом порте, если нажать на reset в устройстве, COM порт больше не откроется.
HARMHARM
Цитата(sergeeff @ Mar 13 2009, 10:35) *
Вы невнимательно прочитали, что я написал. Именно при открытом порте, если нажать на reset в устройстве, COM порт больше не откроется.

Он-то откроется, просто USB CDC подхватывает только закрытый COM.
Просто таймаут закрытия порта с PC должен быть меньше времени перезапуска устройства.
sergeeff
Цитата(HARMHARM @ Mar 13 2009, 13:20) *
Просто таймаут закрытия порта с PC должен быть меньше времени перезапуска устройства.


Не знаю, может я чего не так делал, но у меня ситуация с usbser.sys была такова. Терминальная программа с открытым виртуальным COM портом на PC. Жмем reset на устройстве. Терминальная программа порт не закрывает (с какой ей стати?). Устройство стартует заново. Даже если теперь закрыть терминальную программу и стартовать заново, виртуальный COM порт больше не откроется, пока не перезагрузишь PC.
HARMHARM
Цитата(sergeeff @ Mar 13 2009, 14:49) *
Не знаю, может я чего не так делал, но у меня ситуация с usbser.sys была такова. Терминальная программа с открытым виртуальным COM портом на PC. Жмем reset на устройстве. Терминальная программа порт не закрывает (с какой ей стати?). Устройство стартует заново. Даже если теперь закрыть терминальную программу и стартовать заново, виртуальный COM порт больше не откроется, пока не перезагрузишь PC.

Именно так.
Но - достаточно передернуть USB или сбросить устройство, когда COM закрыт, и можно снова открывать.
Таймаут - это касается своего приложения, работающего с устройством через CDC...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.