none
Vendor specific USB device (not storage) enumerate fine in win7, but fails in win10..? RRS feed

  • Question

  • Hi,

    Vendor specific USB device (not a storage) USB 2 specific enumerate fine in win7, which enumerate under EHCI

    Connection path for device: 
    Intel(R) 8 Series/C220 Series USB EHCI #1 - 8C26
    Root Hub
    Generic USB Hub
    Port: 6

    Running on: Windows 7 with Service Pack 1

    --------------------------------------------------------------------------------------

    but when i connect same device under win 10 Host, which has only USB 3 hub where device descriptor fails enumerate under xHCI

    Connection path for device: 
    USB xHCI Compliant Host Controller
    Root Hub
    USB\Vendor_0000_Product_0000 Port: 1

    Running on: Windows 10 or greater

    where, windows has stopped this device because it has reported problems. (Code 43)

    A request for the USB device descriptor failed.

    and can't able to view VID and PID which is wrong.

    Hope xHCI  have backward capability for USB2 even though its fails..

    Reference:

    https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-faq--introductory-level#do-i-have-to-rewrite-my-client-driver-to-support-usb-30-devices

    Thanks in advance for your help

    Thursday, February 28, 2019 3:35 AM

All replies

  • Have you put a USB analyzer between your device and the system and ensured that the device is meeting the USB spec? If so, please post the descriptors

     -Brian


    Azius Developer Training www.azius.com Windows device driver, internals, security, & forensics training and consulting. Blog at www.azius.com/blog

    Thursday, February 28, 2019 7:30 PM
    Moderator
  • DescriptorDump in win7
    Information for device (VID=0x0ADF PID=0x1000):

    Connection Information:

    Device current bus speed: FullSpeed
    Device address: 0x0001
    Current configuration value: 0x01
    Number of open pipes: 2

    Device Descriptor:

    0x12 bLength
    0x01 bDescriptorType
    0x0200 bcdUSB
    0x00 bDeviceClass
    0x00 bDeviceSubClass
    0x00 bDeviceProtocol
    0x40 bMaxPacketSize0 (64 bytes)
    0x0ADF idVendor
    0x1000 idProduct
    0x0100 bcdDevice
    0x01 iManufacturer 
    0x02 iProduct 
    0x00 iSerialNumber
    0x01 bNumConfigurations

    Configuration Descriptor:

    0x09 bLength
    0x02 bDescriptorType
    0x0020 wTotalLength (32 bytes)
    0x01 bNumInterfaces
    0x01 bConfigurationValue
    0x04 iConfiguration
    0xC0 bmAttributes (Self-powered Device)
    0x05 bMaxPower (10 mA)

    Interface Descriptor:

    0x09 bLength
    0x04 bDescriptorType
    0x00 bInterfaceNumber
    0x00 bAlternateSetting
    0x02 bNumEndPoints
    0xFF bInterfaceClass (Vendor specific)
    0x0A bInterfaceSubClass
    0xFF bInterfaceProtocol
    0x05 iInterface

    Endpoint Descriptor:

    0x07 bLength
    0x05 bDescriptorType
    0x01 bEndpointAddress (OUT endpoint 1)
    0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
    0x0040 wMaxPacketSize (64 bytes)
    0x00 bInterval

    Endpoint Descriptor:

    0x07 bLength
    0x05 bDescriptorType
    0x82 bEndpointAddress (IN endpoint 2)
    0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
    0x0040 wMaxPacketSize (64 bytes)
    0x00 bInterval

    Microsoft OS Descriptor is not available. Error code: 0x0000001F

    String Descriptor Table

    Index LANGID String
    0x00 0x0000 0x0409 
    0x01 0x0409
    0x02 0x0409 
    0x04 0x0409 
    0x05 0x0409


    Connection path for device: 
    Intel(R) 8 Series/C220 Series USB EHCI #1 - 8C26
    Root Hub
    Generic USB Hub
    Port: 6

    Running on: Windows 7 with Service Pack 1

    Brought to you by TDD v2.11.0, Mar 26 2018, 09:54:50


    but when i connect same device under win 10 Host, which has only USB 3 hub where device descriptor fails enumerate under xHCI
    DescriptorDump in win10
    Information for device USB\Vendor_0000_Product_0000:

    Connection Information:

    Device current bus speed: FullSpeed
    Device supports USB 1.1 specification
    Device supports USB 2.0 specification
    Device address: 0x001E
    Current configuration value: 0x00
    Number of open pipes: 0

    Device Descriptor:

    0x12 bLength
    0x01 bDescriptorType
    0x0200 bcdUSB
    0x00 bDeviceClass
    0x00 bDeviceSubClass
    0x00 bDeviceProtocol
    0x40 bMaxPacketSize0 (64 bytes)
    0x0000 idVendor
    0x0000 idProduct
    0x0000 bcdDevice

    0x00 iManufacturer
    0x00 iProduct
    0x00 iSerialNumber
    0x00 bNumConfigurations

    Microsoft OS Descriptor is not available. Error code: 0x00000002

    String Descriptor Table

    Index LANGID String


    Connection path for device: 
    USB xHCI Compliant Host Controller
    Root Hub
    USB\Vendor_0000_Product_0000 Port: 1

    Running on: Windows 10 or greater

    Brought to you by TDD v2.11.0, Mar 26 2018, 09:54:50

    Friday, March 1, 2019 9:44 AM
  • Try looking at it with USBView, which is part of the WDK. Post a screen shot of your device's USBView data

     -Brian


    Azius Developer Training www.azius.com Windows device driver, internals, security, & forensics training and consulting. Blog at www.azius.com/blog


    Friday, March 1, 2019 9:33 PM
    Moderator
  • Hi Brian,

    In USBview getting only part of descriptor in win 10

    

    Thursday, March 7, 2019 1:58 AM
  • If the device descriptors cannot be queried, there is a very fundamental problem with your device and how it communicates. The fastest way to find the problem is to put a USB analyzer (e.g. LeCroy) in between the device and the host. It will flag the problems immediately. You could try enabling Windows USB diagnostics, but it may not tell you much because USB host controllers expect correct operation from devices and have limited ability to perform diagnosis.

     -Brian


    Azius Developer Training www.azius.com Windows device driver, internals, security, & forensics training and consulting. Blog at www.azius.com/blog

    Thursday, March 7, 2019 2:47 AM
    Moderator
  • USB xHCI and USB3 Hubs are backward compatible.

    The problem is in your device firmware not handling correctly the enumeration phase.

    According to your descriptor dump, only the first 8 bytes are valid. This is a common issue as early USB host implementations used to retreive the first 8 bytes to get the EP0 max packet size and then re-issue a request to get th full descriptor with the correct maxpacket length rogrammed in the Host.

    In your firmware, you should check the expected length announced in the GET_DESCRIPTOR Request. If it is 64, then you must return the full descriptor. If it is 8, then you must return only the first 8 bytes and be prepared to receive a new GET_DESCRIPTOR request with the correct length later.

    Thursday, March 7, 2019 8:51 AM