We want to use our next device (with includes an FX3) with the WinUSB device driver, including the 'WinUSB device' option when using Windows 8.0 and up.
On the DVK, this works fine with a slightly changed SlaveFifoSync sample firmware from the FX3 SDK. It handle the three calls that are necessary in CyFxSlFifoApplnUSBSetupCB.
- The Microsoft OS String Descriptor request
- The Extended Compat ID OS Feature Descriptor (wIndex = 0x04)
- The Extended Properties OS Feature Descriptor (wIndex = 0x05)
For 'Vendor Code' we used either the value 0xAB (which is what Cypress has in its sample) or 0x01 (which is what Microsoft has in its sample). The DVK with this firmware works fine both on Windows 7 and Windows 8.1
Now comes the strange part:
On our prototype, the WinUSB device recognition works fine on Windows 8.1 when using 0x01 as 'Vendor Code'. There is now a problem on Windows 7, the device fails during enumeration.
When using 0xAB as 'Vendor Code', the device works fine on Windows 7, but the WinUSB device recognition on Windows 8.1 does not work.
All this happens using the exact same code that we loaded in the DVK, and which works fine there.
We do not understand how identical code can act differently on both devices, since the connection between PC and FX3 is really straightforward.
Any ideas would be welcome.
Do you have a USB protocol analyzer hardware? You could capture traces of the two failing conditions and analyze to see where exactly the enumeration is going wrong.
What exactly happens when you connect the device in the failure case? Do you see your device in Device Manager?
Does it come up with a valid VID/PID? What error code does it show, if any?
Since you say that all combinations work on the DVK, this could be an issue with the electrical signalling on your board. But you also mentioned that vendor code 0x01 works on 8.1 but not on 7. And vendor code 0xAB works on 7 but not on 8.1. This behvaiour is not consistent to support the board/hardware issue theory.
You could try to experiment with a completely new vendor code. Also try a completely new combination of device vid/pid (basically enumerate it as a totally new device to the PC).
Analyzing USB traces here would be helpful.