|
V-USB HID, Disconnect, ATmega32? 16 MHz |
|
|
|
Mar 20 2011, 12:15
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Привет! Я много сделал юсб -девайсов и почти во всех применял V-USB, который при подключении к компу запрашивал драйверы, короче работал через LibUSB-win32. Было все ок, но мне в нем не нравилось то, что ему нужны были драйвера и глючность самой библиотеки (под комп) на некоторых компах(например когда девайс е подключен и т.д.). Но вот в последнее время решил пересесть на HID, тут либа стандартная и дравера не надо, а значит, будет работать на большинстве платформ. Чтобы не паять девайс для теста, я просто решил переделать тот, который щас разрабатываю. Я Просто изменил дескриптор репорта, отключил опрос по RS485(это одна с ф-ций девайса), и сделал пару изменений в конфиге, переделал прогу под комп и девайс начал кидать байтики на комп. Потом влючл опрос по RS485, но не подключал витую пару - работало тоже нормально. Потом подключил конектор с витой парой и как только остальные девайсы по рс485 начали передавать байты на главные девайс (тот, на котором юсб), программа перестала находить девайс  . Заглядывал в диспетчер устройств, там девайс нормально определяется, потом решил посмотреть через эверест. Оказывается, что при нормальной работе девайса в эвересте отображаются производитель, продукт, VID/PID, клас, а когда программа не может найти устройство, то только VID/PID. Соответственно, программа не может его найти. Но при этом, даже когда програма не видит устройство, оно работает нормально (опрос по рс485, отображение на дисплее, сканирование клавы). Я потом начал втыкать usbPoll() куда только можно, всеравно не работает. Короче мучался полторы суток и заработало, почему не знаю, но хотелось бы знать. Конечно пробелма решилась, но не факт, что она опять появится, особенно фигово будет когда оно начнет глючить у заказчика. Может кто-то сталкивался с подобной пробемой? Забыл добавить: глюк происходит вне звисимости от частоты опроса (5 сек или 50 мсек)
|
|
|
|
|
 |
Ответов
(1 - 7)
|
Mar 20 2011, 12:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
С такой проблемой я не сталкивался, мои девайсы попроще вашего будут  . Но я читал одну важную вещь вещь: AVR довольно хиленький процессор для обслуживания USB, поэтому он не может одновременно нормально обслуживать USB канал и выполнять другие сложные задачи. А когда девайс не успевает обслуживать USB канал, то комп его как-то вырубает. У меня такое было из-за помех. НАгрузка включается, проц глючит - девайс отваливается. В диспетчере вроде есть, а прога его не находит. Я смотрел ихние примеры - они даже один таймер сделали не на прерываниях, а по опросу флага. Поэтому совет - разнесите ваши задачи по процессорам - пусть USB занимается, например, ATMega8, а всем остальным - ваша Mega32. Между ними какой-нибудь USART. Мне попадался на глаза проект - ИК глазок для пультов на USB. Там именно так и сделано. И написано прямым текстом - AVR не справляется с обеими задачами - и запросы компа обрабатывать и на глазок реагировать. Отсюда разные глюки - то девайс отвалится, то часть сигналов пульта теряет - как повезет.
Сообщение отредактировал hd44780 - Mar 20 2011, 12:32
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 20 2011, 12:38
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
hd44780, спасиб что ответил! я думал что мой вопрос даже до конца не дочитают. Но проблема не в том. У меня к примеру есть еще один девайс на атмега32, так в нем: юсб, ик-приемник, ик-передатчик, 4 дисплея, 1-wire, ну и еще управление нагрузками, светодиодами и некоторые математические вычисления, по юсб девайс опрашивается каждые 50 мс почти круглосуточно. Работает без глюков, но использует LibUSB-win32. Тут проблема в чем то другом, наверно LibUSB-win32 с меньшей частотой опрашивает девайс чем ХИД. Я поставил USB_CFG_INTR_POLL_INTERVAL = 500 но проблема всеравно не решилась.
|
|
|
|
|
Mar 20 2011, 14:51
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

|
Подключил к компу с одноядерным процом заработало нормально. Помню когда то когда делал девайс на том компе, он работал нормально, потом подключил к двухядерном ноуту - начались дисконекты, и вообще, на всех двухядерный компах были дисконекты(тогда проблему решил некоторым изменениеи кода). Я так понял, комп делает очень часто запросы и МК не успевает на них отвичать. Для теста я подключил девайс к ноуту через 4-х портовый хаб (юсб 2,0). Работает уже около часа без ошибок.
Тут я в заблуждении. Я не могу понять, что нужно сделать чобы чтобы комп "более медленно" опрашивал девайсы. Почему в лапках? да потому что не пойму, скорость чего нужно уменьшить. Ведь частота опроса - 1 сек, а это не мало для того, чтобы МК успел ответить.
|
|
|
|
|
Mar 20 2011, 15:53
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Лови. Никаких доп SDK/DDK не нужно, я все в проект включил. Я компилил в VS.NET 2005. Пойдет ли в других - не знаю.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|