Serial LVDS camera interface

bit ratecamerainterfacelvds

I am interested in using the greyscale version (VM-010-BW-LVDS) of this camera module:

VM-010: phyCAM-S camera module, WVGA monochrome

I want to use the camera with external trigger (in snapshot mode) and use a very low resolution. I need to acquire images from the camera in my C++ computer vision code in Debian Linux. I need to connect the camera to a specific ARM mainboard which has various IOs (I2C, UART, SPI) but unfortunately no dedicated LVDS port, so I think of using board's GPIO pins instead. The mainboard is available in two revisions – 1 and 4 core CPU ranging from 700-900 MHz. The GPIO has been speed-tested to be able to generate a 14 MHz (or 22 MHz in with -O3 compiler optimization flag) square wave in C. The GPIO provides either zero or 3.3V.

There is a camera datasheet available. For LVDS it specifies the data bitstream (8+2 bits) and data frequency the board accepts (13-27 MHz).

Things I do not understand:

  • Is the ARM mainboard fast enough to be able to read the data bitstream from the camera on its GPIO besides to generating the clock signal? I can dedicate the whole mainboard only to the camera task and use Linux real-time kernel.
  • I probably need at least some minimal circuity to convert the 0/3.3V GPIO voltage to the LVDS 1.2V+-0.2V differential. Any suggestions here?
  • The datasheet talks about LVDS deserialization. Can I do everything in C++ or do I need additional circuit for this (LVDS deserializer, driver etc.)?
  • The datasheet also says: "Pixel clock is transferred as an embedded signal in the LVDS
    stream. It is recovered by the LVDS deserializer." I do not understand this too but it probably is related to the previous point.
  • Camera configuration is done over I2C, but detailed info seems to be missing in the datasheet (modifying the registers etc.).

The company offers its own Linux ARM mainboards with dedicated LVDS ports to connect the camera. It may help to get one of those mainboards and try to reverse-engineer some stuff or maybe even use their binaries if they are compatible. Thanks for any help in advance – it is highly appreciated!

Best Answer

This requires dedicated hardware. I would suggest finding a different part with the correct port or using an FPGA.