Issue while Debugging a PSoC® 3/5 USB Firmware – KBA89230
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Question: When you try to debug a working PSoC® USB firmware, you get the error message "USB Device Not Recognized" on the PC. Why is this happening? What is the solution?
Answer:
This is happening due to the following issue with the ISRs: PSoC sends the descriptors using ISRs. These ISRs are not executed if the PSoC CPU is halted for debugging. Thus, when the PC sends a control request for the descriptors, they are not serviced by the PSoC CPU, which leads to failed enumeration.
To solve this problem: When using the Debug mode in PSoC, the PSoC CPU should be run freely until the device is recognized by the USB host (when the firmware exits the while(!USBFS_1_GetConfiguration()); condition).
The code snippet in the firmware will look like this:
void main() { int i,index=0; /* Enable Global Interrupts */ CyGlobalIntEnable; /* Start USBFS Operation with 3V operation */ USBFS_1_Start(0u, USBFS_1_3V_OPERATION); /* Wait for Device to enumerate */ while(!USBFS_1_GetConfiguration()); /* Enumeration is done, enable OUT endpoint for receive data from Host */ USBFS_1_EnableOutEP(OUT_EP); ...
Here, PSoC can be run step-by-step until the API USBFS_1_Start(). When this API is called it connects the pull-up resistor to the D+ data line, which makes the PC detect the device. After this API, the firmware should be executed freely with a breakpoint on the firmware statement:
USBFS_1_EnableOutEP(OUT_EP);
As this API is hit, you will see that the USB host has detected the PSoC device. Now, you can do the transactions with USBFS while debugging.
-
This widget could not be displayed.Anonymous