You are here

FX3 / CX3 Firmware for Streaming RAW Image Data using Cypress Driver | Cypress Semiconductor

FX3 / CX3 Firmware for Streaming RAW Image Data using Cypress Driver

Summary: 11 Replies, Latest post by lr75021_1526456 on 08 Jul 2016 01:28 AM PDT
Verified Answers: 1
Last post
Log in to post new comments.
mady's picture
Cypress Employee
964 posts

For 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


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.


- Madhu Sudhan

mady's picture
Cypress Employee
964 posts

 Attaching the CX3 firmware

Naz's picture
12 posts

In the 1b) step in order to use non-UVC, should the macro CY_DRIVER be enabled or disabled?

Shakthi's picture
1 post

 Hello Madhu,


We just came across your post and are interested in using CX3 reference code that you have posted.

We are working with OV4685 and CX3 RDK. OV4685 gives out RAW10 video format data. We have started going through your code.

From what I understood, you have modified to code to create a custom USB class instead of using UVC. Please correct me if I am wrong.

Can you please tell us which application you used to capture RAW frames and how did you convert RAW frames to RGB?




mady's picture
Cypress Employee
964 posts

 Hi Shakthi,

Yes you are right. It transfers frames usnig a custom class (using custom cypress driver) instead of UVC.

The host application in this case should be made by the customer's themselves for playing the video. As of now this was just tested using the streamer Application of Cypress which constatly received data and discards them (without attempting to play it as a video).

We are planning to create a RAW video player in the future, but we are yet to comeup with a time line.


- Madhu Sudhan

user_157396590's picture
1 post

Hi Madhu Sudhan ,

You firmware  FX3_RAWData_Cypress Driver and help me a lot. 

I use 0x99 to start stream, and use 0x88 to stop stream. I can get the image via Streamer, but the image's SYNC not correct. Could you help me how to solve this issue, (using UVC header in your firmware, UVC code is perfect, and image is very good. ).

Thanks a lot.




mvillasana_1497601's picture
4 posts

Hello BertYu,

I was wondering if you got the RAW version you mention here ever worked for you, considering this is a post from last year. I would really appreciate any ideas on what you might have done to get it to work.




SKS's picture
1 post

 Hi Madhu Sudhan,

Even we are facing similar kind of issue

We are using OV5640 image sensor to capture RAW data.

We have came accross this post and using CX3_RAWData_Cypress Driver and firmware to stream RAW data. We could send stop/start command without any issue. But while running cypress streamer, after initial few data capture application stops capturing data.

What could be the possible root cause?






rumcajs666's picture
8 posts

Hi everyone,

Good job on releasing this piece of code, Madhu Sudhan:)

I'm currently working with this firmware but i'm facing a serious problem.

Sometimes, very rarely BSOD is occuring. I haven't noticed and correlation with other processes.

Did someone has similar problem?


Sebastian B

Rlasse's picture
2 posts


I'm using a Image Sensor with 12-bit Raw Bayer output and the firmware from this topic to capture the data.

When I start the stream I retrieved the following error:

Error in multichannelcommitbuffer: Code = 71, size = 4000, dmaDone 8

How can I capture the data with the Cypress Streamer? In some cases I get a few successes when I started the Streamer before starting the stream with the vendor cmd 0x99 but then only failures...

Does the host not fast enough read the data?


Best Regards


1919475889_1548226's picture
8 posts


I use CX3_RAWData_Cypress Driver and firmware to stream RAW data.I use Cypress Streamer Application to test the RAW data of OV5640,but the transfer always fails.why?

How can I solve the problem?Thanks a lot.



Log in to post new comments.