USB superspeed peripherals Forum Discussions
Hi,
I am planning to use FX3 to convert UVC USB3 packets to native Video (YUV 422) format. Is it possible to use FX3 for this application?
If yes, Does anybody have any reference design to start with?
With Regards,
Bhat
Show LessHello,
We developed a custom camera and created a CX3 project using the Eclipse project wizard. This is a custom raw data bulk streaming project and is not a UVC project. Watching the USB transactions with a USB protocol analyzer, we never see EP3 bursting. All the transactions deliver a data payload of 1024 bytes only.
Below are snippets of the CX3's channel create function, and the USB descriptor for bursting (I have replaced the manifest constants with the actual values):
dmaCfg.size = 0x8000;
dmaCfg.count = 3;
status = CyU3PDmaMultiChannelCreate (&glChHandleUVCStream, CY_U3P_DMA_TYPE_MANUAL_MANY_TO_ONE , &dmaCfg);
// Super Speed Endpoint Companion Descriptor
0x06, // Descriptor size
CY_U3P_SS_EP_COMPN_DESCR, // SS Endpoint Companion Descriptor Type
0x0F, // Max number of packets per burst: 16
0x00, // Attribute: Streams not defined
0x00, // No meaning for bulk
0x00
As a reference, we have a FX3 product that we tested on the exact same USB port. With our FX3 product we see bursts of 16KB for the data payload. The FX3 DMA configuration is the same as the CX3 except that the FX3 is a one-to-one socket DMA channel, and it's also setup as CY_U3P_DMA_TYPE_AUTO.
Questions:
- What would prevent the CX3 transactions from bursting over USB?
Thank you.
Show LessHello
I'm Juyeol.
I plan to make the FPGA Configuration using GPIF master mode.
I have a question during fw coding, so please contact us.
Currently, I am using only the output value after deleting the input from the GPIF designer tool that has been uploaded(AN87216 Master mode).
Control Center provided by cypress, there are Control Endpoint and Bulk Out Endpoint. When I take an oscilloscope, data goes out from the Bulk Out Endpoint but not from the Control Endpoint, but I wonder if the two are different.
I think settings are same..
Thanks.
if ((bTarget == CY_U3P_USB_TARGET_ENDPT) && (bRequest == CY_U3P_USB_SC_CLEAR_FEATURE)
&& (wValue == CY_U3P_USBX_FS_EP_HALT))
{
if ((wIndex == CY_FX_EP_PRODUCER) || (wIndex == CY_FX_EP_CONSUMER))
{
if (glIsApplnActive)
{
CyU3PDmaChannelReset (&glChHandleBulkLpUtoP);
CyU3PUsbFlushEp(CY_FX_EP_PRODUCER);
CyU3PUsbFlushEp(CY_FX_EP_CONSUMER);
CyU3PUsbResetEp (CY_FX_EP_PRODUCER);
CyU3PUsbResetEp (CY_FX_EP_CONSUMER);
CyU3PDmaChannelSetXfer (&glChHandleBulkLpUtoP, CY_FX_DMA_TX_SIZE);
CyU3PUsbStall (wIndex, CyFalse, CyTrue);
isHandled = CyTrue;
}
}
}
Show LessWhere do I find the linux command line tool to download firmware to fx3 when enumerating as 04b4:00f3?
Hello,
I tried to build a camera & sensor system using CYUSB306x and camera (MIPI) , sensors (UART) and BLDC Motor & Control board (I2C)
Using this system, I want to receive video data and sensor data at the same time , and control BLDC motor .
To achieve this purpose, i would like to have the hardware configuration as shown in the attached figure.
Is it possible to use CYUSB306x like this?
Show LessMy understanding is that DMA buffers must be 16B-aligned (32B if data cache is enabled) and the DMA functionality will not return a buffer via CyU3PDmaChannelGetBuffer() unless the buffer is full -or- the GPIF II state machine has issued a INTR_CPU, which permits the CPU to terminate the transfer early via CyU3PDmaChannelSetWrapUp().
I'm working with a 8-bit synchronous data bus (FX3 on both sides, one as M and one as S) and at times need to do 4B reads/writes for short status packets. Is there any way to accomplish this in a single function call (i.e. synchronously) without requiring INTR_CPU? Or, barring that, can that single function spin waiting on the INTR_CPU handler to set a volatile flag indicating the transfer can be wrapped up? I'm not sure if the GPIF event callback can preempt a thread function in the FX3 environment.
I tried to accomplish this requirement with other interfaces like CY_U3P_PIB_GPIF_INGRESS_DATA() / CY_U3P_PIB_GPIF_EGRESS_DATA() but those appear to only transfer one bus-width of data (1B in my case) and I need to move 4B in a single transfer. I was also unable to get the CyU3PGpifWriteDataWords() / CyU3PGpifReadDataWords() interfaces to work for this, as they too seem to only move 1B successfully. All the available examples I could find for those also only show them moving one word at a time.
Show LessHello,
I have an application that uses an fx3 with the slave fifo (same source code as per the example provided, with minor additions for some vendor commands,
while dma buffers and all USB stuff was left untouched).
My application works fine but occasionally (quite rare) I have an hangup and the trace on the serial debug shows:
CyU3PDmaChannelCommitBuffer failed, Error code = 64
I would like to understand what this really means, or even more important, what can I be doing wrong that causes this.
The problem is that when this happens it get stuck with flag_A low and I cant figure out a way to get out of this state besides a full switch off
and restart all over again (which is a very inconvenient recover... this is to work on remotely placed systems).
I would like to stress that besides these rare occurrences the system can stay working well for hours without issues.
Now it getting frustrating... if I want to find the problem it insists in working well and if I decide to use it it insists to fail
(in reality this problem is lurking around since the very beginning of this project of mine...)
I don't even know where to begin... what is this error and what may be a possible cause,
any help ?
Many thanks.
Luis.
Show LessI have a FX3S design which functions like a camera and can operate in a recording mode (when USB is disconnected) and in mass storage mode (when USB is connected).
During the mass storage mode the recorded data can be read from the SD.
During the recording mode the CPU uses a AUTO DMA channel to pass the data from the PIB (GPIF) to the SD. Besides this the CPU can also use a MANUAL_IN and MANUAL_OUT DMA channel to pass 512 command bytes from PIB to the CPU memory and from the CPU memory to PIB. This all functions without any problem when USB is disconnected.
When the recording mode is used (for debugging) when the USB is connected, the data is not passed on to the SD but to an USB bulk IN endpoint. The 512 command bytes can also be transferred back and forth between CPU and PIB using the same DMA channels as in the USB disconnected state. This MANUAL_IN DMA transfer using CyU3PDmaChannelSetupRecvBuffer however only works when connected to a USB3.0 superspeed PC port, and not when connected to a USB2.0 highspeed PC port.
In the case of the highspeed connection the DMA status (using CyU3PDmaChannelGetStatus) remains in 0x4 (= CY_U3P_DMA_CONS_OVERRIDE). In case of a superspeed connection everything works fine and the 512 bytes are transferred.
What is changed within the FX3 or FX3S regarding to the DMA from PIB to CPU when using highspeed compared to superspeed?
Show LessIs there a reference schematic connecting the FX3 and the Micro-B SuperSpeed (3.x) connector?
OTG is unused, so can I leave it unconnected?
Thanks,
Tetsuo
Show Less