We've encounter an odd issue when interfacing with a Windows OS (7 / 8 / 10). When a device is first plugged into a Windows computer, the enumeration will fail every time. If we disconnect and reconnect, enumeration completes and the device is recognized forever.
Our investigation has reviled two things. First is that this only happens if the device is configured as a USB 2.0 device. Secondly, we can see in a trace that the command that hangs the enumeration process is 0x03 followed by 0xEE. Looking this up, we found an article on this OS descriptor request on MSDN:
Our understanding is that the code should respond with a Stall.
We find that this appears to lock up the state machine on the STM side, as it stops responding to any enumeration queries once this command is sent. The OS eventually gives up and states that the device could not be installed.
We've see this on multiple STM micro controllers, which is why we believe it's a library issue, and not unique to the hardware. We have a product using a STM32F072 and another using STM32F401V, both showing the first enumeration issue. The reason we need to solve this is that in a production environment, we are concerned that every time we assemble a unit to a new PC, we will have to unplug and replug in the units, causing an unnecessary slow down.
I haven't been able to locate the exact code where the 0x03 request would be processed. Even this information would be very helpful in nailing down this issue.
Thanks for reading