Difference between revisions of "DIGILENT MIPI-CSI Camera Set"Voipac webshop

From Voipac Wiki
Jump to navigation Jump to search
(Created page with "Category:iMX8M Industrial Development Kit Category:iMX8M Industrial Peripherals <!-- --> <div style="float:right">__TOC__</div> This example uses Raspberry Pi Camera...")
 
 
(19 intermediate revisions by 2 users not shown)
Line 4: Line 4:
 
<div style="float:right">__TOC__</div>
 
<div style="float:right">__TOC__</div>
  
This example uses Raspberry Pi Camera Rev 1.3 (built on OV5647 MIPI sensor) as a test device for CSI Interface. On this page OV5647 sensor integration, settings and usage on i.MX8M processors are shown.<br /><br />
+
[[image:Pcam-5C.png|800px]]<br />
 +
Digilent Pcam 5C is a MIPI-CSI interface, 5 MP Fixed-Focus color camera connected to iMX Development Baseboard
  
'''''Note:''''' There is an issue concerning Raspberry Pi 1.3 cameras and its I2C detected. There might be some camera models that does not get identified.
 
  
== Device detection ==
+
== Kernel detection ==
=== Kernel 4.1 ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
...
+
root@imx8mq-voipac:~# dmesg | grep ov56
camera ov5647_mipi is found
+
[    2.383324] ov5640_mipi 1-003c: No pin available
...
+
[    2.387976] ov5640_mipi 1-003c: No sensor pwdn pin available
 +
[    2.393683] ov5640_mipi 1-003c: No sensor reset pin available
 +
[    2.399479] ov5640_regulator_enable: cannot get io voltage error - err:-517
 +
[    3.018132] ov5640_mipi 1-003c: No pin available
 +
[    3.033972] ov5640_mipi 1-003c: No sensor pwdn pin available
 +
[    3.046488] ov5640_mipi 1-003c: No sensor reset pin available
 +
[    3.062091] ov5640_mipi 1-003c: 1-003c supply DVDD not found, using dummy regulator
 +
[    3.072436] ov5640_mipi 1-003c: 1-003c supply AVDD not found, using dummy regulator
 +
[    4.325257] mxc-mipi-csi2_yav 30b60000.mipi_csi: Registered sensor subdevice: ov5640_mipi 1-003c
 +
[    4.337288] ov5640_mipi 1-003c: Camera is found
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Kernel 3.14 ===
+
== I2C detection ==
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
...
+
root@imx8mq-voipac:~# i2cdetect -y 1
camera ov5647_mipi is found
+
            0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
mxc_v4l2_master_attach: ipu(0:0)/csi(1:0)/mipi(1:0) doesn't match
+
        00:         -- -- -- -- -- -- -- -- -- -- -- -- --
mxc_v4l2_master_attach: ipu0:/csi1 mipi attached ov5647_mipi:mxc_v4l2_cap1
+
        10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
ERROR: v4l2 capture: slave not found!
+
        20: -- -- -- UU -- -- -- UU -- -- -- -- -- -- -- --
...
+
        30: -- -- -- -- -- -- -- -- -- -- -- -- UU UU -- --
 +
        40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
        50: -- UU -- UU -- -- -- -- -- -- -- -- -- -- -- --
 +
        60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
        70: -- -- -- -- -- -- -- --
 +
        root@imx8mq-voipac:~#
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== I2C detect ==
+
==Gstreamer==
CSI connector uses I2C2 to communicate with cameras. OV5647 sensor is located at 0x36 address:
+
===Capture single JPEG picture===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
root@imx6s-tinyrex:~# i2cdetect -y 1
+
root@imx8mq-voipac:~# gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video1 ! jpegenc ! filesink location=sample_image_digi.jpeg
    0 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
+
Setting pipeline to PAUSED ...
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
+
Pipeline is live and does not need PREROLL ...
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
Setting pipeline to PLAYING ...
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
New clock: GstSystemClock
30: -- -- -- -- -- -- UU -- -- -- 3a -- -- -- -- --
+
[ 1023.907274] ov5640_mipi 1-003c: s_stream: 1
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
[ 1024.609769] skip frame 1
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
Got EOS from element "pipeline0".[ 1026.497200] ov5640_mipi 1-003c: s_stream: 0
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
70: -- -- -- -- -- -- -- --  
 
</syntaxhighlight>
 
 
 
== GPIO control ==
 
GPIO pins are controlled by the camera driver and access to these pins is blocked. Power on signal is recognised as GPIO 74, LED GPIO has number 54.<br /><br />
 
 
 
LED located on camera module can be tested by temporarily disabling mipi kernel module and toggling corresponding GPIO pin:
 
<syntaxhighlight lang="bash">
 
root@imx6s-tinyrex:~# modprobe -r ov5647_camera_mipi
 
root@imx6s-tinyrex:~# echo 54 > /sys/class/gpio/export
 
root@imx6s-tinyrex:~# echo out > /sys/class/gpio/gpio54/direction
 
root@imx6s-tinyrex:~# echo 1 > /sys/class/gpio/gpio54/value
 
root@imx6s-tinyrex:~# echo 0 > /sys/class/gpio/gpio54/value
 
root@imx6s-tinyrex:~# echo 54 > /sys/class/gpio/unexport
 
root@imx6s-tinyrex:~# modprobe ov5647_camera_mipi
 
</syntaxhighlight>
 
 
 
== Modules listing ==
 
=== Kernel 4.1 ===
 
<syntaxhighlight lang="bash">
 
root@imx6-tinyrexmax:~# lsmod
 
Module                  Size  Used by
 
mxc_v4l2_capture      27624  2
 
ipu_bg_overlay_sdc      5385  1 mxc_v4l2_capture
 
ipu_still              2331  1 mxc_v4l2_capture
 
ipu_prp_enc            5903  1 mxc_v4l2_capture
 
ipu_csi_enc            3904  1 mxc_v4l2_capture
 
ipu_fg_overlay_sdc      6130  1 mxc_v4l2_capture
 
ov5647_camera_mipi_int    30566  0
 
adv7610_video          6373  0
 
v4l2_int_device        2872  4 ov5647_camera_mipi_int,adv7610_video,ipu_csi_enc,mxc_v4l2_capture
 
mxc_dcic                6528  0
 
</syntaxhighlight>
 
 
 
=== Kernel 3.14 ===
 
<syntaxhighlight lang="bash">
 
root@imx6s-tinyrex:~# lsmod
 
Module                  Size  Used by
 
mxc_v4l2_capture      28532  1
 
ipu_bg_overlay_sdc      5401  1 mxc_v4l2_capture
 
ipu_still              2528  1 mxc_v4l2_capture
 
ipu_prp_enc            5943  1 mxc_v4l2_capture
 
ipu_csi_enc            3863  1 mxc_v4l2_capture
 
ipu_fg_overlay_sdc      6217  1 mxc_v4l2_capture
 
ov5647_camera_mipi    30906  0
 
v4l2_int_device        2930  2 ov5647_camera_mipi,mxc_v4l2_capture
 
mxc_dcic                6569  0
 
evbug                  1875  0
 
</syntaxhighlight>
 
 
 
== Resolution setting ==
 
=== 1280x960 ===
 
<syntaxhighlight lang="bash">
 
echo 0 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
</syntaxhighlight>
 
 
 
=== 1280x720 ===
 
<syntaxhighlight lang="bash">
 
echo 1 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
</syntaxhighlight>
 
  
=== 1920x1080 ===
+
Execution ended after 0:00:03.075026264
<syntaxhighlight lang="bash">
+
Setting pipeline to PAUSED ...
echo 2 > /sys/bus/i2c/devices/1-0036/ov5647_mode
+
Setting pipeline to READY ...
 +
Setting pipeline to NULL ...
 +
Freeing pipeline ...
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== 640x480 ===
+
The image stored in local media with name sample_image_digi.jpeg
<syntaxhighlight lang="bash">
 
echo 3 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
</syntaxhighlight>
 
  
=== 1024x768 (default) ===
+
===Video preview===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
echo 4 > /sys/bus/i2c/devices/1-0036/ov5647_mode
+
root@imx8mq-voipac:~# GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video1 ! 'video/x-raw,framerate=30/1' ! autovideosink
</syntaxhighlight>
+
Setting pipeline to PAUSED ...
 +
Pipeline is live and does not need PREROLL ...
 +
Setting pipeline to PLAYING ...
 +
New clock: GstSystemClock
 +
0:00:00.817426914  433 0xaaaacb3d5c00 DEBUG            GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb4873c0 (GstVideoMeta) of size 112
 +
0:00:00.817551951  433 0xaaaacb3d5c00 DEBUG            GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb487440 (GstVideoMeta) of size 112
 +
0:00:00.817603069  4[ 1575.384649] ov5640_mipi 1-003c: s_stream: 1
 +
33 0xaaaacb3d5c00 DEBUG            GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb4874c0 (GstVideoMeta) of size 112
 +
0:00:00.817651068  433 0xaaaacb3d5c00 DEBUG            GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb487540 (GstVideoMeta) of size 112
 +
[ 1576.002044] skip frame 1
  
=== 960x720 ===
+
CAPTURE INTERRUPTION:
<syntaxhighlight lang="bash">
 
echo 5 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
</syntaxhighlight>
 
  
=== 640x480 (narrow angle of view) ===
+
[ 1582.847027] ov5640_mipi 1-003c: s_stream: 0
<syntaxhighlight lang="bash">
 
echo 6 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
</syntaxhighlight>
 
  
== Gstreamer ==
+
Execution ended after 0:00:08.249177743
=== Capture single JPEG picture ===
+
Setting pipeline to PAUSED ...
<syntaxhighlight lang="bash">
+
Setting pipeline to READY ...
echo 2 > /sys/bus/i2c/devices/1-0036/ov5647_mode
+
0:00:08.326703325  433 0xaaaacb468180 DEBUG            GST_BUFFER gstbuffer.c:1448:gst_buffer_is_memory_range_writable: idx 0, length -1
gst-launch-1.0 v4l2src device="/dev/video1" num-buffers=1 ! video/x-bayer,width=1920,height=1080,framerate=30/1 ! bayer2rgb ! videoconvert ! jpegenc ! filesink location=sample_1920_1080.jpeg
+
0:00:08.326764524  433 0xaaaacb468180 DEBUG            GST_BUFFER gstbuffer.c:1448:gst_buffer_is_memory_range_writable: idx 0, length -1
</syntaxhighlight>
+
0:00:08.326792003  433 0xaaaacb468180 DEBUG            GST_BUFFER gstbuffer.c:1448:gst_buffer_is_memory_range_writable: idx 0, length -1
 +
Setting pipeline to NULL ...
 +
Total showed frames (78), playing for (0:00:08.249372377), fps (9.455).
 +
Freeing pipeline ...
  
=== Video preview ===
 
<syntaxhighlight lang="bash">
 
echo 2 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
gst-launch-1.0 v4l2src device="/dev/video1" ! video/x-bayer,width=1920,height=1080,framerate=30/1 ! queue ! bayer2rgb ! videoconvert ! fbdevsin
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
<syntaxhighlight lang="bash">
+
Video should be displayed on video output (hdmi or lvds display)
echo 3 > /sys/bus/i2c/devices/1-0036/ov5647_mode
 
gst-launch-1.0 v4l2src device="/dev/video1" ! video/x-bayer,width=640,height=480,framerate=15/1 ! bayer2rgb ! videoconvert ! fbdevsink
 
</syntaxhighlight>
 

Latest revision as of 18:06, 18 February 2025

Pcam-5C.png
Digilent Pcam 5C is a MIPI-CSI interface, 5 MP Fixed-Focus color camera connected to iMX Development Baseboard


Kernel detection

root@imx8mq-voipac:~# dmesg | grep ov56
[    2.383324] ov5640_mipi 1-003c: No pin available
[    2.387976] ov5640_mipi 1-003c: No sensor pwdn pin available
[    2.393683] ov5640_mipi 1-003c: No sensor reset pin available
[    2.399479] ov5640_regulator_enable: cannot get io voltage error - err:-517
[    3.018132] ov5640_mipi 1-003c: No pin available
[    3.033972] ov5640_mipi 1-003c: No sensor pwdn pin available
[    3.046488] ov5640_mipi 1-003c: No sensor reset pin available
[    3.062091] ov5640_mipi 1-003c: 1-003c supply DVDD not found, using dummy regulator
[    3.072436] ov5640_mipi 1-003c: 1-003c supply AVDD not found, using dummy regulator
[    4.325257] mxc-mipi-csi2_yav 30b60000.mipi_csi: Registered sensor subdevice: ov5640_mipi 1-003c
[    4.337288] ov5640_mipi 1-003c: Camera is found

I2C detection

root@imx8mq-voipac:~# i2cdetect -y 1
             0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
        00:          -- -- -- -- -- -- -- -- -- -- -- -- --
        10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        20: -- -- -- UU -- -- -- UU -- -- -- -- -- -- -- --
        30: -- -- -- -- -- -- -- -- -- -- -- -- UU UU -- --
        40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        50: -- UU -- UU -- -- -- -- -- -- -- -- -- -- -- --
        60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        70: -- -- -- -- -- -- -- --
        root@imx8mq-voipac:~#

Gstreamer

Capture single JPEG picture

root@imx8mq-voipac:~# gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video1 ! jpegenc ! filesink location=sample_image_digi.jpeg
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[ 1023.907274] ov5640_mipi 1-003c: s_stream: 1
[ 1024.609769] skip frame 1
Got EOS from element "pipeline0".[ 1026.497200] ov5640_mipi 1-003c: s_stream: 0

Execution ended after 0:00:03.075026264
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

The image stored in local media with name sample_image_digi.jpeg

Video preview

root@imx8mq-voipac:~# GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video1 ! 'video/x-raw,framerate=30/1' ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:00.817426914   433 0xaaaacb3d5c00 DEBUG             GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb4873c0 (GstVideoMeta) of size 112
0:00:00.817551951   433 0xaaaacb3d5c00 DEBUG             GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb487440 (GstVideoMeta) of size 112
0:00:00.817603069   4[ 1575.384649] ov5640_mipi 1-003c: s_stream: 1
33 0xaaaacb3d5c00 DEBUG             GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb4874c0 (GstVideoMeta) of size 112
0:00:00.817651068   433 0xaaaacb3d5c00 DEBUG             GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaaacb487540 (GstVideoMeta) of size 112
[ 1576.002044] skip frame 1

CAPTURE INTERRUPTION:

[ 1582.847027] ov5640_mipi 1-003c: s_stream: 0

Execution ended after 0:00:08.249177743
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
0:00:08.326703325   433 0xaaaacb468180 DEBUG             GST_BUFFER gstbuffer.c:1448:gst_buffer_is_memory_range_writable: idx 0, length -1
0:00:08.326764524   433 0xaaaacb468180 DEBUG             GST_BUFFER gstbuffer.c:1448:gst_buffer_is_memory_range_writable: idx 0, length -1
0:00:08.326792003   433 0xaaaacb468180 DEBUG             GST_BUFFER gstbuffer.c:1448:gst_buffer_is_memory_range_writable: idx 0, length -1
Setting pipeline to NULL ...
Total showed frames (78), playing for (0:00:08.249372377), fps (9.455).
Freeing pipeline ...

Video should be displayed on video output (hdmi or lvds display)