EDM-IMX95 VLS3 Camera Usage Guide
  • 08 Apr 2025
  • 4 Minutes to read
  • Dark
    Light
  • PDF

EDM-IMX95 VLS3 Camera Usage Guide

  • Dark
    Light
  • PDF

Article summary

Introduction

This article guides you how to set up media control framework before using VLS camera on the EDM-IMX95 EVM board.
Most of the settings have been explained in EDM-IMX95 TEVS Camera Usage Guide. If there are any unclear parts, please refer to it.


Supported Camera Modules

Camera Series

Products

VLS3

VLS3-AR0144

VLS3-AR0145

VLS3-AR0234

VLS3-AR0521

VLS3-AR0522

VLS3-AR0522

VLS3-AR0821

VLS3-AR0822

VLS3-AR1335


Overview


Prepare associated accessories and setting up

TechNexion present a IMX95-EVM kit with FPD-Link III SerDes. Each CSI interface can connect up to 4 channels, that means IMX95-EVM can streaming achieve to 8 cameras at the same time.

CSI2 switch

Don’t forget to set the SW2 “ON“ to enable when using CSI2 connector.

  1. Prepare Vizionlink-COAX1 cable, it can support up to 15 meters.


Prepare Yocto demo image for testing VLS cameras

Prepare demo image contains the required device tree blobs and camera drivers to probe FPD-Link III SerDes. It can be available for download via TechNexion's server.

Image Download Link:
Supported Release List

Demo image prepare 2 DTB support FPD-Link III SerDes and 8 VLS cameras with different LVDS panel. This article will take 8 camera connections as an example.

  • imx95-edm-evm-fusion-lvds-vl10112880.dtb

  • imx95-edm-evm-fusion-lvds-vl156192108.dtb

So far mainline driver cannot automatically detect and remove unused channels, and the DTB describes which ports should be physically connected accordingly.
You can modified it via DTB source code and build a new one.

kernel version:

This article base on Yocto 5.0 (Scarthgap) 2025Q2 Release, the Linux kernel version is 6.6.52_2.2.0.


Instructions for test VLS camera

Specify camera DTB in u-boot

  1. Connect debug console cable to  carrier board.

  2. Power on the board , and enter in u-boot prompt mode.
    (keep hit enter when the "Hit any key to stop autoboot : " is shown.)

  3. Specify camera dtb via fdtfile u-boot environment variable.

    # with 10.1 inch LVDS panel
    u-boot=> setenv fdtfile imx95-edm-evm-fusion-lvds-vl10112880.dtb
    # with 15.6 inch LVDS panel
    u-boot=> setenv fdtfile imx95-edm-evm-fusion-lvds-vl156192108.dtb
  4. Continue boot process.

    u-boot=> saveenv
    u-boot=> boot

Setup the media controller before camera streaming

We can check whether camera have been link via media control command.

$ media-ctl -p

Get the media controller information and transfer to image, here is 8 VLS3 cameras with FPD-Link III SerDes :

Modify the route through the “crossbar” and enable all the channel :

media-ctl -R "'crossbar' [2/0 -> 5/0 [1], 2/1 -> 6/0 [1], 2/2 -> 7/0 [1], 2/3 -> 8/0 [1], 3/4 -> 9/0 [1], 3/5 -> 10/0 [1], 3/6 -> 11/0 [1], 3/7 -> 12/0 [1]]"

Set the route

media-ctl -R "'crossbar' [2/0 -> 5/0 [1], 2/1 -> 6/0 [1], 2/2 -> 7/0 [1], 2/3 -> 8/0 [1], 3/4 -> 9/0 [1], 3/5 -> 10/0 [1], 3/6 -> 11/0 [1], 3/7 -> 12/0 [1]]" 
media-ctl -R '"ds90ub960 1-0030" [0/0 -> 4/0 [1], 1/0 -> 4/1 [1], 2/0 -> 4/2 [1], 3/0 -> 4/3 [1]]' 
media-ctl -R '"ds90ub960 2-0030" [0/0 -> 4/4 [1], 1/0 -> 4/5 [1], 2/0 -> 4/6 [1], 3/0 -> 4/7 [1]]' 
media-ctl -R '"csidev-4ad30000.csi" [0/0 -> 1/0 [1], 0/1 -> 1/1 [1], 0/2 -> 1/2 [1], 0/3 -> 1/3 [1]]' 
media-ctl -R '"csidev-4ad40000.csi" [0/4 -> 1/4 [1], 0/5 -> 1/5 [1], 0/6 -> 1/6 [1], 0/7 -> 1/7 [1]]' 
media-ctl -R '"4ac10000.syscon:formatter@20" [0/0 -> 1/0 [1], 0/1 -> 1/1 [1], 0/2 -> 1/2 [1], 0/3 -> 1/3 [1]]' 
media-ctl -R '"4ac10000.syscon:formatter@120" [0/4 -> 1/4 [1], 0/5 -> 1/5 [1], 0/6 -> 1/6 [1], 0/7 -> 1/7 [1]]'

Set the link

media-ctl -l "'ds90ub960 1-0030':4 -> 'csidev-4ad30000.csi':0 [1]" 
media-ctl -l "'ds90ub960 2-0030':4 -> 'csidev-4ad40000.csi':0 [1]"

Set resolution to 1280×720.

#!/bin/bash

# Define the format and resolution as a variable
MEDIA_FMT="UYVY8_1X16/1280x720"

# Function to run media-ctl commands with error handling
run_media_ctl() {
    local cmd="$1"
    echo "Running: $cmd"
    if ! $cmd; then
        echo "Error: Command failed: $cmd"
    fi
}

# Configure crossbar devices
echo "Configuring crossbar devices..."
for i in {0..3}; do
    run_media_ctl "media-ctl -V 'crossbar':2/$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done
for i in {4..7}; do
    run_media_ctl "media-ctl -V 'crossbar':3/$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done

# Configure mxc_isi devices (endpoint 0)
echo "Configuring mxc_isi devices (endpoint 0)..."
for dev in {0..7}; do
    run_media_ctl "media-ctl -V 'mxc_isi.$dev':0 [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done

# Configure formatter@20 endpoints
echo "Configuring formatter@20 endpoints..."
for i in {0..3}; do
    run_media_ctl "media-ctl -V '4ac10000.syscon:formatter@20':0/$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done
# Configure formatter@120 endpoints
echo "Configuring formatter@120 endpoints..."
for i in {4..7}; do
    run_media_ctl "media-ctl -V '4ac10000.syscon:formatter@120':0/$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done

# Configure csidev-4ad30000.csi endpoints 0-3
echo "Configuring csidev-4ad30000.csi endpoints 0-3..."
for i in {0..3}; do
    run_media_ctl "media-ctl -V 'csidev-4ad30000.csi':0/$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done
# Configure csidev-4ad40000.csi endpoints 4-7
echo "Configuring csidev-4ad40000.csi endpoints 4-7..."
for i in {4..7}; do
    run_media_ctl "media-ctl -V 'csidev-4ad40000.csi':0/$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done

# Configure ds90ub960 buses (1 and 2) with endpoints 0-3
echo "Configuring ds90ub960 buses..."
for bus in 1 2; do
    for i in {0..3}; do
        run_media_ctl "media-ctl -V 'ds90ub960 $bus-0030':$i [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
    done
done

# Configure ds90ub953 buses (1 and 2) with addresses 44-47 (endpoint 0)
echo "Configuring ds90ub953 buses..."
for bus in 1 2; do
    for addr in 44 45 46 47; do
        run_media_ctl "media-ctl -V 'ds90ub953 $bus-00$addr':0 [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
    done
done

# Configure tevs buses (8-15) with endpoint 0
echo "Configuring tevs buses..."
for bus in {8..15}; do
    run_media_ctl "media-ctl -V 'tevs $bus-0048':0 [fmt:$MEDIA_FMT field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]"
done

Start camera video stream via gstreamer

Specify the capture device you just get and start gstreamer to get video stream on screen.

$ gst-launch-1.0 v4l2src device=/dev/videoX ! "video/x-raw, format=YUY2, width=1280, height=720" ! waylandsink sync=false


Was this article helpful?