热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

imx6LCD参数配置(lvds为例)

目前imx6的BSP开发中,lvds的参数配置一般在两个地方:1.uboot的CMDLINE的参数设置,形如:videomxcfb0:devldb,bpp322.uboot板级

目前imx6的BSP开发中,lvds的参数配置一般在两个地方:
1. uboot的CMDLINE的参数设置,形如:
video=mxcfb0:dev=ldb,bpp=32
2. uboot板级代码中对struct display_info_t的配置,形如:

static struct display_info_t const displays[] = {{
.bus = -1,
.addr = 0,
.pixfmt = IPU_PIX_FMT_LVDS666,
.detect = NULL,
.enable = NULL,
.mode = {
.name = "wvga-lvds",
.refresh = 60,
.xres = 800,
.yres = 480,
.pixclock = 30066,
.left_margin = 88,//HBPD
.right_margin = 140,//HFPD
.upper_margin = 31,//VBPD
.lower_margin = 10, //VFBD
.hsync_len = 28,//HSPW
.vsync_len = 4,//VSPW
.sync = FB_SYNC_EXT,
.vmode = FB_VMODE_NONINTERLACED
}
}}

3.kernel中设备树对ldb的配置,形如:

&ldb {
lvds-channel@0 {
fsl,data-mapping = "spwg";
fsl,data-width = <24>;
primary;
status = "okay";

display-timings {
native-mode = <&timing0>;
timing0: claa080na23 {
clock-frequency = <33260000>;
hactive = <800>;
vactive = <480>;
hback-porch = <88>;
hfront-porch = <140>;
vback-porch = <31>;
vfront-porch = <10>;
hsync-len = <28>;
vsync-len = <4>;
};
};
};
};

下面几篇博客对lcd基础以及imx6相关方面的内容讲的都十分详细:
1. LCD参数解释及计算
2. LCD驱动中pixclock的计算
3. imx6 android4.3 bsp开发实录之一lvds、HDMMI输出显示
4. Kernel源码中文档:
Documentation/devicetree/bindings/video/fsl,ldb.txt
Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt
Documentation/devicetree/bindings/video/display-timing.txt

我这里对以上内容进行总结,并结合开发经验,对我们需要进行的配置项进行下归纳说明:

一. lcd相关参数说明:

下图必不可少:
这里写图片描述
具体参数(不同datasheet中定义名称略有差别):
1. VBP(vertical back porch):
表示在一帧图像开始时,垂直同步信号以后的无效的行数,
对应驱动/设备树中的upper_margin/vback-porch;
2. VFP(vertical front porch):
表示在一帧图像结束后,垂直同步信号以前的无效的行数,
对应驱动/设备树中的lower_margin/vfront-porch;
3. VSPW(vertical sync pulse width):
表示垂直同步脉冲的宽度,用行数计算,
对应驱动/设备树中的vsync_len/vsync-len;
4. HBP(horizontal back porch):
表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,
对应驱动/设备树中的left_margin/hback-porch;
5. HFP(horizontal front porth):
表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,
对应驱动/设备树中的right_margin/hfront-porch;
6. HSPW(horizontal sync pulse width):
表示水平同步信号的宽度,用VCLK计算,
对应驱动/设备树中的hsync_len/hsync-len;

以上都是无效显示区域,下面两个是我们lcd正真有效的显示区域,即分辨率:
7. VDP(vertical display period):
表示垂直显示有效区域,对应驱动/设备树中的对应yres/hactive
8. HDP(horizontal display period):
表示水平显示有效区域,对应驱动/设备树中的对应xres/vactive

此外还有两个时钟相关参数:
DOTCLK frequency(设备树中的clock-frequency)和驱动中的pixclock
DOTCLK在datasheet中能查阅到,它与pixclock的关系是:
pixclock = 1000000 / DOTCLK ,启动DOTCLK单位是MHz,pixclock单位是皮秒,例如:
若DOTCLK为33.26MHz,pixclock即为30066ps = 30.066ns

关于以上6个无效显示区域的配置,是根据datasheet中的Video Signal Timing来设置的,datasheet中还有两个参数VP和HP,即水平方向总长和垂直方向总长,他们与上述8个参数关系是:
VP = VBP + VDP + VFP + VSPW
HP = HBP + HDP + HFP + HSPW
若datasheet中没有这些参数的type值,而且根据时序图也无法计算出来,
就只能在min和max值之间进行选择尝试,注意:这8个值都非0,并且一定遵循上述2个公式
还有一点需要注意(不是很确定,看到有一个datasheet是这么定义的):
VSPW(min) HSPW(min)

二. 设备树中的配置:

  1. display-timings中的参数例如clock-frequency ,hactive ,vactive,hback-porch 等等在上面已经描述过了,经过查阅datasheet和调试,即可完成

  2. fsl,data-mapping和fsl,data-width的配置:
    fsl,data-mapping: Should be “spwg” or “jeida”.
    This describes how the color bits are laid out in the serialized LVDS signal.
    fsl,data-width: Should be <18> or <24>

data-mapping具体也要根据datasheet来设置,”spwg” 和 “jeida”遵循下图规则:
这里写图片描述

3.mode的选择:

/*
* "ldb=spl0/1" -- split mode on DI0/1
* "ldb=dul0/1" -- dual mode on DI0/1
* "ldb=sin0/1" -- single mode on LVDS0/1
* "ldb=sep0/1" -- separate mode begin from LVDS0/1
*
* there are two LVDS channels(LVDS0 and LVDS1) which can transfer video
* datas, there two channels can be used as split/dual/single/separate mode.
*
* split mode means display data from DI0 or DI1 will send to both channels
* LVDS0+LVDS1.
* dual mode means display data from DI0 or DI1 will be duplicated on LVDS0
* and LVDS1, it said, LVDS0 and LVDS1 has the same content.
* single mode means only work for DI0/DI1->LVDS0 or DI0/DI1->LVDS1.
* separate mode means you can make DI0/DI1->LVDS0 and DI0/DI1->LVDS1 work
* at the same time.
*/

根据如上说明,uboot参数中可以配置ldb的这四种模式,并且在设备树中,对于单通道和双通道也有以下配置:
- split-mode: Provide this bool property if your board uses LDB split
mode to drive a high resolution display, say 1080P@60. In this
mode, two LVDS channels will drive one display.
- dual-mode: Provide this bool property if your board uses LDB dual
mode to drive two displays. In this mode, one display engine will
drive two displays which have the same timings and display content.

对于大分辨率双通道lvds来说,需要配置设备树中:
lvds属性split-mode,
并且clock-frequency为datasheet中DCLK×2
还需要在uboot参数中添加:
ldb=spl0/1

我们项目中即将使用分辨率为1920*720的双通道lvds,待我验证完成以后,会对此博客进行详细说明和补充


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 求解连通树的最小长度及优化
    本文介绍了求解连通树的最小长度的方法,并通过四边形不等式进行了优化。具体方法为使用状态转移方程求解树的最小长度,并通过四边形不等式进行优化。 ... [详细]
author-avatar
xzh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有