FX3 boot errors | Cypress Semiconductor
FX3 boot errors
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,