EZ-USB® FX1™/FX2™/FX2LP™ Enumerates as “USB Device Not Recognized” with a VID/PID of 0000/0000 – KBA93285

Version: **


Question: What should you do if FX1™/FX2™/FX2LP™ enumerates as “USB Device Not Recognized” with a Vendor ID / Product ID (VID/PID) of 0000/0000?



This error occurs when the host can detect the device but is unable to enumerate it. The Microsoft® USB team has two blog posts on the possible causes and solutions to this error, Why is my USB device not detected or comes up as "Unknown Device"? and What to Try When Your USB Device is an "Unknown Device".

This issue may also occur for the following reasons (specific to FX1/FX2/FX2LP):

  •   The error can result from an issue with the hardware design. There are a number of items to consider when designing a board with USB devices. Please read the application note AN15456 - Guide to a Successful EZ-USB® FX2LP™ Hardware Design for guidelines on how to make a successful USB hardware design.
  •   If the hardware is designed correctly, the enumeration path in your firmware could have a bug. To check if this is the case, you can load a known working firmware (such as any of the CY3684 DVK examples) to your board and check if enumeration is successful. You can also let the device enumerate with the default descriptors (without any firmware) and check if enumeration is successful. If enumeration is not successful, consider the following:  
    •     The bug would be in either the USB descriptors file (dscr.a51) or the control request handling code (in fw.c).
    •     In dscr.a51, the descriptors must be word aligned. Refer to A51 assembler directive for WORD-ALIGNING the descriptor for the assembler directive you can use to word-align the descriptors.
    •     If you have edited fw.c (which is not recommended), make sure that the standard request handlers are kept intact from the original.
    •     There may be an infinite loop in TD_Init() or TD_Poll() which prevents the control request handler (SetupCommand()) from being run.
  •   This error can be observed if the EEPROM has junk data with a valid first byte (0xC0 or 0xC2) or if the firmware is corrupt (in the C2 load).