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!

  • \$\begingroup\$ Cross-posted: raspberrypi.stackexchange.com/questions/29664/… \$\endgroup\$
    – fizzle
    Commented Apr 16, 2015 at 12:44
  • \$\begingroup\$ It's not really clear what your question is. Have you read the datasheet? (phytec.eu/fileadmin/user_upload/downloads/Manuals/L-748e.pdf). It lists the maximum clock speed and defines the bitstream. \$\endgroup\$
    – LeoR
    Commented Apr 19, 2015 at 12:23
  • \$\begingroup\$ @LeoR: Thanks for your note. I failed to do my homework badly not reading the datasheet into lot of detail! I went through it again and modified my question accordingly. \$\endgroup\$
    – Kozuch
    Commented Apr 20, 2015 at 8:46

1 Answer 1


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

  • \$\begingroup\$ FPGA exceeds my abilities. Would you have a suggestions on LVDS enabled mainboards that can run Linux besides those PHYTEC boards I mention? Cost is a factor to me partly. \$\endgroup\$
    – Kozuch
    Commented Apr 20, 2015 at 9:10
  • 1
    \$\begingroup\$ I am an FPGA guru. I have no idea about ARM boards. What I do know, though, is that what you want to do is either a complete PITA or impossible in software. A part with the correct port will likely tie it to some sort of DMA engine. You can either get a part that does this internally, or implement that part on an FPGA with a common memory bus or other high speed interface. A good platform might be the ZYNQ as that is a combination of an FPGA and a dual core ARM. \$\endgroup\$ Commented Apr 20, 2015 at 9:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.