美文网首页
与LCD移植相关的概念

与LCD移植相关的概念

作者: 弘二大师 | 来源:发表于2017-11-22 10:36 被阅读0次

    1. N bit的 LCD 指的是什么意思?

    我们常常会说18bit 的LCD, 24 bit 的LCD, 是什么意思呢?

    18/24 bit 指的是LCD 数据总线的宽度。

    如下图RGB的数据总线:


    这里写图片描述

    搞清楚这个是很简单的,但如果你在配置设备树时遇到这样的情况, 往往很容易混淆:

    mxcfb1: fb@0 {
    compatible = "fsl,mxc_sdc_fb";
    interface_pix_fmt = "RGB666";
    default_bpp = <32>;
    status = "okay";
    };

    interface_pix_fmt 指的是什么? default_bpp又指的是什么?
    default_bpp:

    default_bpp 是指frambuffer 的颜色深度, bit per pixel, 顾名思义, 就是每一个像素由多个bit 表示。 注意, 这是描述的framebuffer 的, 不是LCD HW。

    interface_pix_fmt:

    interface_pix_fmt 指LCD HW 输出信号格式。如RGB565,RGB888,GRB888,BGR888,RGB666等。顾名思义,interface_pix_fmt 就是一个LCD 接口输出一个像素的格式。
    一个18bit的LCD有可能输出RGB666, BGR666,GBR666. 其他依次类推!

    framebuffer 的32bpp 的数据是如何转化为接口上的格式的呢?

    是由硬件自动转换的。

    framebuffer 的RGBA8888 转化为接口的RGB888,是不需要转化的。转化为RGB666/565就得硬件参与转化。

    罗嗦了这么多,不过还有一个问题需要注意:就是一个18bit的屏幕,你的接口配置是RGB888呢?还是RGB666呢,还是GRB666 .....

    这个要完全看你的HW接法,如果你的HW 工程师按照RGB888 格式接了, 只是把最低位的01两位没有接, 这时LCD 可以正常显示。虽然色深减低了, 但肉眼是没有办法察觉的。这是一种。
    另外一种是RGB666的接法,这种接法在有些ARM平台上是和RGB888 的接的pin 完全不一样。如果你的接口还是用RGB24 那一定显示会出问题。
    AM335x 平台RGB888和RGB666能兼容。

    2. LCD Timing
    关于LCD timing 概念介绍,请参照下图:

    0_1332308765VvL6.gif.png
    其解释如下:
    Screenshot-2017-11-22 LCD参数解释及计算 - CSDN博客.png
    这些参数大都是从LCD datasheet 上查出来的(pixelclock 除外)。hsync_len 和vsync_len 分别是hsync和vsync 同步信号所需要的时间,有些LCD device 会对这两参数指定, 有些没有,可以随意指定。
    知道了这些值之后,你需要通过下面的公式得出pixelclock 的值:

    F=(left_margin+xres+right_margin+hsync_len) x (upper_margin+yres+lower_margin+vsync_len)x refresh
    pixelclock = 1/F

    这个公式是你理解这些参数的关键。
    了解了这些参数的含义后,我们将会举一个栗子来说明具体的应用。
    假设,我们LCD datasheet 给出了下面一段信息:

    LCD_Timing.png
    这幅图中有三种推荐值,min, type,Max。有经验的工程师会告诉你,一般选type,没错,但特殊情况呢?特殊情况有时什么? 有经验的工程师哥哥并没有告诉过我们。

    我们刚才描述了pixelclock 的计算方法,但如果你计算出来的pixelclock不符合LCD 时钟源pll 分频范围,这个pixelclock 的时钟仍然不能用。为什么呢?
    我们先描述下,pixelclock 的时钟来源,pixelclock不是天上掉下来的,他的来源于为LCD 提供时钟的PLL. pixelclock 是经过该PLL分频得来的。
    如果,PLL最大只能分频50MHz,而你的pixelclock需要60MHz的clock, 如此,这是无论如何也办不到。软件只能给你分出他最大的频率50MHz。此时你拿着参数去显示,必定会有问题。

    如果遇到这个问题,我们一般该怎么处理:

    方案一:
    修改该pll的时钟源,使其适应对应的pixelclock,这种方案一般不推荐,因为麻烦,不得以才为之。
    方案二:
    根据需要调整相应的LCD timing 参数,使对应的pixelclock 满足pll的分频条件。

    方案二解答了我们对为什么lcd datasheet 会同时存在min.type.max三组值 的困惑。 其实不只有三组值,你完全可以通过上面那个公式计算出各种你想要的pixelclock。

    我们再罗嗦一下上面那张LCD timing 的图:
    Period : 指一行像素数目/一列的行数
    Active: 就是激活的像素/行,也就是有效的像素数目/有效的行。如果800x600, 那么行有800哥active像素,列有600个active的行。
    Blanking:H Blanking=left_margin+right_margin+hsync_len
    V Blanking =upper_margin+lower_margin+vsync_len

    至此,关于LCD 概念上的东西基本描述完了。希望对你有所帮助!

    相关文章

      网友评论

          本文标题:与LCD移植相关的概念

          本文链接:https://www.haomeiwen.com/subject/ikrnvxtx.html