A CSI to USB converter

A CSI to USB converter using the CYUSB306x chip.

Similar projects worth following
This is intended to be a CSI to USB bridge that you can connect a sensor and grab uncompressed data using a PC. Mostly intended for camera experiments. The board is in the small Adafruit Feather form factor and exposes as much connections of the Cypress CX3 as it is possible.

The project is built around the Cypress CX3 CYUSB3065 chip with USB3.0 and MIPI CSI interfaces. I've made it in the Adafruit Feather form factor to allow attaching extension modules to it (or vice versa) which makes it versatile.

The USB 3.0 connector is Micro B. I wanted to use USB-C but that requires another chip for the plug reversal handling etc.

There are two camera connectors: 15pin 1mm pitch and 22pin 0.5mm pitch. Both are compatible with RaspberryPi cameras.

One addition is that the camera "GPIO" pins can be connected to various sources using the on-board multiplexers. They can be connected to:

  • CX3 GPIO (out)
  • External board pin
  • MCLK clock output of the CX3

There is also a MOSFET power switch for the camera controlled by the CX3.

The CX3 interfaces like UART, SPI and I2S as well as a few GPIOs are connected to the goldpins. The JTAG debug connector is separate.

What's also interesting is that CX3 chips have outputs for HSYNC, VSYNC and PCLK signals that are recovered from the CSI data stream. These are available on the goldpin connectors as well.

The board can be powered from the USB port or from an external +5V source via one of the goldpins. It also provides the USB power as well as the regulated 3v3 power rail.

  • A log entry

    MatYay01/28/2021 at 19:31 0 comments

    Hi all,

    Unfortinately I haven't made any progress with this project so far. Mostly beacuse I personally do not have any use of such a device for now and I'm occupied by other stuff related to my job. This is the reason why I created this project some time ago and added the board design to it. I'm hoping that if not me then somebody will make the board and start playing with it. I'm currently not planning to do that in the nearest future.

    The things to do are:
     - make and assemble the board
     - write some firmware or port the existing demo from Cypress

    My original idea for this device was for it to work as a USB camera (UVC device class) but with the ability to program the image sensor registers from a host PC. Though I've discovered a major issue with this approach: a UVC device must have video resolution(s) and frame rate(s) stored in its USB descriptor upfront. That kinda rules out any "dynamic" reprogramming of the sensor during runtime. At least not without USB re-enumeration.

    I've been thinking of some other options like:

    1. "minidrivers" - For a specific image sensor you write a driver-like piece of code (a.k.a. minidriver) that gets compiled/linked together with the firmware. The driver would bridge together the device-side UVC requests and the sensor. A major drawback is that this makes the firmware sensor-specific and does not allow low-level sensor reconfiguration.

    2. Custom USB requests for resolution and frame rate setting - The idea is to provide a mechanism to configure resolution(s) and frame rate(s) from a host PC and store them in a non-volatile memory of the device. Then also provide a way to acces sensor registers from the PC. This way parameters of the video stream would be decoupled from the sensor configuration. This is very flexible.

    3. Custom USB protocol - Instead of UVC class implement a custom UVC device that would allow to stream data from the sensor. The drawback here is the need of a custom driver on the PC side as well. This is more work and makes the whole thing non-universal.

  • Current status

    MatYay06/21/2020 at 10:26 0 comments

    For now this is just a hardware design. Haven't assembled it yet (need to gain more experience with soldering BGAs).

    The firmware for that thing is another story. I've made some blinky examples for the Cypress "SuperSpeed Explorer Kit" which has a FX3 chip onboard which is essentially the same as CX3 when it comes to USB3.0 and the CPU.

View all 2 project logs

Enjoy this project?



colabi wrote 12/17/2022 at 04:14 point

what would be required to go all the way?  Project looks great and would serve as a basis for an HDMI capture high speed through hdmi->csi

  Are you sure? yes | no

akohlsmith wrote 10/25/2022 at 16:21 point

The files for this project are not available; I've done FX3 camera work before, and FX2LP general development. The devil's always in the details.

  Are you sure? yes | no

William Steele wrote 05/06/2022 at 12:58 point

It would be interesting to hear from anyone who built and tested this.

  Are you sure? yes | no

MatYay wrote 01/28/2021 at 19:33 point

Hi all. I've updated the project log with the current status. Currently there is the PCB only and yes, it is open source (there is a Github link)

  Are you sure? yes | no

Garrett Brainard wrote 01/25/2021 at 15:34 point

Hello has any progress been made on this project?

  Are you sure? yes | no

jiangred wrote 12/28/2020 at 09:14 point

The layout seem quite good. Have it been assembled and prove to work? I find a similar project which is to interface OV5640, which can be take as a reference, here is the link: 

  Are you sure? yes | no

Avi Cohen wrote 12/26/2020 at 15:09 point

Very Nice work
Is this project opensource 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates