USB superspeed peripherals Forum Discussions
I am testing with a couple examples from the FX3 SDK (namely the usb HID Mouse example). I modified the code slightly so that it will continuously send mouse circles, but if I put the computer to sleep, or if I restart the computer the circles stop, and I have to press the gpio button again to re initiate the circles.
My question is what events need to be handled in order to properly handle a sleep or a restart on the host?Show Less
Hi I have a simple application on the FX3 which just turns an LED on, I then shut off my computer and the LED remains on. What should I do if I want the LED to shut off when the computer is off?Show Less
I am using the slave fifo implementation provided with no code changes in what respects the slave fifo.
(only added very little code to implement a few vendor commands to control GPIO lines).
The full application works perfect but sometimes FX3 starts with flag_a low and as a consequence nothing will work afterwards.
The PC aplic at startup reads data to flush all buffers but there no data is available at bulk ep. (actually no data was written to the
slave fifo so there is no reason for the flagA to be low).
This is a somehow rare situation but even so if I reset the FX3 many times I can see this happening a few times.
When this happens the Flag_a actually gets high for about 5us and then goes low and stays there forever.
I am sure that nothing is written to the slave-fifo, as the WE is high all the time, while PCLK has a running clock.
I really wish is to have a way to really reset/initialize the slave fifo to a know initial state.
(on my application I do have a vendor cmd that does a initialization of the FPGA I have connected to the FX3
I would like to add the necessary code lines to be sure I got the slave fifo fully reset too so that I init FPGA and slave-fifo
and stay assured that all is ready to go ).
Is there a programatic way to reset/initialize the slave fifo interface to be sure it gets in the proper state ?
Or is this flag_a low issue a know issue that I can solve somehow ?
Luis C.Show Less
I having problems specifying and sourcing a 52 Mhz CMOS oscillator at 3.3V for the CYUSB3014. Is there a recommended PN? And is there a reference schematic design and layout?
Don't need the extra processing speed now, just trying to future-proof.
Electronics Test EngineerShow Less
I'm fighting with data lost during DMA transfer and totally stuck on two questions... To be sure that received data is monotonic I attached an FPGA which works as a basic counter. FPGA sends to FX3 512 byte blocks, each block filled by 16-bit block number. For example, first 512 bytes of data filled by 0x0000, 2nd 512 bytes filled by 0x0001, 3rd 512 bytes filled by 0x0002 and so on. Verilog source code is below.
output [15:0] DATA,
reg [23:0] counter;
always @(negedge RST or posedge RD)
counter <= 0;
counter <= counter + 24'd1;
assign DATA = counter[23:8];
assign LED = counter;
FX3 GPIF configured as master async device, each DATA_IN action asserts RD output.
dmaCfg.size = 16384;
dmaCfg.count = 1;
dmaCfg.prodSckId = CY_U3P_PIB_SOCKET_0;
dmaCfg.consSckId = CY_U3P_UIB_SOCKET_CONS_1;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg.notification = 0;
dmaCfg.cb = NULL;
dmaCfg.prodHeader = 0;
dmaCfg.prodFooter = 0;
dmaCfg.consHeader = 0;
dmaCfg.prodAvailCount = 0;
As soon as vendor code received data transfer starts with CyU3PGpifSMSwitch() API. Every tyme I'm trying to get exactly 16384 bytes of data through bulk IN EP, no less, no more, because GPIF SM uses LD_DATA_COUNT action and grabs only 8192 words (16384 bytes). But unfortunately sometimes I see a data lost in the MIDDLE of transfer. Sometimes data received correctly, sometimes not. And as I see when data lost happens, it's always happens at the same offset between 0x0008 and 0x0009 words as on the 3rd picture below.
So my first question is what I missed? Should I change something in GPIF or DMA config?Show Less
Sometimes after a manual hard reset (without powering off everything) the boot defaults to USB and the code stored in the eeprom is no longer read.
I did my research an found that for some unknown reason SDA gets low and then the FX3 assumes the i2c bus is in use and default to USB boot.
After that no matter what I do it will stay like this forever and I need to take power off and turn it all back on.
When powering it up all works perfect all the times. It is only if I apply a manual hardware reset with the chip powered that sometimes it locks up in this state.
Is there a way to avoid this situation ?
Luis C.Show Less
Hello, I asked this question two years ago ,
Now is 2020 , I am still waiting for GEN2 Controller....and the newest roadmap shows that FX3GEN2 is still unavailable.
If its possible, could you please give a cue about the detail developing info of FX3GEN2 please?
Thank you.Show Less
Hey guys, I'm trying to config a FPGA via SelectMap mode. And what I did is to use GPIO to emulate a 16-bit parallel IO. It works but the speed is quite slow. The problem might be caused by the multi-threading in the firmware: one thread wait for usb vendor cmd and one thread do the job (here is config the fpga from flash). The two threads have the same priority and preemption disabled with time_slice = 1 as I don't want the main thread stall when the worker thread is working. I'm glad to know if there are ways to speed up the configuration process? It can be achieved from the multi-threading side or the 16-bit parallel IO side. Here is a code snippet:
I am new to USB environment. My aim is to port from windows to android to communicate with hardware peripheral using cypress device.
Windows Device <---> Cypress Device (FX3) <---> Hardware Peripheral
Android Device <---> Cypress Device (FX3) <---> Hardware Peripheral
Established the communication between cypress device and android device using libusb. we are using libcyusb.cpp wrapper file to use libusb functions. I can able to get Handle of an USB(cypress device), PID, VID of the connected device by using libcyusb function calls.
Now i want to communicate with hardware peripheral. In the windows code "CCyUSBEndPoint::XferData" function used to send the data. This function available in CyAPI.cpp file.
Can anyone suggest a function corresponding to that API(CCyUSBEndPoint::XferData) in the libcyusb.cpp file?