<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[A133 VIN连接AHD芯片请教]]></title><description><![CDATA[<p dir="auto">大佬们好，我使用A133的MIPI连接AHD芯片时遇到以下问题。</p>
<p dir="auto">这是使用V4L2调用后的打印<br />
<img src="/assets/uploads/files/1685333601675-9bfd0d31-a1cd-4493-a447-db89b6d4627d-image.png" alt="9bfd0d31-a1cd-4493-a447-db89b6d4627d-image.png" class=" img-responsive img-markdown" width="492" height="84" /></p>
<p dir="auto">这是设备树的配置</p>
<pre><code>		vind0:vind@0 {
			vind0_clk = &lt;336000000&gt;;
			vind0_isp = &lt;300000000&gt;;
			status = "okay";

			actuator0:actuator@0 {
				device_type = "actuator0";
				actuator0_name = "ad5820_act";
				actuator0_slave = &lt;0x18&gt;;
				actuator0_af_pwdn = &lt;&gt;;
				actuator0_afvdd = "afvcc-csi";
				actuator0_afvdd_vol = &lt;2800000&gt;;
				status = "disabled";
			};
			flash0:flash@0 {
				device_type = "flash0";
				flash0_type = &lt;2&gt;;
				flash0_en = &lt;&amp;r_pio PL 11 1 0 1 0&gt;;
				flash0_mode = &lt;&gt;;
				flash0_flvdd = "";
				flash0_flvdd_vol = &lt;&gt;;
				device_id = &lt;0&gt;;
				status = "disabled";
			};
			sensor0:sensor@0 {
				device_type = "sensor0";
				sensor0_mname = "xs9922_mipi";
				sensor0_twi_cci_id = &lt;2&gt;;
				sensor0_twi_addr = &lt;0x60&gt;;
				sensor0_mclk_id = &lt;0&gt;;
				sensor0_pos = "rear";
				sensor0_isp_used = &lt;0&gt;;
				sensor0_fmt = &lt;0&gt;;
				sensor0_stby_mode = &lt;0&gt;;
				sensor0_vflip = &lt;0&gt;;
				sensor0_hflip = &lt;0&gt;;
				sensor0_iovdd-supply = &lt;&amp;reg_dldo2&gt;;
				sensor0_iovdd_vol = &lt;3300000&gt;;
				sensor0_avdd-supply = &lt;&amp;reg_dldo3&gt;;
				sensor0_avdd_vol = &lt;2500000&gt;;
				sensor0_dvdd-supply = &lt;&amp;reg_dldo4&gt;;
				sensor0_dvdd_vol = &lt;1100000&gt;;
				sensor0_power_en = &lt;&gt;;
				sensor0_reset = &lt;&amp;pio PE 4 1 0 1 0&gt;;
				sensor0_pwdn = &lt;&gt;;
				flash_handle = &lt;&gt;;
				act_handle = &lt;&gt;;
				status	= "okay";
			};
			sensor1:sensor@1 {
				device_type = "sensor1";
				sensor1_mname = "gc5035_mipi";
				sensor1_twi_cci_id = &lt;2&gt;;
				sensor1_twi_addr = &lt;0x7e&gt;;
				sensor1_mclk_id = &lt;0&gt;;
				sensor1_pos = "front";
				sensor1_isp_used = &lt;1&gt;;
				sensor1_fmt = &lt;1&gt;;
				sensor1_stby_mode = &lt;0&gt;;
				sensor1_vflip = &lt;0&gt;;
				sensor1_hflip = &lt;0&gt;;
				sensor1_iovdd-supply = &lt;&amp;reg_dldo2&gt;;
				sensor1_iovdd_vol = &lt;1800000&gt;;
				sensor1_avdd-supply = &lt;&amp;reg_dldo3&gt;;
				sensor1_avdd_vol = &lt;2800000&gt;;
				sensor1_dvdd-supply = &lt;&amp;reg_eldo2&gt;;
				sensor1_dvdd_vol = &lt;1200000&gt;;
				sensor1_power_en = &lt;&gt;;
				sensor1_reset = &lt;&amp;pio PE 7 1 0 1 0&gt;;
				sensor1_pwdn = &lt;&amp;pio PE 6 1 0 1 0&gt;;
				status	= "disabled";
			};
			vinc0:vinc@0 {
				vinc0_csi_sel = &lt;0&gt;;
				vinc0_mipi_sel = &lt;0&gt;;
				vinc0_isp_sel = &lt;0&gt;;
				vinc0_isp_tx_ch = &lt;0&gt;;
				vinc0_tdm_rx_sel = &lt;0&gt;;
				vinc0_rear_sensor_sel = &lt;0&gt;;
				vinc0_front_sensor_sel = &lt;0&gt;;
				vinc0_sensor_list = &lt;0&gt;;
				status = "okay";
			};
			vinc1:vinc@1 {
				vinc1_csi_sel = &lt;0&gt;;
				vinc1_mipi_sel = &lt;0&gt;;
				vinc1_isp_sel = &lt;0&gt;;
				vinc1_isp_tx_ch = &lt;1&gt;;
				vinc1_tdm_rx_sel = &lt;0&gt;;
				vinc1_rear_sensor_sel = &lt;0&gt;;
				vinc1_front_sensor_sel = &lt;0&gt;;
				vinc1_sensor_list = &lt;0&gt;;
				status = "okay";
			};
			vinc2:vinc@2 {
				vinc2_csi_sel = &lt;0&gt;;
				vinc2_mipi_sel = &lt;0&gt;;
				vinc2_isp_sel = &lt;0&gt;;
				vinc2_isp_tx_ch = &lt;2&gt;;
				vinc2_tdm_rx_sel = &lt;0&gt;;
				vinc2_rear_sensor_sel = &lt;0&gt;;
				vinc2_front_sensor_sel = &lt;0&gt;;
				vinc2_sensor_list = &lt;0&gt;;
				status = "okay";
			};
			vinc3:vinc@3 {
				vinc3_csi_sel = &lt;0&gt;;
				vinc3_mipi_sel = &lt;0&gt;;
				vinc3_isp_sel = &lt;0&gt;;
				vinc3_isp_tx_ch = &lt;3&gt;;
				vinc3_tdm_rx_sel = &lt;0&gt;;
				vinc3_rear_sensor_sel = &lt;0&gt;;
				vinc3_front_sensor_sel = &lt;0&gt;;
				vinc3_sensor_list = &lt;0&gt;;
				status = "okay";
			};
		};
</code></pre>
<p dir="auto">这是V4L2调用代码</p>
<pre><code>void MainWindow::showEvent(QShowEvent *event)
{
    struct v4l2_capability cap;
    struct v4l2_input inp;           /* select the current video input */
    struct v4l2_streamparm parms;    /* set streaming parameters */
    struct v4l2_format fmt;          /* try a format */
    struct v4l2_requestbuffers req;
    struct v4l2_buffer buf;
    enum v4l2_buf_type type;
    
int i;

    fd = open("/dev/video0", O_RDWR, 0);
    if(fd &lt; 0)
    {
        qDebug()&lt;&lt;"/dev/video0 open fail...";
        return;
    }

    memset(&amp;cap, 0, sizeof(cap));
    if(ioctl(fd, VIDIOC_QUERYCAP, &amp;cap) &lt; 0)
    {
        qDebug()&lt;&lt;"Query device capabilities fail!!!";
        ::close(fd);
        return;
    }
    else
    {
        qDebug()&lt;&lt;"Querey device capabilities succeed";
        qDebug()&lt;&lt;"cap.driver ="&lt;&lt;(char*)cap.driver;
        qDebug()&lt;&lt;"cap.card ="&lt;&lt;(char*)cap.card;
        qDebug()&lt;&lt;"cap.bus_info ="&lt;&lt;(char*)cap.bus_info;
        qDebug()&lt;&lt;"cap.version ="&lt;&lt;QString().sprintf("0x%08x",cap.version);
        qDebug()&lt;&lt;"cap.capabilities ="&lt;&lt;QString().sprintf("0x%08x", cap.capabilities);
    }

    if(!(cap.capabilities &amp; V4L2_CAP_VIDEO_CAPTURE_MPLANE))
    {
        qDebug()&lt;&lt;"The device is not supports the Video Capture interface!!!";
        ::close(fd);
        return;
    }


    memset(&amp;inp, 0, sizeof(inp));
    inp.index = 0;
    inp.type = V4L2_INPUT_TYPE_CAMERA;
    if (ioctl(fd, VIDIOC_S_INPUT, &amp;inp) &lt; 0) {
        qDebug()&lt;&lt;"VIDIOC_S_INPUT failed! s_input:"&lt;&lt;inp.index;
        ::close(fd);
        return;
    }

    memset(&amp;parms, 0, sizeof(parms));
    parms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
    parms.parm.capture.timeperframe.numerator = 1;
    parms.parm.capture.timeperframe.denominator = 25;
    if (ioctl(fd, VIDIOC_S_PARM, &amp;parms) &lt; 0) {
        qDebug()&lt;&lt;"Setting streaming parameters failed 1/25";
        ::close(fd);
        return;
    }

    memset(&amp;fmt, 0, sizeof(fmt));
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
    fmt.fmt.pix_mp.width = 1920;
    fmt.fmt.pix_mp.height = 1080;
    fmt.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_UYVY;
    fmt.fmt.pix_mp.field = V4L2_FIELD_NONE;
    if (ioctl(fd, VIDIOC_S_FMT, &amp;fmt) &lt; 0) {
        qDebug()&lt;&lt;"setting the data format failed!";
        ::close(fd);
        return;
    }

    if (ioctl(fd, VIDIOC_G_FMT, &amp;fmt) &lt; 0) {
        qDebug()&lt;&lt;"get the data format failed!";
    }


    memset(&amp;req, 0, sizeof(req));
    req.count = 3;
    req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
    req.memory = V4L2_MEMORY_MMAP;
    if (ioctl(fd, VIDIOC_REQBUFS, &amp;req) &lt; 0) {
        qDebug()&lt;&lt;"VIDIOC_REQBUFS failed";
        ::close(fd);
        return;
    }


    memset(&amp;buf, 0, sizeof( buf));
    for (i = 0; i &lt; 3; i++) {
        buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
        buf.memory = V4L2_MEMORY_MMAP;
        buf.index = i;
        buf.length = 1;
        buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane));
        if(ioctl(fd, VIDIOC_QUERYBUF, &amp;buf) &lt; 0)
        {
            qDebug()&lt;&lt;"VIDIOC_QUERYBUF failed";
            free(buf.m.planes);
            ::close(fd);
            return;
        }

        mptr[i] = (unsigned char *)mmap(NULL, buf.m.planes[0].length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.planes[0].m.mem_offset);
        size[i] = buf.length;

        //使用完毕
        if(ioctl(fd, VIDIOC_QBUF, &amp;buf) &lt; 0)
        {
            qDebug()&lt;&lt;"VIDIOC_QBUF failed";
            free(buf.m.planes);
            ::close(fd);
            return;
        }
    }

    type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
    if (ioctl(fd, VIDIOC_STREAMON, &amp;type) == -1) {
        qDebug()&lt;&lt;"VIDIOC_STREAMON error!";
        free(buf.m.planes);
        ::close(fd);
    }

    //timer = new QTimer(this);
    //connect(timer,&amp;QTimer::timeout, this, &amp;MainWindow::ReadCarmeraFrame);
    //timer-&gt;start(25);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::ReadCarmeraFrame()
{
    struct v4l2_buffer readbuffer;
    readbuffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
    readbuffer.memory = V4L2_MEMORY_MMAP;
    readbuffer.length = 1;
    readbuffer.m.planes = (struct v4l2_plane *)calloc(readbuffer.length, sizeof(struct v4l2_plane));
    if(ioctl(fd, VIDIOC_DQBUF, &amp;readbuffer) &lt; 0)
    {
        qDebug()&lt;&lt;"VIDIOC_DQBUF failed";
        ::close(fd);
        timer-&gt;stop();
        return;
    }


    qDebug()&lt;&lt;"index:"&lt;&lt;readbuffer.index;
    qDebug()&lt;&lt;"ptr:"&lt;&lt;mptr[readbuffer.index];

    /*yuyv_to_rgb(mptr[readbuffer.index], rgbdata, 1920, 1080);
    QImage image = QImage((const uchar*)rgbdata, 1920, 1080, QImage::Format_RGB888);
    ui-&gt;label-&gt;setPixmap(QPixmap::fromImage(image));*/

    //通知内核已经使用完毕
    if(ioctl(fd, VIDIOC_QBUF, &amp;readbuffer) &lt; 0)
    {
        qDebug()&lt;&lt;"VIDIOC_QBUF failed";
        ::close(fd);
        timer-&gt;stop();
        return;
    }
    free(readbuffer.m.planes);
}
</code></pre>
]]></description><link>https://bbs.aw-ol.com/topic/3602/a133-vin连接ahd芯片请教</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 19:59:36 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/3602.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 May 2023 04:19:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to A133 VIN连接AHD芯片请教 on Tue, 02 Jan 2024 06:11:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/1013">@zxyuser</a> 你在Q群里吧，我就是那个搞好XS9922B的群友</p>
]]></description><link>https://bbs.aw-ol.com/post/20649</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/20649</guid><dc:creator><![CDATA[wupaul2001]]></dc:creator><pubDate>Tue, 02 Jan 2024 06:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to A133 VIN连接AHD芯片请教 on Mon, 25 Dec 2023 08:23:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/1933">@wupaul2001</a> 怎么修改的呢，能看看补丁吗</p>
]]></description><link>https://bbs.aw-ol.com/post/20554</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/20554</guid><dc:creator><![CDATA[zxyUser]]></dc:creator><pubDate>Mon, 25 Dec 2023 08:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to A133 VIN连接AHD芯片请教 on Mon, 25 Dec 2023 06:53:16 GMT]]></title><description><![CDATA[<p dir="auto">你好，请问你调通了吗，我也是用这个芯片，想请教下，能成功使用这个芯片支持4luAHD摄像头吗</p>
]]></description><link>https://bbs.aw-ol.com/post/20551</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/20551</guid><dc:creator><![CDATA[zxyUser]]></dc:creator><pubDate>Mon, 25 Dec 2023 06:53:16 GMT</pubDate></item><item><title><![CDATA[Reply to A133 VIN连接AHD芯片请教 on Tue, 30 May 2023 08:42:34 GMT]]></title><description><![CDATA[<p dir="auto">问题已找到，是因为当AHD输入为UYVY时， CSIC的DMA输出不支持UYVY格式</p>
]]></description><link>https://bbs.aw-ol.com/post/16102</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/16102</guid><dc:creator><![CDATA[wupaul2001]]></dc:creator><pubDate>Tue, 30 May 2023 08:42:34 GMT</pubDate></item></channel></rss>