USB superspeed peripherals Forum Discussions
I've posted the below query on getting the Monochrome Camera working with FX3 and which is got resolved also.
How-to-get-Monochrome-Camera-stream-working-on-FX3-using-AN75779
We are able to get streaming working on Linux Machine using both FFMPEG and GStreamer Pipelines.
Now, we wanted to get the camera stream working on Windows Laptop.
We first tried to read the frame using the gstreamer from a CLI as follows: gst-launch-1.0 ksvideosrc device-name=FX3 ! video/x-raw, width=640, height=480, format=GRAY8 ! videoconvert ! autovideosink.
This resulted in the following error:
We then tried to stream using an opencv Videocapture application. In this case, it was not ready to open the device itself. At this point I don't know what else I can do. Could anyone please help.??
Looking forward to a positive response.
Show Less
We are trying to interface ov5640 with FX3 through Parallel Interface. We are able to perform I2c communication with Ov5640 using Fx3.
We are trying to use AN75779 reference code.
we are using PWM clock from FX3 to provide ref clock for ov5640.
The board which we are using is from waveshare: https://www.waveshare.com/OV5640-Camera-Board-C.htm
XCLK is set to 24MHz to get accurate results from ov5640 image sensor.
We also took reference code from waveshare which already provides Parallel interface configuration for ov5640, so we utilized it in Fx3 AN75779 reference code. Please refer ov5640cfg_waveshare_stm32.h file for more details.
But we could not able to see any streaming video from Fx3 USB.
Please refer the following document for UART logs
What does this log says, is Frame timer overflow means not even getting data from sensor?
If so can anyone please help me where did I made a mistake, in configurations, I think there is no issues with register settings because, these are provided from waveshare for STM32.
Probably the issue is with FX3 code flow. Can you please tell me where did I made a mistake?
I had modified CyCx3_ImageSensor_Init.
Show Less
Hi Support,
I have a technical question regarding the USB controller (CYUSB3014).
A loopback function is required for USB communication evaluation,
Is there any firmware or setting method for loopback?
The application note states:
9.3.1 USB BULK DATA LOOPBACK EXAMPLE
https://www.infineon.com/dgdl/Infineon-AN75705_Getting_Started_with_EZ-USB_FX3-ApplicationNotes-v11_00-EN.pdf?fileId=8ac78c8c7cdc391c017d073986235e0f
Best regards,
Koki
Show LessOur device uses the FX3 controller chip, running in Windows 10.
The device always comes up with "Cypress FX3 USB BootLoader Device" in Device Manger after system boot up.
Lately, many installations reported seeing "DTU device with FX3" in Device Manager after Windows update.
How do we stop this from happening?
Show Less
Hello everyone,
I am developing a USB3.0 peripheral using FX3. I am currently facing an issue where sometimes USB3.0 is recognized as USB2.0. Is there any way to debug where the problem is? I am using Ubuntu system, but I cannot find any relevant logs in the system log and USB firmware.
Show LessHi,
I have trouble using the GPIF machine of my . Over the endpoint, some packets are lost, and some packets are not sent chronologically
My system uses 3 endpoints, 2 for command exchange with the host, and 1 for data streaming. I also use actively the available UART, using a manual DMA IN and manual DMA OUT.
I have been using my command endpoints fine, and have no known problem using them.
The data streaming endpoint is used with the GPIF machine.
I have a FPGA that sends data over two ports of the GPIF machine, that the GPIF machine send over the USB endpoint.
Data is synchronized using 2 signal : IP, that indicates a packet start, and EP, that indicates a packet end.
See below the GPIF machine I use.
About the configuration part of the Fx3 firmware, I use a multiDmaChannel and a callback to handle data. See below the code snippet that describes both functions.
DMA configuration :
dmaMultiConfig.size = 16384;
dmaMultiConfig.count = 4;
dmaMultiConfig.validSckCount = 2;
dmaMultiConfig.prodSckId [0] = (CyU3PDmaSocketId_t)CY_U3P_PIB_SOCKET_0;
dmaMultiConfig.prodSckId [1] = (CyU3PDmaSocketId_t)CY_U3P_PIB_SOCKET_1;
dmaMultiConfig.consSckId [0] = (CyU3PDmaSocketId_t)(CY_U3P_UIB_SOCKET_CONS_0 | (CY_FX_EP_DSI_STREAM & 0x0F));
dmaMultiConfig.prodAvailCount = 0;
dmaMultiConfig.prodHeader = 0;
dmaMultiConfig.prodFooter = 0;
dmaMultiConfig.consHeader = 0;
dmaMultiConfig.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaMultiConfig.notification = CY_U3P_DMA_CB_PROD_EVENT;
dmaMultiConfig.cb = CyFxUvcApplnDmaCallback;
apiRetStatus = CyU3PDmaMultiChannelCreate (&glChHandleUVCStream, CY_U3P_DMA_TYPE_AUTO_MANY_TO_ONE, &dmaMultiConfig);
DMA callback :
void
CyFxUvcApplnDmaCallback (
CyU3PDmaMultiChannel *chHandle,
CyU3PDmaCbType_t type,
CyU3PDmaCBInput_t *input
)
{
CyU3PDmaBuffer_t dmaBuffer;
CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
if (type == CY_U3P_DMA_CB_PROD_EVENT)
{
/* This is a produce event notification to the CPU. This notification is received upon reception of
* every buffer. The buffer will not be sent out unless it is explicitly committed. The call shall fail
* if there is a bus reset / usb disconnect or if there is any application error.
*/
glUVcProdEvent++;
/* There is a possibility that CyU3PDmaMultiChannelGetBuffer will return CY_U3P_ERROR_INVALID_SEQUENCE here.
* In such a case, do nothing. We make up for this missed produce event by making repeated commit actions
* in subsequent produce event callbacks.
*/
status = CyU3PDmaMultiChannelGetBuffer (chHandle, &dmaBuffer, CYU3P_NO_WAIT);
if (status != CY_U3P_SUCCESS)
{
glUVcGetBufferKo++;
nbSuccErrors++;
}
else
{
nbSuccErrors = 0;
}
if (nbSuccErrors == 2)
{
CyU3PEventSet(&glEvent, FX3_DMA_RESET_EVENT,CYU3P_EVENT_OR);
nbSuccErrors = 0;
}
while (status == CY_U3P_SUCCESS)
{
glUVcGetBufferOk++;
status = CyU3PDmaMultiChannelCommitBuffer (chHandle, dmaBuffer.count, 0);
if (status == CY_U3P_SUCCESS)
{
glUvcCommitBufferOk++;
}
else
{
CyU3PEventSet(&glEvent, FX3_DMA_RESET_EVENT,CYU3P_EVENT_OR);
glUvcCommitBufferKo++;
break;
}
/* Check if any more buffers are ready to go, and commit them here. */
status = CyU3PDmaMultiChannelGetBuffer (chHandle, &dmaBuffer, CYU3P_NO_WAIT);
}
}
}
Using this configuration I try streaming with the host, at low speed, low quantity of data ( < 10 KB/s)
Typically, my FPGA send a Leader packet, then a Payload Packet, then a Trailer Packet. I'm 100% sure packets are sent from FPGA in the right order, and that they are sent.
Using wireshark to capture packet, see the results I have :
Correct packets:
Too fast for GPIF packets:
So here comes my question : Do you have any clue as to why my packets are being scrambled and lost, and how can I solve this issue ?
Thanks !
Bambo
hello, we have developed a complete FX3 driver based on Cypress driver code.
Now, we want to know whether our driver can be used on FX10(4014) peripheral directly?
Show LessIs there any reference code about UAS?
Currently I'm studying for USB msc with EZ USB FX3 board, but it's not easy to find any information about UAS.
I saw a comment from 2 years ago that there is no example code for UAS.
But in the meantime, if someone has experience implementing it, please help me.
Hi,
Looking at the AN75779 and focusing on the Figure 32 (also as attached file) I noticed that DATA and COUNT are 2 different FW counters used to count the number of Bytes written in the DMA Buffer.
My question is the following: is it possible to use a single counter (for example ADDR) and enable the flag:"Reload counter on reaching limit" so that each time it reaches the max value of the DMA_Buffer for socket 0 it automatically resets its value and jump into the other state for socket 1 and vice versa?
Using the ADDR counter for both the DMA_buffer of the sockets and keeping COUNT free, will help me to use COUNT for a different scope in the state machine.
Thanks for the help.
dear team:
apply notebook : Is there a product recommendation for the corresponding specifications?