#define UVC_APPLICATION causes error 997

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
roMo_4201811
Level 2
Level 2
First like received

In cycx3_uvc.h, I comment the line "#define UVC_APPLICATION"  so that I can use streamer to get data from the OV5640 imager.. In streamer the endpoint shows up as expected, but when I use USB control center to send the enable commands  as described in the test procedure in cycx3_uvc.h, all I get is "error 997" when sending the vendor commands. Can you help me get it working?

0 Likes
1 Solution
lock attach
Attachments are accessible only for community members.

Hello,

Please send zero length packet. Refer to the snapshot attached.

Regards,

Rashi

Regards,
Rashi

View solution in original post

0 Likes
10 Replies
Rashi_Vatsa
Moderator
Moderator
Moderator
5 likes given 500 solutions authored 1000 replies posted

Hello,

Are you using the firmware from here FX3 / CX3 Firmware for Streaming RAW Image Data using Cypress Driver ?

What are number of bytes that you are sending, the direction of the transfer. Can you share the snapshot of control center while sending the vendor commands.

Regards,

Rashi

Regards,
Rashi
0 Likes

Hi Rashi,

I was using a different project from the forums that achieved bulk transfer (instead of UVC) by commenting out a define in cycx3_uvc.h like this:

//define UVC_APPLICATION

However, I tried with the project you suggested (CX3 firmware for streaming raw image data) and I am getting the same result - error 997. Snapshots of USB control center and Streamer are shown below:

pastedImage_0.png

pastedImage_2.png

0 Likes
lock attach
Attachments are accessible only for community members.

Hello,

Please send zero length packet. Refer to the snapshot attached.

Regards,

Rashi

Regards,
Rashi
0 Likes

Hi Rashi,

Thank you - that fixed the error 997.

Now it streams, but I get both successes and failures showing up in streamer. When I plug the USB cable through a 2.0 USB analyzer I get all successes (streaming is slowed down).

Any thoughts why failures at the higher speed?

pastedImage_0.png

0 Likes

Hi Rashi,

Further investigation shows that failures appear in Streamer when using a USB 3.0 port, but NOT when using a USB 2.0 port. I also noticed that the failure rate tracks with the Streamer settings "Pkts per xfer" and "Xfers to Queue".

With USB 3.0, there are no failures when Pkts per xfer/Xfers to Que are set to 128/16, but failures start  appearing when set to 128/32 and get worse with higher settings.

With USB 2.0 there are no failures on any Pkts/2Que setting.

What causes failures to occur with USB 3.0?

0 Likes

Hello,

Please let me know the DMA buffer size, DMA buffer count and burst that you are using in the firmware.

Regards,

Rashi

Regards,
Rashi
0 Likes

Here is the buffer size from cycx3_uvc.h:

#define CX3_UVC_DATA_BUF_SIZE                   (0x6000)        /* DMA Buffer Data Size Used: 24576 Bytes*/

#define CX3_UVC_PROD_HEADER                     (0)            /* UVC DMA Buffer Header Size */

#define CX3_UVC_PROD_FOOTER                     (0)             /* UVC DMA Buffer Footer Size */

I don't know where to find the dma buffer and count. Please advise.

0 Likes
lock attach
Attachments are accessible only for community members.

Hello,

It would be helpful if you share your firmware with us.

I have attached the snippets of the fields i am asking for. Please check with your firmware and share them.

The details i need is DMA buffer count (uvc.c), Burst length (endpoint) (uvc.c and dscr.c  ( In Superspeed descriptors)).

Try increasing the burst length. Maximum is 15

For this you need to makes changes companion descriptor of BULK endpoint  and also in the endpoint configuration (as in snippets)

    /* Configure the video streaming endpoint. */

    endPointConfig.enable   = 1;

    endPointConfig.epType   = CY_U3P_USB_EP_BULK;

    endPointConfig.pcktSize = CY_FX_EP_BULK_VIDEO_PKT_SIZE;

    endPointConfig.isoPkts  = 1;

    endPointConfig.burstLen = 16;

    endPointConfig.streams  = 0;

    apiRetStatus = CyU3PSetEpConfig (CY_FX_EP_BULK_VIDEO, &endPointConfig);

    if (apiRetStatus != CY_U3P_SUCCESS)

    {

        /* Error Handling */

        CyU3PDebugPrint (4, "USB Set Endpoint config failed, Error Code = %d\n", apiRetStatus);

        CyFxAppErrorHandler (apiRetStatus);

    }

Regards,

Rashi

Regards,
Rashi
0 Likes

I tried increasing the burst length to 15 as you suggested and it did not fix the failures in streamer on one PC, but I ran it on a laptop and there were no failures. Consider the problem fixed. Note - you stated maxlen was 15 but the code has 16, which is correct?

  endPointConfig.burstLen = 16;

0 Likes

Hello,

Thank you for the update.

The burst length is max 15 for endpoint companion descriptor (counts  0 as first packet)  . But the field endPointConfig.burstLen  defined as Maximum burst length in packets. This needs to be specified as the number of packets per burst and not as "burst length - 1" as in the case of the Super Speed Companion descriptor. This is why it is defined as 16.

Regards,

Rashi

Regards,
Rashi
0 Likes