zoukankan      html  css  js  c++  java
  • lvds split两channel输出到一个屏显示

    转:https://blog.csdn.net/changqing1990/article/details/81128552

    其实之前写过LCD/LVDS的一些时序的基本概念《与LCD移植相关的概念》。但后来发现还是不够全面。关于双通道LVDS,可能会有很多人有一些陌生,它是什么原理? 有什么作用? 时序如何设定? 接下来, 就让我们带着这些问题去阅读下面的文章吧!

    1. IMX LDB桥对LVDS 的支持情况:
    让我们先看一张imx6 TRM 中的图.

    IMX6 LVDS 桥提供两个LVDS通道, 或许下面的图更能说明什么是通道:

    什么叫做通道? 上面这张图描述的很清楚,LVDS0_CLK_N, LVDS0_CLK_P, LVDS0_DATA[3:0]_N, LVDS0_DATA[3:0]_P 就构成了一个通道0,剩下的一组构成了通道1。我们可以看到每一组LVDS通道有一组完整LVDS信号,这组信号就可以接一个LVDS panel。

    该LVDS 桥支持 单通道,双通道, split 通道 的输出。我们来具体讲讲这三者的区别:

      单通道LVDS : 只通过一个通道接向外面的LVDS panel。

      双通道LVDS: 通过两个通道接向外面的两个LVDS panel, panel 显示相同内容;

      split 通道LVDS: 通过两个通道接向外面的一个LVDS panel.   

    单通道很好理解, 它是我们常用的一种LVDS,这里不再描述。为了彻底弄明白 双通道 & split 通道的lvds,我们还得从IPU 说起。

    2. IPU DI 与LVDS
    IMX6 CPU 所有的显示(LCD,HDMI,LVDS),都要经过IPU的处理。IPU 的数据处理流程,让我们用一张图来解释:

    IPU 将framebuffer 中的数据读入到IPU,然后根据其分辨率参数,生成带有时序的显示数据, 最终通过DI口送出。

    每个DI 口送出的数据,就已经包含了hsync,vsync,pixelclock,及像素数据。 在HDMI, LVDS, LCD 端,都可以控制相关寄存器,让DI 的数据流流向自己,最终经过显示协议的转换输出到显示屏幕上去。 也就是说,HDMI, LVDS , LCD 的显示数据都是从IPU DI 路由给他们的。

    从上图可得,每一个IPU都有两个 DI 口,也就是说每个IPU 最多支持两路显示。

    了解了这一概念之后,我们再来看 LVDS 双通道 &split 通道:

    双通道LVDS:使用相同的IPU DI,且每个通道都路由这个DI 的数据到 自己的通道。由于使用的是相同的DI, 所以两个显示屏幕内容是相同的。 很明显,双通道LVDS 能够实现多屏幕同显。

    split通道LVDS:使用相同的IPU DI,但每个通道路由不同的数据,奇数通道路由奇数位像素数据,偶数通道路由偶数位像素数据,依次来构成一个完整的帧。

    可能比较抽象,举个栗子。1920x1080的像素数据中每一行有1920 个像素点,分别编号1,2,3, 。。。1920, lvds split mode 就是在通道0 中发送第一个像素数据,通道1中发送第二个像素数据,依此类推。再来张很重要的图来加以说明。

                                                      图 2.2

    这张图是自己画的,但很重要的说明了LVDS split 模式下, LVDS 通道中数据构成方式。好了我们后面还要讲这张图片。

    从这里可以看出,所谓双通道LVDS,其实也很简单,它的时序参数和单通道lvds 是没有仍何区别的。接下来就是split通道的LVDS了。

    3. Split 通道的LVDS的timing
    相信看了刚才对split mode 的LVDS 的描述,已经大致有了了解。那么当拿到split 模式的LVDS, 如何调节它的时序呢?其实这一切,都源于对图2.2的理解。让我们对这个图重新完善下:  

    这张图是pixelclock, IPU DI , LVDS channel0, LVDS channel1 中的数据对照。

    举个栗子说明,如果IPU DI 端输出是1920x1080M@60 分辨率的像素数据, lvds channel 0 的时序变成了960x1080M@60 的分辨率,lvds channel 1 的时序也变成了960x1080M@60 的分辨率。pixelclock 就变成了原来的一半。

    当我们拿到一个1920x1080 split 模式的lvds 的datasheet,假如它有下面的时序参数:

    一看datasheet直接蒙逼,这不是1920x1080 的么?怎么变成960x1080的了。如过看了我们刚才上面的描述,你一定会知道,这个datasheet 描述的时序参数是指 每个LVDS接口 (通道)所需要的输入参数。

    我们由刚才分析可得:一个LVDS 信号,经过split 模式后,lvds每个通道信号的pixelclock 变为原来的一半,水平有效长度变为原来的一半。

    由此可以反推出 IPU DI 端的时序参数,datasheet 中的pixelclock*2 = DI 端的pixel clock ,h active 长度*2 = Di 端的 hactive 长度.

    由此可以获得devicetree 中lvds split 模式下的timing,详细如下:

    timing50: g070vw0yuyu {
    clock-frequency = <144000000>;
    hactive = <1920>;
    vactive = <1080>;
    hback-porch = <120>;
    hfront-porch = <120>;
    vback-porch = <20>;
    vfront-porch = <20>;
    hsync-len = <32>;
    vsync-len = <5>;
    };
    现在可以解释为啥需要split 模式的LVDS 了, 因为它每个通道需要的pixelclock 较低, 合成后可以变成高分辨率的显示屏,一般单通道的很难达到这么高的分辨率。

    双通道LVDS的描述就至此了,希望对你有所帮助!
    ---------------------
    作者:CH_Qing
    来源:CSDN
    原文:https://blog.csdn.net/changqing1990/article/details/81128552
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    PE文件结构详解(六)重定位
    PE文件结构详解(五)延迟导入表
    PE文件结构详解(四)PE导入表
    PE文件结构详解(三)PE导出表
    PE文件结构详解(二)可执行文件头
    PE文件结构详解(一)基本概念
    querySelector与getElementBy等的区别
    区别getElementByID,getElementsByName,getElementsByTagName
    css 只改变父元素的透明度,不改变子元素透明度rgba+opacity
    windows下配置apache+https
  • 原文地址:https://www.cnblogs.com/newjiang/p/10218369.html
Copyright © 2011-2022 走看看