- 08 Apr 2025
- 4 Minutes to read
- Print
- DarkLight
- PDF
EDM-IMX95 VLS3 Camera Usage Guide
- Updated on 08 Apr 2025
- 4 Minutes to read
- Print
- DarkLight
- PDF
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
Prepare Yocto demo image for testing VLS cameras
Instructions for test VLS camera
Start camera video stream via gstreamer
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.
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
Connect debug console cable to carrier board.
Power on the board , and enter in u-boot prompt mode.
(keep hit enter when the "Hit any key to stop autoboot : " is shown.)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
Continue boot process.
Setup the media controller before camera streaming
We can check whether camera have been link via media control command.
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]"
#!/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