Difference between revisions of "VEYE CS Camera on Forlinx i.MX8 board/zh"

From wiki_veye
Jump to navigation Jump to search
Line 113: Line 113:
 
<code>[    6.150181] mx8-img-md: created link [veyecam2m 1-003b] => [mxc-mipi-csi2.1]</code>
 
<code>[    6.150181] mx8-img-md: created link [veyecam2m 1-003b] => [mxc-mipi-csi2.1]</code>
  
<br />
+
可以看到在i2c-1上识别到了VEYE-MIPI-IMX327S。
 +
 
 +
正确识别摄像头后,会生成/dev/video0设备节点。
 +
 
 +
* 列出摄像头支持的数据格式
 +
 
 +
<code>v4l2-ctl --list-formats-ext -d /dev/video0</code>
 +
 
 +
<code>ioctl: VIDIOC_ENUM_FMT</code>
 +
 
 +
<code>        Type: Video Capture Multiplanar</code>
 +
 
 +
<code>        [0]: 'RGBP' (16-bit RGB 5-6-5)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [1]: 'RGB3' (24-bit RGB 8-8-8)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [2]: 'BGR3' (24-bit BGR 8-8-8)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [3]: 'YUYV' (YUYV 4:2:2)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [4]: 'YUV4' (32-bit A/XYUV 8-8-8-8)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [5]: 'NV12' (Y/CbCr 4:2:0)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [6]: 'YM24' (Planar YUV 4:4:4 (N-C))</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [7]: 'XR24' (32-bit BGRX 8-8-8-8)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
<code>        [8]: 'AR24' (32-bit BGRA 8-8-8-8)</code>
 +
 
 +
<code>                Size: Discrete 1920x1080</code>
 +
 
 +
事实上,该摄像头仅提供 UYVY 数据格式,而 i.MX 8M Plus 中的 ISI 模块提供了数据格式转换功能,因此 /dev/video0 有这么多的输出格式。
 +
 
 +
=== 视频流测试 ===
 +
 
 +
==== 视频预览 (VEYE-MIPI-CAM@1080p mode) ====
 +
<code>gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080,framerate=30/1 ! autovideosink -v</code>
 +
 
 +
or
 +
 
 +
<code>gst-launch-1.0 v4l2src device=/dev/video0 io-mode=4 ! video/x-raw, format=NV12, width=1920, height=1080,framerate=30/1 ! imxvideoconvert_g2d ! queue ! video/x-raw, format=RGB16, width=1920, height=1080 ! waylandsink</code>
 +
=====抓拍一张图片 (VEYE-MIPI-CAM@1080p mode)=====
 +
<code>gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1920,height=1080' ! jpegenc ! filesink location=test_image.jpg</code>
 +
 
 +
==== v4l2grab抓拍一张图片(VEYE-MIPI-CAM@1080p mode) ====
 +
<code>./v4l2grab -d /dev/video0 -W 1920 -H 1080 -I 30 -o picture.jpg</code>
 +
 
 +
===I2C脚本===
 +
由于我们的摄像头参数自由度比较高,并没有采用V4L2参数进行控制,而是使用脚本进行参数配置。
 +
 
 +
https://github.com/veyeimaging/nxp_i.mx_veye_bsp/tree/main/i2c_cmd
 +
 
 +
注意脚本使用中,采用-b [i2cbus]参数来指明操作的是哪个摄像头。对于OKMX8MPQ-C,应当使用 -b 1。
 +
 
 +
[http://wiki.veye.cc/index.php/VEYE_MIPI_290/327_for_Raspberry_Pi/zh#.E8.A7.86.E9.A2.91.E6.8E.A7.E5.88.B6.E8.BD.AF.E4.BB.B6.E5.8C.85.E4.BD.BF.E7.94.A8 VEYE系列参数控制软件包使用说明]

Revision as of 10:56, 20 July 2023

English

如何在飞凌嵌入式科技i.MX8m plus板子上使用VEYE系列和CS系列摄像头模组

1 概述

飞凌嵌入式OKMX8MPQ-C开发板采用i.MX8M plus处理器。

在飞凌嵌入式官方资料(OKMX8MP-C_Linux5.4.70+Qt5.15.0版本)基础上,增加了我们的摄像头模组驱动,并提供了一些应用层的例程。

一般情况下,只需使用我们已编译好的Image和dtb。当然,你也可以根据我们开源的代码修改或重新编译驱动。

我们专门只做了ADP-Forlinx转接板,用于MIPI信号转接。

1.1 支持的模组:

系列 型号 状态 转接板
VEYE系列 VEYE-MIPI-IMX327S 完成 ADP-Forlinx
VEYE系列 VEYE-MIPI-IMX385 完成 ADP-Forlinx
VEYE系列 VEYE-MIPI-IMX462 完成 ADP-Forlinx

VEYE系列和CS系列MIPI摄像头模组是内置ISP的,输出为MIPI-CSI2接口。

对于图像效果参数,我们并没有采用V4L2接口实现,而是采用了DRA(Directly Register Access)模式,我们提供了一组Shell脚本直接控制摄像头模组。

2 硬件准备及安装

使用 ADP-Forlinx 将摄像头连接到 OKMX8MPQ-C 主板。

摄像头和ADP-Forlinx使用1.0毫米间距的异面15P FFC线连接。插入电缆时,应该让接触面朝向外侧。

VEYE camera Connect to OKMX8MPQ-C

3 更新OKMX8MPQ-C系统

3.1 概述

本章节描述怎样更新OKMX8MPQ-C系统以支持我们的摄像头模组。要支持我们的摄像头模组,需要更新系统两个部分,Image和DTB。

Image部分,我们增加了摄像头驱动,DTB部分则指明了使用的摄像头型号。一般情况下,只需使用我们已编译好的Image和DTB,非必要情况下,无需根据代码进行编译。

本章节描述发布的文件,是基于OKMX8MP-C_Linux5.4.70+Qt5.15.0版本的镜像进行编译的。

3.2 BSP包介绍

3.2.1 i.MX平台bsp

https://github.com/veyeimaging/nxp_i.mx_veye_bsp

包括以下主要内容:

  • driver源码
  • i2c通信工具集
  • 应用层demo
3.2.2 Forlinx i.MX平台bsp

https://github.com/veyeimaging/forlinx_nxp_i.mx

包括以下主要内容:

  • 预编译好的linux kernel:Image
  • 预编译好的不同平台下的dtb
  • dts源码

3.3 烧写飞凌官方标准系统

参考《OKMX8MPQ-C_Linux5.4.70+Qt5.15.0用户使用手册_V1.2_20230406.pdf》,烧写飞凌嵌入式标准版本系统。

3.4 使用编译好的Image和dtb

OKMX8MPQ-C板子的Image和dtb文件,保存在emmc的FAT分区,系统启动后,自动挂载到/run/media/mmcblk2p1目录。

在HostPC:

git clone https://github.com/veyeimaging/forlinx_nxp_i.mx.git

解压kernel Image,将Image和dtb文件拷贝到MYD-JX8MX板子上。

cp <your path>/Image /run/media/mmcblk2p1/

cp <your path>/OK8MP-C.dtb /run/media/mmcblk2p1/

重启板子即可。

4 应用和测试

4.1 系统状态检测

完成系统安装后,在OKMX8MPQ-C板端执行以下命令来检测是否正确连接摄像头。

  • VEYE-MIPI-IMX327S,VEYE-MIPI-IMX462,VEYE-MIPI-IMX385

dmesg | grep veye  

应当有类似如下提示:

[    2.806555] veyecam2m 1-003b:  camera id is veyecam2m

[    2.816868] veyecam2m 1-003b: sensor is IMX327

[    2.821323] veyecam2m 1-003b: board type is ONE board

[    2.826981] veyecam2m 1-003b: veyecam2m camera probed

[    6.055710] mx8-img-md: Registered sensor subdevice: veyecam2m 1-003b (1)

[    6.150181] mx8-img-md: created link [veyecam2m 1-003b] => [mxc-mipi-csi2.1]

可以看到在i2c-1上识别到了VEYE-MIPI-IMX327S。

正确识别摄像头后,会生成/dev/video0设备节点。

  • 列出摄像头支持的数据格式

v4l2-ctl --list-formats-ext -d /dev/video0

ioctl: VIDIOC_ENUM_FMT

        Type: Video Capture Multiplanar

        [0]: 'RGBP' (16-bit RGB 5-6-5)

                Size: Discrete 1920x1080

        [1]: 'RGB3' (24-bit RGB 8-8-8)

                Size: Discrete 1920x1080

        [2]: 'BGR3' (24-bit BGR 8-8-8)

                Size: Discrete 1920x1080

        [3]: 'YUYV' (YUYV 4:2:2)

                Size: Discrete 1920x1080

        [4]: 'YUV4' (32-bit A/XYUV 8-8-8-8)

                Size: Discrete 1920x1080

        [5]: 'NV12' (Y/CbCr 4:2:0)

                Size: Discrete 1920x1080

        [6]: 'YM24' (Planar YUV 4:4:4 (N-C))

                Size: Discrete 1920x1080

        [7]: 'XR24' (32-bit BGRX 8-8-8-8)

                Size: Discrete 1920x1080

        [8]: 'AR24' (32-bit BGRA 8-8-8-8)

                Size: Discrete 1920x1080

事实上,该摄像头仅提供 UYVY 数据格式,而 i.MX 8M Plus 中的 ISI 模块提供了数据格式转换功能,因此 /dev/video0 有这么多的输出格式。

5 视频流测试

5.1 视频预览 (VEYE-MIPI-CAM@1080p mode)

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080,framerate=30/1 ! autovideosink -v

or

gst-launch-1.0 v4l2src device=/dev/video0 io-mode=4 ! video/x-raw, format=NV12, width=1920, height=1080,framerate=30/1 ! imxvideoconvert_g2d ! queue ! video/x-raw, format=RGB16, width=1920, height=1080 ! waylandsink

5.1.1 抓拍一张图片 (VEYE-MIPI-CAM@1080p mode)

gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1920,height=1080' ! jpegenc ! filesink location=test_image.jpg

5.2 v4l2grab抓拍一张图片(VEYE-MIPI-CAM@1080p mode)

./v4l2grab -d /dev/video0 -W 1920 -H 1080 -I 30 -o picture.jpg

6 I2C脚本

由于我们的摄像头参数自由度比较高,并没有采用V4L2参数进行控制,而是使用脚本进行参数配置。

https://github.com/veyeimaging/nxp_i.mx_veye_bsp/tree/main/i2c_cmd

注意脚本使用中,采用-b [i2cbus]参数来指明操作的是哪个摄像头。对于OKMX8MPQ-C,应当使用 -b 1。

VEYE系列参数控制软件包使用说明