Почему USB перезагружает WINDOWs ?
Какие вообще есть конфликты между USB-устройствами и Windows'ом?
Хоть бы ссылочку какую-нибудь получить.
Разрабатываемое устройство перезагружается в самом начале, когда устройство программно отключается от питания(шины USB), а затем включается.

[font=Arial]
Если устройство до этого не было подключено (кабель), то при подключении не перезагружает Windows(хотя процедура программного включения-выключения всё равно выполняется).
TailWind
Jul 2 2007, 09:05
Это у Вас что-то с драйвером.
sergeeff
Jul 2 2007, 09:17
Если USB device что-либо неправильно посылает host'у с Windows может произойти много чего нехорошего типа появления "синего экрана смерти" или система начинает работать в 100 - 1000 раз медленнее. Резет - из той же оперы.
Цитата(TailWind @ Jul 2 2007, 13:05)

Это у Вас что-то с драйвером.
Драйвер Windows'овский
Вы писали: ......Если USB device что-либо неправильно посылает host'у
Но тогда устройство не определилось бы или не включилось, выдало бы в диспетчере устройств код ошибки
Мне бы ссылочки......ссылочки.....вот было бы хорошо-то как а?
sergeeff
Jul 2 2007, 10:55
Уважаемый! Какие ты хочешь ссылочки? Я делюсь собственным опытом. Меня две недели как-то трахали, что device не работает. А дело было в ошибках по железу. При этом компьютер зависал намертво по десять раз на дню, причем пару раз с летальным исходом (приходилось все переустанавливать).
Цитата(Толик @ Jul 2 2007, 14:21)

Драйвер Windows'овский
Ясное дело, что не Линуксовский. Вы наверно хотели сказать что он не Микросовтовский

. Кривой драйвер может творить с системой все, что угодно. Единственный рецепт - ищите менее глючный драйвер. Другого выхода нет. Сами Вы его не поправите
То что проблема с железом это понятно. Вопрос был в том какая проблема. Поэтому я и написал что драйвер стандартный Windows'a и к нему вопроса быть не может.
А ссылки нужны по самой Windows. В часности почему она позволяет постороннему устройству себя перезагружать и не выдаёт при этом каких-нибудь предупреждений? Да и вообще - почему перезагружается Windows?
Свою проблему я уже решил. Но решение ещё более запутало. Оказывается я ставил слишком большое значение поля wMaxPacketSize в дескрипторе конечной точке. Даже и не знаю что думать. Может компьютер слишком слабый, а может во мне проблема?
То что проблема с железом это понятно. Вопрос был в том какая проблема. Поэтому я и написал что драйвер стандартный Windows'a и к нему вопроса быть не может.
А ссылки нужны по самой Windows. В часности почему она позволяет постороннему устройству себя перезагружать и не выдаёт при этом каких-нибудь предупреждений? Да и вообще - почему перезагружается Windows?
Свою проблему я уже решил. Но решение ещё более запутало. Оказывается я ставил слишком большое значение поля wMaxPacketSize в дескрипторе конечной точке. Даже и не знаю что думать. Может компьютер слишком слабый, а может во мне проблема?
sergeeff
Jul 2 2007, 13:19
Насчет того, что ты проблему решил - это скорее всего иллюзия. Обмен дескрипторами происходит на этапе usb enumeration, т.е. когда еще твой драйвер не подгружен. Посмотри внимательно, нет ли звона на фронтах сигналов.
SunnyDevil
Jul 2 2007, 18:22
Хочется уточнить характер перезагрузки:
1 вариант. После подключения устройства Windows корректно завершает свою работу и аккуратно перезагружается. В таком случае дело действительно в драйверах или в системе целом. На мой взгляд такое развитие событий неправдоподобно.
2 вариант. Подключайете устройство и компьютер сразу уходит на перезагрузку как после нажатия на Reset. В таком случае скорее всего проблема в элементарной электрической совместимости вашего устройства и в целом всего компьютера. Не несет ли оно на себе потенциал? Напрямую либо через емкость? Установлены ли защитные цепи от выбросов по сигнальным цепям и питающим? Не потребляет ли оно слишком большой ток при включении от USB шины? Попробуйте подключить устройство к другим компьютерам, может материнская плата чувствительная оказалась к недоработкам в вашем устройстве.
3 вариант. Windows выдает кучу ошибок уровня ядра, выходит в синий экран и после дампа перегружается. Проблема с драйвером, ваше устройство скорее всего не при чем. Если часть вашего приложения работает в ражиме ядра - ищите там. Если только во внешнем кольце, то вы не при чем.
Замечено, что если на этапе енумерации устройство отваливается, то виндюки валятся в перезагрузку без объяснения причин. У меня устройство, успев послать пару дескрипторов уходило в ресет - виндюки падают с некоторой вероятностью (видимо в зависимости от момента).
Цитата(Толик @ Jul 2 2007, 16:22)

А ссылки нужны по самой Windows. В часности почему она позволяет постороннему устройству себя перезагружать и не выдаёт при этом каких-нибудь предупреждений? Да и вообще - почему перезагружается Windows?
Вы не совсем правильно интерпретируете проблему. Винда уходит на перезагрузку не потому, что драйвер ее перегружает, а потому, что в систему возникает критический сбой, который несовсестим с дальнейшим функционированием системы (причем такой, что даже до синего экрана не доходит).
DmitryM
Jul 3 2007, 06:15
Еще есть вариант с серийным номером.
У нас вында перегружалась если поключались два наших HID с одинаковыми серийниками, причем не на всех машинах и системах. (имеется в виду ХР, ХР+SP и т.д.)
ЗЫ. Linux не падал даже если обнаружил два устройства с одинаковыми серийниками.
Почему бы Майкрософт не спросить?
oran-be
Jul 3 2007, 07:45
Подпись "Мелклсофт сорп." такая же виртуализация, как и вся память в РС

На самом деле самая объемная часть системы - это хост контроллер, а его драйвер пишется непосредственно с учетом железа материнки. А кем же пишутся дрова распространенные на Асус или какой нить Элттгруп как не производителями - теми же китайцами? Так что я тоже думаю, что причина в драйвере, в котором не предусмотрен вариант какой-то некорректной ситуации и его писатели не предусмотрели обработчик, который корректно выводит систему из нее. Самое простое убедится в этом - попробовать на другой машине с другим железом. А решение - либо поискать другой драйвер, либо методом тыка обойти некорректные безвыходные ситуации.
Oldring
Jul 3 2007, 08:11
Цитата(oran-be @ Jul 3 2007, 11:45)

Подпись "Мелклсофт сорп." такая же виртуализация, как и вся память в РС

На самом деле самая объемная часть системы - это хост контроллер, а его драйвер пишется непосредственно с учетом железа материнки. А кем же пишутся дрова распространенные на Асус или какой нить Элттгруп как не производителями - теми же китайцами? Так что я тоже думаю, что причина в драйвере, в котором не предусмотрен вариант какой-то некорректной ситуации и его писатели не предусмотрели обработчик, который корректно выводит систему из нее. Самое простое убедится в этом - попробовать на другой машине с другим железом. А решение - либо поискать другой драйвер, либо методом тыка обойти некорректные безвыходные ситуации.
У USB аппаратные интерфейса хостов стандартизованы. Всего три варианта, два для USB 1.1, один - для USB 2.0. Драйвера для них писаны Майкрософтом. Драйвера довольно кривые. Возможно, лучше чем у многого китайского железа - но, тем не менее, багов в них исправлена было очень много. Вообще, с драйверами у Майкрософтов длительное время было плохо - достаточно было порыться в примерах из DDK, чтобы это понять. В последнее время ситуация улучшалась.
Что касается перезагрузки системы при неправильной работе USB устройства - про это слышал давно. Многие драйвера не проверяют корректность работы устройства, считая, что железу можно доверять. Вроде бы, система может слететь даже если USB железяка некорректно выдала строковый дескриптор.
Для отладки может быть полезно подключить kernel debugger через RS-232 и даже поставить checked build операционки.
sergeeff
Jul 3 2007, 11:06
Коллеги!
Пара-тройка замечаний.
1. С высокой степенью вероятности - проблема с железом. При этом единственное, что может помочь - применение аппаратного USB sniffer'a. Но он стоит не мало, да и то не всегда помогает. На at91.com форуме один товарищ делился как-то своими сображениями по этому вопросу.
2. Неоднократно подключал несколько usb с одинаковыми pid, vid, rev и церийными номерами. Все всегда работало. Проблема в селектировании разных устройств. Тут разные серийники и помогают.
3. Надо отнестись к windows как к черному ящику. Миллионы usb устройств с ними работают, значит ошибки в наших устройствах или начих головах.
TailWind
Jul 3 2007, 13:03
Попробуйте увеличить время между одключением и подключением.
Проверте действительно ли оно отключилось:
- Что Windows узнала об этом
- Что с цепей D-, D+ пропали подтягивающие резисторы
- Что обресетился контроллер вашего устройства
Проблема была в том, что были неправильно установлены дескрипторы конечных точек или же они неправильно определялись(и следовательно значения попадали не в те поля в которые надо).
Программа прошивалась в отладочную плату ATMEL'а....
Перезагрузка была как при RESET'е....
Всем спасибо.....
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.