You are here

FX3 boot errors | Cypress Semiconductor

FX3 boot errors

Summary: 2 Replies, Latest post by kalev on 02 Sep 2014 05:24 AM PDT
Verified Answers: 0
Last post
Log in to post new comments.
ValOwnz's picture
1 post



We are using the Fx3 device on one of our boards at a large company and would require some help regarding several issues.

I will now describe in depth our configuration and our problem: 

We have an Fx3 device running the Slave FIFO app in order for a PC to communicate to an FPGA.

We are using the dual boot step - Our driver recognizes the Fx3 and then downloads the custom firmware onto the device. When the device reboots it is recognized by our driver again and is working properly.

We made very little changes to the firmware example provided by Cypress. One of the changes we added was an option to light up a LED using one of the GPIOs when the board is connected to a PC. So we added turning on and off of the LED into the CyFxSlFifoApplnUSBEventCB callback function, depending on the event: we turn on the LED on EVENT_SETCONF and turn it off on DISCONNECT/RESET.

We were using SDK ver 1.1 and this was working fine initially. After we began using this board in our labs we noticed that roughly once every 100 power cycles on average (randomly, can happen after 3 times, 20 or 150), the device was not recognized in the Device Manager in Windows. The LED however, was working. That means that the device was recognized by Windows, the firmware was loaded correctly, began to run, handled the SETCONF event, lit up the LED and then crashed. The device was not showing in Device Manager, unplugging the USB cable (which should turn off the LED) did NOT turn off the LED (meaning the DISCONNECT event was not handled or even not raised) and we could not do anything to recover the device besides power cycling it again. We reproduced this on the Fx3 evaluation kit / development board to rule out any HW issues on our board. 

In order to solve this issue we thought upgrading the SDK to the latest version might fix this problem as we read that there was enumeration problems with older SDK. We tried upgrading our project to the latest SDK, we took the cyfx_gcc_startup.S file from the latest version example, added the reference to cyu3lpp.a in the linker options and managed to compile our project with the latest SDK (using latest example's cyfxtx.c and cyfxgpif_syncsf.h). When we tried to run it, the device was recognized, the firmware was loaded but the device was not showing in Device Manager at all after booting with the custom firmware. This was done again with the development board / evaluation kit.

We tried compiling the Slave FIFO example with the latest SDK and just to get it to show in the Device Manager (We changed just the VID/PID so our driver could be loaded), however even with the original Cypress example code and the evaluation kit development board, after downloading the firmware onto the device the device does not appear in Device Manager. We would be okay with the device showing with some kind of an error in the Device Manager or the driver would be incompatible, however we don't see the device at all, as if it is not connected! Unplugging and plugging the USB cable does nothing. Power cycling the card reproduces the same behaviour - the unprogrammed device is recognized, the firmware is downloaded and the device dissapears from Device Manager.


Please help us fix the boot issues with SDK 1.1 or help us to enable our configuration with the latest SDK and try fixing the boot issues then, if they reproduce.


Thank you very much,


RobK's picture
81 posts


do you set the GPIO for switching LED directly in the USB event-callback which raises the events CY_U3P_USB_EVENT_SETCONF, CY_U3P_USB_EVENT_RESET etc.? Maybe it's worth to create an OS-event and just set it when the USB-event is raised in the callback and set the GPIO outside of the callback-scope in your own thread. I observed, that some CY-API's don't return if they are called in callback-context.

Debugging your firmware would easily show-up the problem, I think.
Maybe you have an USB-analyzer which you could use to check whats going on on USB-wire?




kalev's picture
96 posts


In general, Cypress examples should work. So try few of them without any modification first.

Start with USB 2.0 mode, i.e. plug the device to USB 2.0 port in Host. If it enumerates there then you can assume that FX3 application is OK and theoretically it should work also in USB 3.0 SuperSpeed mode.

But, people have claimed that their devices do not enumerate at USB 3.0 SuperSpeed mode after they have switched to API 1.3.1.

I do not know the reason why version 1.3.1 is most sensitive for them.
But it's clear that there are serious problems in FX3 chip (or API) when it needs to repeat USB packets for recovering from SuperSpeed LINK errors. Something goes wrong there and the result is that SuperSpeed communication breaks (or, device even does not enumerate at all in this mode).

So, in USB 3.0 port, use very short and good USB cable to avoid signal integrity issues. Hopefully unmodified Cypress example works then.

And then go on with modifying Cypress example according your needs.


Log in to post new comments.