В этой статье приведено описание ситуации, когда некорректное поведение устройства USB приводит его отбрасыванию кодом ядра операционной системы Windows, результате чего появляется "неизвестное устройство" (Unknown Device) - перевод статьи [1], автор Martin Borve. См. также подробное описание процесса энумерации устройства стеком USB операционной системы [2].
[Устройство не прошло энумерацию]
Есть несколько причин, почему устройство USB может быть не опознано (оно не прошло энумерацию), когда было подключено в порт USB. Предположим, что драйвером хаба USB было обнаружено изменение состояния подключения, тогда следующие события могут привести к отказу в энумерации устройства:
• Устройство USB не застабилизировалось (не успело начать работать) за период подавления дребезга (debounce period). • При энумерации было превышение лимита потребляемого тока (overcurrent event). • Во время процедуры энумерации произошло событие отключения (disconnect event). • О состоянии порта сообщается, что он приостановлен (suspended) после успешного сброса порта (port reset).
["Неизвестное устройство" в Диспетчере Устройств из-за неудачной энумерации]
В большинстве случаев, когда энумерация терпит неудачу, драйвер хаба все еще сообщает операционной системе Windows о присутствии подключенного устройства. При этом устройство USB появится в дереве объектов Device Manager как "Unknown Device", и получит идентификатор устройства (Device ID) в виде "USB\VID_0000&PID_0000" и идентификатор аппаратуры (Hardware ID) и идентификатор совместимости (Compatible ID) как "USB\UNKNOWN". Следующие события заставят драйвер хаба USB перечислять (enumerate) устройство USB как "Unknown Device":
• Во время энумерации вышел таймаут запроса на сброс порта (port reset request). • Запрос установки адреса (Set Address request) для устройства USB завершился с ошибкой. • Запрос получения дескриптора устройства USB (request USB Device Descriptor) завершился с ошибкой. • Прочитанный дескриптор устройства (USB Device Descriptor) имеет неправильный формат и не прошел проверку. • Запрос получения дескриптора конфигурации (request Configuration Descriptor) завершился с ошибкой. • Прочитанный дескриптор конфигурации (USB Configuration Descriptor) имеет неправильный формат и не прошел проверку. • В операционной системе Windows 7 устройства, которые не прошли энумерацию, будут помечены кодом ошибки 43 (failure Code 43) в Диспетчере Устройств.
В промежуточной версии операционной системы, которая носит имя Vista, в Диспетчере Устройств может и не быть кода ошибки. Так что обнаружить ошибку энумерации можно, если посмотреть Hardware ID на закладке странице Сведения, если посмотреть подробную информацию об устройстве - в Диспетчере Устройств сделайте правый клик на устройстве, и выберите (Properties) и затем кликните на закладку Details (Подробнее, или Сведения). Если ID будет USB\VID_0000&PID_0000, то произошла ошибка в процессе энумерации.
["Неизвестное устройство" в Диспетчере Устройств из-за недоступного драйвера]
Это вторая причина, почему может появиться "Unknown Device" в Диспетчере Устройств, даже если энумерация прошла успешно. Это произойдет, когда устройство при энумерации не предоставило (известную) строку идентификатора продукта (Product ID), и система не может найти подходящий INF-файл для устройства, чтобы установить драйвер. В этом случае устройство будет помечено в Диспетчере Устройств кодом ошибки 28 (Code 28).
Вы можете попробовать загрузить и установить драйвер с помощью сайта Windows Update, если в Диспетчере Устройств сделаете правый клик на устройстве, и выберете опцию "Update Driver Software" (обновить драйверы...), и затем выбрать "Search automatically for updated driver software" (Автоматический поиск обновленных драйверов).
[Ссылки]
1. Why is my USB device not detected or comes up as "Unknown Device"? site:blogs.msdn.com. 2. Как стек USB производит энумерацию устройства. |