USB superspeed peripherals Forum Discussions
I'm using FX3 with FPGA instead of Image sensor. To debug some issue, I am trying to get UART logs, but not able to.
Any pointer that would help.
Show LessHow hexa decimal value assigned for below in cyfxuvcdscr.c? Is reference available?
/* Interface Association Descriptor */
/* Standard Video Control Interface Descriptor */
/* Class specific VC Interface Header Descriptor */
/* Input (Camera) Terminal Descriptor */
/* Processing Unit Descriptor */
/* Extension Unit Descriptor */
/* Output Terminal Descriptor */
/* Video Control Status Interrupt Endpoint Descriptor */
/* Super Speed Endpoint Companion Descriptor */
/* Standard Video Streaming Interface Descriptor (Alternate Setting 0) */
/* Class specific Uncompressed VS format descriptor */
/* Class specific Uncompressed VS frame descriptor */
Thanks
Esakki
Show LessHi All,
I am looking for a MJPEG firmware example with the OV5640 sensor, please share the example.
Please refer to Cypress 001-90369_AN90369_How_to_Interface_a_MIPI_CSI-2_Image_Sensor_With_EZ-USB_CX3.pdf pp.28
thanks
Akeem
Show LessDear Sir,
I want to reset my board by calling CyU3PDeviceReset(CyFalse); as said by API explaination, CyFalse is for cold reset, but it doesn't work.
I have to press reset button on the board(connected with reset pin), then my board works like POR reset.
Can you give me some advice?
Best regards.
David
Show LessHi
we have used an FX3 and Type a Male connector before, There we have swapped an RX and TX lines in the connector to Fx3.
This time we have used a Type A receptacle (Female), Here we have to swap the RX and TX pins or not?
This Type A receptacle is connected to the PC (Like UVC output) by male to male Cable.
Thanks.
Show Lessthe USB3 vision example from the frum is combined with FX3 UVC camera design to bring about USB3 vision camera solution. the DMA channel glChHandleDCICmd and glChHandleDCIRsp are both initiated in routine CyFxUSB3VisionApplnInit, glChHandleDCICmd as input, glChHandleDCIRsp as output. I can get first U3V packet message from host, then give back the response message to host, but the host can't get the packet. I check up the method to send DMA packet, it succeeds.
apiRetStatus = CyU3PDmaChannelCommitBuffer(&glChHandleDCIRsp, (CCD.length+12), 0);
if(apiRetStatus != CY_U3P_SUCCESS)
{
CyU3PDebugPrint(1,"\r\n CyU3PDmaChannelCommitBuffer failed for glChHandleDCIRsp, error = %x",apiRetStatus);
CyFxAppErrorHandler(apiRetStatus);
}
I test the USB3 vision example attched in the frum ticket(after some update the code), it can work with u3v meesages. why can't it work in my code? I create and configure them just as what to do in the u3v example.
dmaChannelCfg.size = 1024;
dmaChannelCfg.count = 2; /* No buffers allocated. We will only use the SetupSend API. */
dmaChannelCfg.prodSckId = CY_U3P_CPU_SOCKET_PROD;
dmaChannelCfg.consSckId = CY_U3P_UIB_SOCKET_CONS_0 | (CY_FX_EP_DCI_RSP & 0x0F);
dmaChannelCfg.prodAvailCount = 0;
dmaChannelCfg.prodHeader = 0;
dmaChannelCfg.prodFooter = 0;
dmaChannelCfg.consHeader = 0;
dmaChannelCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaChannelCfg.notification = 0;
dmaChannelCfg.cb = NULL;
apiRetStatus = CyU3PDmaChannelCreate (&glChHandleDCIRsp, CY_U3P_DMA_TYPE_MANUAL_OUT, &dmaChannelCfg);
if (apiRetStatus != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "Debug Response channel create failed, Error code = %d\n", apiRetStatus);
CyFxAppErrorHandler (apiRetStatus);
}
apiRetStatus = CyU3PDmaChannelSetXfer (&glChHandleDCIRsp, 0);
if (apiRetStatus != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "Debug channel SetXfer failed, Error code = %d\n", apiRetStatus);
CyFxAppErrorHandler (apiRetStatus);
}
Show LessHi all,
I am trying to read the PWM pulse where ON time ranges to 10us and OFF time ranges to 80us. In CX3 , using the simple GPIO interrupt as both edges and complex gpio for reading the GPIO timer. During ON time read the GPIO timer using the CyU3PGpioComplexSampleNow and do the same during the OFF interrupt. By subtracting the OFF time with ON time am not getting the expected ON time value. My doubt is using the GPIO timer can we read the PWM pulse where ON time is 10us?? If the ON time is 40us above we can able to read the time correctly. Below is the simple GPIO and complex GPIO configuration. The SYS_CLK_PLL is 403.2 MHz.
//Clock configuration
gpioClock.fastClkDiv = 10;
gpioClock.slowClkDiv = 10;
gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2;
gpioClock.clkSrc = CY_U3P_SYS_CLK_BY_4;
gpioClock.halfDiv = 0;
status = CyU3PGpioInit(&gpioClock, EsGpioInputIntrCb);
if( status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "\n\rSee3CAM_CU30 AppInit:GPIOInit Err = 0x%x",status);
// CyCx3AppErrorHandler(status);
}
//Complex GPIO
status = CyU3PDeviceGpioOverride(25, CyFalse);
if (status != 0)
{
/* Error Handling */
CyU3PDebugPrint(4, "PAN_GPIO override failed, error code = %d\n", status);
}
/* Configure DUMMY_COMPLEX_GPIO as static mode output*/
complex_gpioConfig.outValue = CyFalse;
complex_gpioConfig.inputEn = CyFalse;
complex_gpioConfig.driveLowEn = CyTrue;
complex_gpioConfig.driveHighEn = CyTrue;
complex_gpioConfig.pinMode = CY_U3P_GPIO_MODE_STATIC;
complex_gpioConfig.intrMode = CY_U3P_GPIO_INTR_TIMER_ZERO;
complex_gpioConfig.timerMode = CY_U3P_GPIO_TIMER_LOW_FREQ;
complex_gpioConfig.timer = 0;
complex_gpioConfig.period = 0x7fffffff;
complex_gpioConfig.threshold = 0x7fffffff;
status = CyU3PGpioSetComplexConfig(25, &complex_gpioConfig);
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "CyU3PGpioSetComplexConfig failed, error code= %d\n" ,status);
}
//Simple GPIO
/* GPIO 17 as interrupt enabled for both edge */
status = CyU3PDeviceGpioOverride (17, CyTrue);
if (status != CY_U3P_SUCCESS)
CyU3PDebugPrint(4, "\n\resUVCGpioInit DeviceGpioOverride failed, error code = %d", status);
gpioConfig.outValue = CyTrue;
gpioConfig.driveLowEn = CyFalse;
gpioConfig.driveHighEn = CyFalse;
gpioConfig.inputEn = CyTrue;
gpioConfig.intrMode = CY_U3P_GPIO_INTR_BOTH_EDGE;
status = CyU3PGpioSetSimpleConfig(17, &gpioConfig);
if (status != CY_U3P_SUCCESS)
CyU3PDebugPrint(4, "\n\resUVCGpioInit SetSimpleConfig failed, error code = %d", status);
// GPIO Interrupt
//High Event
glreadHsyncONStop=0;
CyU3PGpioComplexSampleNow(25,&glreadHsyncONStop);
glontime=glreadHsyncONStop;
glcurrentvalue1=glontime-glofftime;
glreadBuffer1[glHsyncCount]=glcurrentvalue1;
glHsyncCount++;
//Low Event
glreadHsyncONStop=0;
CyU3PGpioComplexSampleNow(25,&glreadHsyncONStop);
glofftime=glreadHsyncONStop;
glcurrentvalue=glofftime-glontime;
glreadBuffer[glHsyncCount1]=glcurrentvalue;
glHsyncCount1++;
Will print the timer value once the glHsyncCount1 reaches 50 in another thread.
Show LessHello,
We're bringing up a CX3 based design (USB boot) and the board comes up as an "unrecogized device" in windows device explorer. Once in a while, it will
enumerate as "Cypress FX3 USB Bootloader Device", but the Cypress Control Center does not show it and I cannot download firmware.
Some board details:
- USB Boot (checked PMODE pins and they are at the right state)
- Power supply voltages OK
- 19.2 MHz external oscillator with an external buffer. The single buffer output drives both CLKIN and REFCLK. Waveforms look OK on scope
- CLKIN_32 not used - input is grounded.
- USB type C connector - we have a mux for the USB3 signals, but this should not matter since for USB boot, the USB2 D+/D- are used instead.
Any ideas what to try next? I have a reference design board and it enumerates correctlty in USB boot mode so I am fairly sure its not a windows/driver issue.
Thanks!
p.s has Cypress terminated the free schematic review service? https://www.cypress.com/welcome-cypress-schematic-review-service
the link at the bottom of this page no longer works.
Show Lessafter 9 years, I wonder if they have got solution for this or not, I've try to download my code but it shows: "Programming failed". This message appears when I do something wrong in my code or just because of USB control center tool
Show LessFor Image formats that are not supported by the UVC, (like RAW), the attached firmares can be used as reference (FX3 and CX3 firmwares attached)
The main difference between the UVC firmwares and the firmware attached below are:
(i) Vendor Commands are used to Start and Stop streaming rather than UVC Class Specific Control requests. Vendor command 0x99 is sent from PC to start the streaming. Vendor command 0x88 is for stopping the streaming in these firmwares.
(ii) These firmwares have normal Cypress Descriptors enabling the Device to bind to Cypress Driver (cyusb3.sys) unlike the UVC Firmwares that have UVC Descriptors and bind to UVC Drivers.
(iii) No UVC Headers are added to the Image data.
(iv) No memory is allocated for UVC Headers or footers during DMA Channel Creation
(v) The data streaming with the attached firmware can be tested using Cypress Streamer Application
Note:
1a) In the FX3 firmware attached below, the sensor.c and sensor.h files are incomplete without any sensor configuration values. The user has to fill those files with the values of his/her sensor. Cypress would provide comple sensor.c and sensor.h files for MT9M114 sensor, provided the customer requests for the same via Cypress tech support along with an NDA signed with Aptina.
1b) In the FX3 firmware, enable the macro "#define CY_DRIVER" in uvc.h for the firmware to toggle between UVC and Non-UVC (raw) applications
2a) The CX3 firmware attached below uses the OV5640 sensor and the sensor configuration is also done in the firmware (without exposing the actual register values written). Though the OV5640 gives out YUY data, it is treated as RAW data and can be streamed to the host. (for testing purpose only. In the actual implementation, OV5640 settings are replaced by the original RAW Streaming sensor)
2b) In the CX3 firmware, enable the macro "#define RAW" in cycx3_uvc.h file to switch between UVC and Non-UVC (raw) firmwares.
Regards,
- Madhu Sudhan
Show Less