Linux 如何在iMX8QXP上运行OV5647_mipi

Linux 如何在iMX8QXP上运行OV5647_mipi,linux,linux-kernel,yocto,imx6,imx7,Linux,Linux Kernel,Yocto,Imx6,Imx7,您好,我有iMX8QXP工具包,我想从ov5647相机获取流 DISTRO=fsl imx wayland 我的ov5647相机的pin连接到: MIPI\U CSI0\U ACM\U MCLK\U OUT MIPI\U CSI0\U MCLK\U OUT ALT0 MIPI_CSI0_CKN MIPI_CSI0_CLK_N ALT0 MIPI_CSI0_CKP MIPI_CSI0_CLK_P ALT0 MIPI_CSI0_DN0 MIPI_CSI0_数据0_N ALT0 MIPI_CSI0_D

您好,我有iMX8QXP工具包,我想从ov5647相机获取流

DISTRO=fsl imx wayland

我的ov5647相机的pin连接到:

MIPI\U CSI0\U ACM\U MCLK\U OUT MIPI\U CSI0\U MCLK\U OUT ALT0

MIPI_CSI0_CKN MIPI_CSI0_CLK_N ALT0 MIPI_CSI0_CKP MIPI_CSI0_CLK_P ALT0 MIPI_CSI0_DN0 MIPI_CSI0_数据0_N ALT0 MIPI_CSI0_DN1 MIPI_CSI0_数据1_N ALT0 MIPI_CSI0_DN2 MIPI_CSI0_数据2_N ALT0

MIPI_CSI0_DN3 MIPI_CSI0_数据3_N ALT0 MIPI_CSI0_DP0 MIPI_CSI0_数据0_P ALT0 MIPI_CSI0_DP1 MIPI_CSI0_数据1_P ALT0 MIPI_CSI0_DP2 MIPI_CSI0_数据2_P ALT0 MIPI_CSI0_DP3 MIPI_CSI0_数据3_P ALT0

但I2C引脚未连接。有问题吗?我可以通过i2c在没有初始化的情况下从相机获取数据吗

因此,我在./include/dt bindings/pinctrl/pads-imx8qxp.h中找不到这些管脚(带有焊盘信号名称),如果我将这些管脚写入焊盘格式,我将得到错误,而不是写入MIPI_CSI0_ACM_MCLK_OUT。我想这个别针是专用的,我不能多路复用。我可以直接使用,无需更改scfw

因此,我的关于mipi csi摄像头的dts文件:


我尝试了video12和video13通过lvds用以下命令打开摄像头:

命令:

gst-launch-1.0-v videotestsrc pattern=ball\!视频/x-raw,宽度=320,高度=240\!视频转换\!发球!v4l2sink设备=/dev/video12 输出:

root@imx8qxpmek:/home#gst-launch-1.0-v videotestsrc pattern=ball\

!!视频/x-raw,宽度=320,高度=240\ ! 视频转换\ ! 发球台\ ! v4l2sink设备=/dev/video12 正在将管道设置为暂停。。。 错误:管道不想暂停。 错误:来自元素/GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:Device'/dev/video12'不是输出设备。 其他调试信息: ../../../git/sys/v4l2/v4l2_calls.c(687):gst_v4l2_open():/GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: 能力:0x4204000 正在将管道设置为空。。。 释放管道

root@imx8qxpmek:/home#


命令:

gst-launch-1.0-v videotestsrc pattern=ball\!视频/x-raw,宽度=320,高度=240\!视频转换\!发球!v4l2sink设备=/dev/video12 输出:

正在将管道设置为暂停。。。 管道正在预滚。。。 /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src:caps=video/x-raw,格式=(字符串)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(字符串)单声道,隔行1 /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src:caps=video/x-raw,格式=(string)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(string)mono,隔行扫描-mod1 /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src:caps=video/x-raw,格式=(字符串)NV12,宽度=(int)320,高度=(int)240,帧速率=(分数)30/1,多视图模式=(字符串)单声道,隔行1 /GstPipeline:pipeline0/GstTee:tee0.GstTeePad:src_0:caps=video/x-raw,格式=(string)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(string)mono,隔行模式=(string1 /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0.GstPad:sink:caps=video/x-raw,格式=(string)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(string)mono,隔行模式=(1 /GstPipeline:pipeline0/GstTee:tee0.GstPad:sink:caps=video/x-raw,格式=(string)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(string)mono,隔行模式=(string)pro1 /GstPipeline:pipeline0/gstvideoconvert0.GstPad:sink:caps=video/x-raw,格式=(string)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(string)mono,interlac1 /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink:caps=video/x-raw,格式=(string)NV12,宽度=(int)320,高度=(int)240,帧率=(分数)30/1,多视图模式=(string)mono,隔行扫描-mo1 管道已预卷。。。 正在将管道设置为播放。。。 新时钟:GstSystemClock

^钱德林中断。------------------------------------->CTRL+C 中断:正在停止管道。。。 执行在0:01:03.000609625后结束 正在将管道设置为暂停。。。 正在将管道设置为就绪。。。 正在将管道设置为空。。。 释放管道


命令:

root@imx8qxpmek:/# gst-launch-1.0 v4l2src device=/dev/video12 glimagesink                                                                                                                                   
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
Got context from element 'sink': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayWayland\)\ gldisplaywayland0";
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Device '/dev/video12' is not a capture device.
Additional debug info:
../../../git/sys/v4l2/v4l2_calls.c(679): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Capabilities: 0x4204000
Setting pipeline to NULL ...
Freeing pipeline ...
root@imx8qxpmek:/# 
gst-launch-1.0-e glvideomixer name=mix background=3 sink_0::xpos=192 sink_0::ypos=0 sink_0::width=640 sink_0::height=480 sink_0::zorder=1!“video/x-raw,width=1024,height=768”!glimagesink rotate方法=水平翻转v4l2src设备=/dev/video13!video/x-raw,width=640,height=480!mix.sink\0&

输出:

正在将管道设置为暂停。。。 管道是带电的,不需要预滚。。。 已从元素“接收器”获取上下文:gst.gl.GLDisplay=context,gst.gl.GLDisplay=(GstGLDisplay)”(GstGLDisplayWayland)\gldisplaywayland0”; 正在将管道设置为播放。。。 新时钟:GstSystemClock 错误:来自元素/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:内部数据流错误。 其他调试信息: ../../../git/libs/gst/base/gstbasesrc.c(3072):gst_base_src_loop():/GstPipeline:pipeline0/GstV4l2Src:v4l2src0: 流停止,原因未协商(-4) 关闭时启用EOS--错误后等待EOS 等待EOS


命令:

root@imx8qxpmek:/# gst-launch-1.0 v4l2src device=/dev/video12 glimagesink                                                                                                                                   
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
Got context from element 'sink': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayWayland\)\ gldisplaywayland0";
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Device '/dev/video12' is not a capture device.
Additional debug info:
../../../git/sys/v4l2/v4l2_calls.c(679): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Capabilities: 0x4204000
Setting pipeline to NULL ...
Freeing pipeline ...
root@imx8qxpmek:/# 
gst-launch-1.0-e glvideomixer name=mix background=3 sink_0::xpos=192 sink_0::ypos=0 sink_0::width=640 sink_0::height=480 sink_0::zorder=1!“视频/x-raw,宽度=1024,高度=768”!glimagesink旋转方法=水平翻转v4l2src设备=/dev/video12!
&iomuxc {
    imx8qxp-mek {
        pinctrl_mipi_csi0: mipicsi0grp{
            fsl,pins = <
                SC_P_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUT  0xC0000041
                SC_P_MIPI_CSI0_GPIO0_01_LSIO_GPIO3_IO07     0xC0000041
                SC_P_MIPI_CSI0_GPIO0_00_LSIO_GPIO3_IO08     0xC0000041
            >;
        };

        pinctrl_parallel_csi: parallelcsigrp {
            fsl,pins = <
                SC_P_CSI_D00_CI_PI_D02      0xC0000041
                SC_P_CSI_D01_CI_PI_D03      0xC0000041
                SC_P_CSI_D02_CI_PI_D04      0xC0000041
                SC_P_CSI_D03_CI_PI_D05      0xC0000041
                SC_P_CSI_D04_CI_PI_D06      0xC0000041
                SC_P_CSI_D05_CI_PI_D07      0xC0000041
                SC_P_CSI_D06_CI_PI_D08      0xC0000041
                SC_P_CSI_D07_CI_PI_D09      0xC0000041

                SC_P_CSI_MCLK_CI_PI_MCLK        0xC0000041
                SC_P_CSI_PCLK_CI_PI_PCLK        0xC0000041
                SC_P_CSI_HSYNC_CI_PI_HSYNC      0xC0000041
                SC_P_CSI_VSYNC_CI_PI_VSYNC      0xC0000041
                SC_P_CSI_EN_LSIO_GPIO3_IO02     0xC0000041
                SC_P_CSI_RESET_LSIO_GPIO3_IO03  0xC0000041
            >;
        };
    };
};

&isi_0 {
    interface = <6 0 2>;    /* INPUT: 6-PARALLEL CSI */
    parallel_csi;
    status = "disable";
};

&cameradev {
    mipi_csi_0;
    status = "okay";
};

&parallel_csi {
    #address-cells = <1>;
    #size-cells = <0>;
    status = "disable";
    port@0 {
        reg = <0>;
        parallel_csi_ep: endpoint {
            remote-endpoint = <&ov5647_ep>;
        };
    };
};

&isi_2 {
    interface = <2 0 2>;
    status = "okay";
};

&isi_1 {
    status = "disabled";
};

&isi_3 {
    status = "disabled";
};

&isi_4 {
    status = "disabled";
};

&isi_5 {
    status = "disabled";
};

&isi_6 {
    status = "disabled";
};

&isi_7 {
    status = "disabled";
};

&i2c0_csi0 {
    clock-frequency = <100000>;
    status = "okay";
    #address-cells = <1>;
    #size-cells = <0>;
    ov5647_mipi: ov5647_mipi@36 {
        compatible = "ovti,ov5647_mipi";
        reg = <0x36>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_mipi_csi0>;
        clocks = <&clk IMX8QXP_24MHZ>;
        clock-names = "csi_mclk";
        csi_id = <0>;
        pwn-gpios = <&gpio3 7 GPIO_ACTIVE_LOW>;
        rst-gpios = <&gpio3 8 GPIO_ACTIVE_HIGH>;
        mclk = <24000000>;
        mclk_source = <0>;
        mipi_csi;
        status = "okay";
        port {
            ov5647_mipi_ep: endpoint {
                remote-endpoint = <&mipi_csi0_ep>;
            };
        };
    };

    /delete-node/max9286_mipi@6A;
};

&mipi_csi_0 {
    virtual-channel;
    status = "okay";
    #address-cells = <1>;
    #size-cells = <0>;
    port@0 {
        reg = <0>;
        mipi_csi0_ep: endpoint {
            remote-endpoint = <&ov5647_mipi_ep>;
            data-lanes = <1 2>;
        };
    };
};
&i2c0_cm40 {
    #address-cells = <1>;
    #size-cells = <0>;
    ov5647: ov5647@36 {
        compatible = "ovti,ov5647";
        reg = <0x36>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_parallel_csi>;
        clocks = <&clk IMX8QXP_PARALLEL_CSI_MISC0_CLK>;
        clock-names = "csi_mclk";
        pwn-gpios = <&gpio3 2 GPIO_ACTIVE_LOW>;
        rst-gpios = <&gpio3 3 GPIO_ACTIVE_HIGH>;
        csi_id = <0>;
        mclk = <24000000>;
        mclk_source = <0>;
        status = "disabled";
        port {
            ov5647_ep: endpoint {
                remote-endpoint = <&parallel_csi_ep>;
            };
        };
    };
};
        SC_P_MIPI_CSI0_GPIO0_01_LSIO_GPIO3_IO07     0xC0000041
        SC_P_MIPI_CSI0_GPIO0_00_LSIO_GPIO3_IO08     0xC0000041
root@imx8qxpmek:/# dmesg | grep ov5
[    3.641815] ov5647_mipi 16-0036: 16-0036 supply DOVDD not found, using dummy regulator
[    3.649866] ov5647_mipi 16-0036: Linked as a consumer to regulator.0
[    3.656255] ov5647_mipi 16-0036: 16-0036 supply DVDD not found, using dummy regulator
[    3.664175] ov5647_mipi 16-0036: 16-0036 supply AVDD not found, using dummy regulator
[    4.751720] ov5647_read_reg:write reg error:reg=300a
[    4.756696] camera ov5647_mipi is not found
root@imx8qxpmek:/# 
root@imx8qxpmek:/# gst-launch-1.0 v4l2src device=/dev/video12 glimagesink                                                                                                                                   
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
Got context from element 'sink': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayWayland\)\ gldisplaywayland0";
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Device '/dev/video12' is not a capture device.
Additional debug info:
../../../git/sys/v4l2/v4l2_calls.c(679): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Capabilities: 0x4204000
Setting pipeline to NULL ...
Freeing pipeline ...
root@imx8qxpmek:/# 
root@imx8qxpmek:/# gst-launch-1.0 v4l2src device=/dev/video13 glimagesink                                                                                                                                   
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Got context from element 'sink': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayWayland\)\ gldisplaywayland0";
Caught SIGSEGV
Setting pipeline to PLAYING ...
New clock: GstSystemClock
#0  0x0000ffffbce2a1a0 in __GI___poll (fds=0x13944c50, nfds=2, 
#1  0x0000ffffbcf4b22c in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x0000ffffbcf4b640 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#3  0x0000ffffbd0da5bc in gst_bus_poll () from /usr/lib/libgstreamer-1.0.so.0
#4  0x0000000000404828 in ?? ()
#5  0x00000000004036a8 in ?? ()
#6  0x0000ffffbcd89264 in __libc_start_main (main=0x4032c0, argc=4, 
#7  0x0000000000403d44 in ?? ()
Spinning.  Please run 'gdb gst-launch-1.0 4434' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.