USB superspeed peripherals Forum Discussions
Our sensor outputs RAW8 data over 4 lane MIPI CSI-2. To achieve highest transfer rate between MIPI CSI-2 receiver and GPIF II we need to use 24-bit wide transfers, which fully utilize GPIF II input bus. According to page 9 of TRM, the only mode which fully utilizes 24-bit bus is RGB888.
A possible solution to this issue is packing, mentioned on page 10 of TRM:
Packing more than one pixel per PCLK is possible. For example, selecting the “MIPI CSI input -Data format"
configured as "RAW8" and the “MIPI interface configuration – data format” as a 24bit format (RGB888) will
output three pixel data per PCLK.
It's unclear, however, where/how to configure the mentioned "MIPI CSI input -Data format" and "MIPI interface configuration – data format" via the CX3 API. The API has CyU3PMipicsiSetIntfParams() function, which has CyU3PMipicsiCfg_t struct parameter with CyU3PMipicsiDataFormat_t dataFormat field. This makes it possible to only configure a single format, not two different formats.
What CX3 API can I use to configure two different formats to enable packing?
I can think of several possibilities, but none is documented:
Should I use CY_U3P_CSI_DF_RAW8 format in CyU3PMipicsiSetIntfParams(), but set CyU3PMipicsiGpifLoad(CY_U3P_MIPICSI_BUS_24, ...)?
Should I do as above, but also set CX3_CONFIG_CTRL[DATA MODE] register to non-zero value? (what value?)
Should I configure CY_U3P_CSI_DF_RGB888 format for CX3, while the sensor output is sill RAW8?
Please, provide clear instructions.
Thank you in advance.
Show LessI am trying to use the AN75779 example project .I want to display the UVC device in Control Center . So that I can test SensorGetBrightness and SensorSetBrightness.
Show LessHi,
I am working on a project with UVC hardware. I am taking the analog video data from an ADC with an FPGA and send the pixel data to USB FX3 chip. I am using an FPGA board and the ADC board is seperate from this board, they are connected via connectors. LVDS outputs of ADC should be routed differentially on PCB, which is fine because i can do that since i design the ADC board. However, there is a problem, LVDS traces between the FPGA board connectors and FPGA chip should be routed differentially. I was previosly using the FPGA board of Ztex 2.14e, which includes an FPGA chip and Cypress FX3 chip, but this board's IO traces are not routed differentially.
So, here is my question, do you know any alternative FPGA boards which includes an FPGA chip and Cypress FX3 chip? Also, the USB chip should be programmable on this board since i need to use the FX3 chip with UVC hardware.
Show LessI have followed several threads regarding this topic. I see most of them end without clarification that "solutions "worked as there were follow up questions that were never answered.
I have a 1920x1200 sensor running at 45fps which I know surpasses the parallel pixel clk of 100 Mhz. I would like to pack the pixels to a 24bit image. As stated above, I have tried to follow a lot of the threads and tried many of the settings with no success. I'm looking for a little support, with using the EZ USB suite. Will it correct create the c files if setup they way I want (as above) or do I have to massage the settings once it creates them (i.e. frame size, image size, etc.?)
Show Less
Hi
can the FX3 get CSI virtual channel input
What is the maximum CSI clock frequency that should be used per lane in the FX3 configuration utility?
Hi,
I am currently working in a CX3 project which need command an I2C device which has 1 byte address and 1 byte data.
To do that I have implemented a function based on standard function used to communicated with a Image sensor. But changing the preamble structure in order to work correctly with the Data transfer format showed in slave device's data sheet (see the atached picture Data transfer).
*************************************************************************************************
CyU3PReturnStatus_t I2C_SendToSlave(uint8_t slaveAddr, uint8_t regAddr, uint8_t data)
{
CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
CyU3PI2cPreamble_t preamble;
/* Customizacion del Preamble */
preamble.buffer[0] = slaveAddr;
preamble.buffer[1] = regAddr;
preamble.length = 2;
preamble.ctrlMask = 0x0000;
status = CyU3PI2cTransmitBytes(&preamble,&data,1,0);
CyU3PThreadSleep(1);
return(status);
}
*************************************************************************************************
Nevertheless CX3 is not able to command the I2C device. For this reason, I have capture the bus data in Oscilloscope. So, as you can see in the attached figure named i2c1byte CX3 only send the addres device (0x33) but does not send the address or the data. He send '1' all time instead. Moreover, if I make a debug in firmware, it gives me an error code 0x55, and also 0x4A sometimes, when I call the CyU3PI2cTransmitBytes() function.
So I have a couple of questions :
- ¿Is I2C hard core embedded in CX3 able to send 1 byte address and 1 byte data? . If yes, how could I work properly with it?.
- ¿ Have I any issue in the function code? ¿Why I2C bus does not send the address or data?.
Thanks.
Show LessHello,
On Page 5 of the FX3 SDK troubleshooting guide, it says that
The USB driver in the FX3 SDK monitors the number of USB link errors that are detected by the hardware; and causes a re-enumeration when the number of errors crosses a threshold value (about 64 errors) within a 1 second period. This code is not expected to come into play on a functional link, because there will be no more than one or two errors per second happening. If the device is re-enumerating, it is likely that there is a bad USB link due to bad interconnect cables or traces.
My question is that if this threshold (64 errors) can be modified? Or can this re-enumerating be disabled ? We do not want the USB disconnect. The error handle on the bulk/control endpoint seems easier to do than re-enumerating.
Best regards,
Qiu
Show Less
Hello,
I am trying to connect a Cypress Fx3 superspeed kit with a FPGA board using the synchronous slave FIFO 2bit example.
Data TX(FPGA → FX3) using slave FIFO.
However, after started to TX data from the FPGA, Flag A is high and it does not change its value. (FIFO ADDRESS Value 0b00)
And PKTEND# is working but PtoU Call Back function is not working.
I already checked the constraints and board PINs according to the documentation are well.
Do you know any idea in this problem?
epCfg.enable = CyTrue;
epCfg.epType = CY_U3P_USB_EP_BULK;
epCfg.burstLen = 1;
epCfg.streams = 0;
epCfg.pcktSize = 1024;
CyU3PSetEpConfig(CY_FX_EP_PRODUCER, &epCfg);
CyU3PSetEpConfig(CY_FX_EP_CONSUMER, &epCfg);
dmaCfg.size = 1024;
dmaCfg.count = 2;
dmaCfg.prodSckId = CY_FX_PRODUCER_USB_SOCKET;
dmaCfg.consSckId = CY_FX_CONSUMER_PPORT_SOCKET;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg.notification = CY_U3P_DMA_CB_PROD_EVENT;
dmaCfg.cb = CyFxSlFifoUtoPDmaCallback;
dmaCfg.prodHeader = 0;
dmaCfg.prodFooter = 0;
dmaCfg.consHeader = 0;
dmaCfg.prodAvailCount = 0;
CyU3PDmaChannelCreate (&glChHandleSlFifoUtoP,CY_U3P_DMA_TYPE_MANUAL, &dmaCfg);
dmaCfg.prodSckId = CY_FX_PRODUCER_PPORT_SOCKET;
dmaCfg.consSckId = CY_FX_CONSUMER_USB_SOCKET;
dmaCfg.cb = CyFxSlFifoPtoUDmaCallback;
CyU3PDmaChannelCreate (&glChHandleSlFifoPtoU,CY_U3P_DMA_TYPE_MANUAL, &dmaCfg);
#define CY_FX_EP_PRODUCER 0x01 /* EP 1 OUT */
#define CY_FX_EP_CONSUMER 0x81 /* EP 1 IN */
#define CY_FX_PRODUCER_USB_SOCKET CY_U3P_UIB_SOCKET_PROD_1 /* USB Socket 1 is producer */
#define CY_FX_CONSUMER_USB_SOCKET CY_U3P_UIB_SOCKET_CONS_1 /* USB Socket 1 is consumer */
#define CY_FX_PRODUCER_PPORT_SOCKET CY_U3P_PIB_SOCKET_0 /* P-port Socket 0 is producer */
#define CY_FX_CONSUMER_PPORT_SOCKET CY_U3P_PIB_SOCKET_3 /* P-port Socket 3 is consumer */
GPIF 32bit mode and PCLK 100Mhz
clockConfig.cpuClkDiv = 2;
clockConfig.dmaClkDiv = 2;
clockConfig.mmioClkDiv = 2;
clockConfig.useStandbyClk = CyFalse;
clockConfig.clksrc=CY_U3P_SYS_CLK;
status = CyU3PDeviceInit (&clockConfig);
Hello,
I ran into a situation where all the application threads are unresponsive.
Using tx_thread_info_get() in the DMA callback of the CDC interface this is what it looks like:
The Slave_FIFO_sync, main_thread, gpif_thread, usb_thread and Heartbeat threads are all stuck in state 0(active) and unresponsive.
Since FX3 is a single threaded CPU, I'm curious how this can happen?
How can I go about debugging this? Any ThreadX features I can query for details?
Thanks you!
Show Less