Hi, this is Martin Borve from the USB team. In the previous blog, I gave a detailed description on how the device gets enumerated by the core USB stack and reported to the OS. In this post, I’m going to summarize which incorrect hardware behaviors during enumeration causes the core stack to abandon the device and which ones lead to reporting the device as “Unknown Device”.
Device is not enumerated
There are several reasons why a USB device may not enumerate at all when it is attached to a USB port. Assuming the connect change was detected by the USB hub driver, the following events will cause the device to not be enumerated at all:
- The USB device failed to stabilize during the debounce period.
- An overcurrent event occurred during enumeration.
- A port disconnect event occurred during enumeration.
- The port is reported as suspended after a successful port reset.
“Unknown Device” in Device Manager due to Enumeration failure
Update Oct. 14, 2011: We have posted some more solutions in What to Try When Your USB Device is an “Unknown Device”
In most cases when enumeration fails the hub driver will still report the arrival of a device to Windows. In these cases the USB device will appear as “Unknown Device” in Device Manager, and will have a Device ID of “USB\VID_0000&PID_0000” and a Hardware ID and Compatible ID of “USB\UNKNOWN”. The following events will cause the USB hub driver to enumerate a USB device as an “Unknown Device”:
- A port reset request timed out during enumeration.
- The Set Address request for the USB device failed.
- The request for the USB device’s Device Descriptor request failed.
- The USB Device Descriptor was malformed and failed validation.
- The request for the Configuration Descriptor failed.
- The USB Configuration Descriptor was malformed and failed validation.
On Windows 7, devices that failed enumeration will be marked with failure Code 43 in the device manager.
On downlevel OS, namely Vista, the device manager may not have a failure code. So the way to detect enumeration failure is to look at the Hardware ID in the detail property page (right click on the device and select Properties and then look click on Details tab) of the device in the device manager. If the ID is USB\VID_0000&PID_0000 then the failure is during enumeration.
“Unknown Device” in Device Manager due to Unavailable driver
There is a second reason why a device would come up as “Unknown Device” in the device manager even if the enumeration was successful. This happens when the device doesn’t provide a Product ID string during enumeration and the system is not able to find a matching INF for the device to install a driver. In this case, the device will be marked with failure Code 28 in the device manager.
You may be able to get the driver downloaded and installed from the Windows Update site by right clicking on the device in the device manager and selecting “Update Driver Software” option and then selecting “Search automatically for updated driver software.”