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 端输出是[email protected] 分辨率的像素数据, lvds channel 0 的时序变成了[email protected] 的分辨率,lvds channel 1 的时序也变成了[email protected] 的分辨率。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
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/newjiang/p/10218369.html

时间: 2024-10-10 20:09:00

lvds split两channel输出到一个屏显示的相关文章

客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。

1.客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出. 利用httpclient进行ip地址和端口号连接后,http的输出端作为http请求参数设置.http输出端用于http请求设置. http输入端,用于接收服务端传回来的数据. 其中有个关键的http.openConencetion()方法来启动连接.和httpConn.getInputStream()用于接收服务器端返回的数据. 1.客户端获取json字符串 public class Htt

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

YUV422蓝屏显示输出功能辅助调试

YUV422有YUYV,YVYU,UYVY,VYUY四种,以下笔者就就以UYVY为例介绍一下数据构成.因为常常要跟视频输入打交道,所以YUV422这种常见的视频信号是常常碰到的.有时候我们调试一个模块输出YUV422,然后再显示出来.非常多时候,可能没法准确推断你那个模块是不是已经正常跑起来了,跑起来来的情况下,是不是真的有数据输出,有了数据输出后来的数据究竟对不正确. 带着这些疑问,当然有非常多对策,笔者就先把这个事情一分为二,以YUV422数据为界限分两部分,假设怀疑是模块没有输出YUV42

输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的平均值

有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入. 表格如下: 姓名 一月 二月 三月 楚乔     200   314   3500 宇文玥     2000  332   2300 烟熏柿子    6000  333   680 淳儿    5000  333   789 洛河     30    12    2900 现在需要知道每个人这三个月的收入平均值,那么你就需要将表格中一行代表收入的数字相加除以月数.下面请编写MR程序解决这个简单的问题. 输入只包含一

用两个stack设计一个队列

思路:用两个栈,一个用于接收(in),一个用于输出(out),输出前如果out为空需要将in中的数据导入out. import java.util.Stack; //用两个stack设计一个队列 p142 public class MyQueue<T> { Stack<T> in; Stack<T> out; public MyQueue() { in = new Stack<T>(); out = new Stack<T>(); } publi

3、pwm 两通道输出制作呼吸灯(提供包含各种驱动的工程)

一个包含各种驱动的工程,main函数中用驱动函数实现功能 C:\Users\LiTao\Desktop\儿童智能硬件资料\my_workspace\pwm 改造实现了PWM两路输出 1 #include <stdbool.h> 2 #include <stdint.h> 3 #include "nrf_delay.h" 4 #include "nrf_gpio.h" 5 #include "boards.h" 6 #inc

用两个栈实现一个队列 &amp; 用两个队列实现一个栈

队列(先进先出)和栈(先进后出)都是常用的经常讨论的基本的数据结构,本文要讨论的是一对有趣的问题:如何用两个栈(队列)实现一个队列(栈),下面将分别说明,并附示例代码. 1.用两个栈实现一个队列 基本思路:初始有两个空栈s1和s2,当入队列是,将元素加入s1,而出队列则从s2出,当然s1与s2之间存在一定的交互. 入队:元素压入栈s1即可. 出队:首先看s2是否为空,若s2为空,则依次弹出s1的元素,加入s2中:若不为空,则不需额外处理: 之后弹出s2中的栈顶元素(即为队列的首元素)删除即可.

两个文件拼一个

网上的题 文件a.txt ATCGTCGAGTCGA GTCGTAGCT CGATGCTAACTCAA CGATCGATCAGCAT 文件 b.txt 23 45 34 76 34 67 37 78 请输出文件 ATCGTCGAGTCGA 23 45 GTCGTAGCT 34 76 CGATGCTAACTCAA 34 67 CGATCGATCAGCAT 37 78 直接上代码 #!/usr/bin/perl -w use strict; my (@array1,@array2); open my

Android向上推送式菜单,两个视图在同一布局内同屏显示。

最近在写一个百度地图的小应用,毕竟屏就那么大一点,要在上面放几个按钮,怎么布置都难看.百度了一下,发现侧滑菜单挺好,可百度地图就是用手滑的啊,你妹,这两个玩意居然还冲突,我去年买了个表.于是乎,就想到了上推菜单,不能用滑屏来处理,那就用个按钮来激发上推事件吧.因为是新手啥JB玩意都不懂,问群里的大大们,说得用平移动画,我又百度了半天一看都TM太高大上,用不好.偶然在一段代码中发现了 LinearLayout.LayoutParams lp = new LinearLayout.LayoutPar