查看: 3908|回复: 1

[原创] RIoTboard连载八 板子7寸LCD参数配置和对应驱动修改

[复制链接]

15

主题

4

好友

903

积分

举人

Rank: 4

  • TA的每日心情
    开心
    2016-9-29 15:49
  • 签到天数: 113 天

    [LV.6]常住居民II

    爱板会员勋章 活跃会员勋章

    发表于 2014-5-18 20:31:21 |显示全部楼层
    LCD驱动板可以工作了,那我们就看下RIOTBOARD板子上和LCD驱动相关的东西。按照官方手册内容,LVDS输出时适合9.7寸LCD的,我们要更换LCD的话,就必须自己学会阅读驱动源码和配置参数。在看驱动之前我们首先应该了解LCD的显示原理,这个说简单也简单,说麻烦一不是一两句就能说明白的,和我们主题不是那么相关,在这里就不阐述了,但是我们必须要看一下linux系统对LCD这个硬件做的抽象(详细参见:Documentation\fb\framebuffer.txt,源代码中Doucumentation下的文档都是很好的文档,能解决大家很多迷惑的问题,有时候大家一筹莫展的时候看看这个文件夹下的相关文档,也许大家就会豁然开朗。)
    lcd.PNG

    图中重要的参数有7个,下面我就看看这个抽象有关的数据结构参数和定义:
    RIOTboard板子的源代码中结构体如下:
    struct fb_videomode {
             constchar *name;  /* optional */
             u32refresh;              /* optional */
             u32xres;
             u32yres;
             u32pixclock;
             u32left_margin;
             u32right_margin;
             u32upper_margin;
             u32lower_margin;
             u32hsync_len;
             u32vsync_len;
             u32sync;
             u32vmode;
             u32flag;
    };

    具体含义:
      
    名称
      
    意义
    备注
    const char *name
    LCD名字,可以自己定义
    u32 refresh
    刷新频率,一般定义为60
    u32 xres
    行像素
    u32 yres
    列像素
    u32 pixclock
    像素时钟
    u32 left_margin
    在每行或每列的象素数据开始输出时要插入的象素时钟周期数
    u32 right_margin
    在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数
    u32 upper_margin
    在垂直同步周期之后帧开头时的无效行数
    u32 lower_margin
    本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数
    u32 hsync_len
    行同步脉宽
    u32 vsync_len
    场同步脉宽
    u32 sync
    同步极性设置
    可根据情况自行设置
    u32 vmode
    一般配置为隔行扫描
    u32 flag
    未使用

    下面我们就看看根据我们实际的LCD规格书来填充这些参数,首先我们看LCD规格书中的timing时序:
    lcd1.PNG

    以上就是关于LCD的主要参数列表。
    下面看看根据我们自己LCD规格书配置参数。
    Const char *name:这个是对应的LCD参数的名字,可以自己起名,但是要和后面给内核传递的参数名字一样。
    Refresh:这个就是我们熟悉的刷新频率,我们不讨论LCDCRT的刷新频率问题,这里选择默认60就好了。
    XresYres这两个是分辨率参数,即行和列的像素个数,我们的LCD800*480的,直接就填写800480就行了.
    Pixclock:是像素时钟,在linux文档中给出了计算公式:
    Pixelclock:
      xfree: in MHz
      fb: in picoseconds (ps)
      pixclock = 1000000 / DCF
    下面看看后面6个参数的计算,首先看看LCD规格书里面的timing参数:
    可以看到LCD时钟是33.3M,所以pixclock=1000000/33.3=30030
    行同步脉冲宽度是一个时钟周期,所以,hsync_len=1
    场同步脉冲的宽度是一个行周期,所以vsync_len = 1
    然后看看一帧图像的时序图:
    lcd2.PNG

    根据up_margin定义:在垂直同步周期之后帧开头时的无效行数,也就是图中的tvb-tvpw23-1=22
    根据lower_margin定义:本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数
    Lower_margin=tv-tvd-up_margin,就是525-480-22=23.
    然后再看看一行的时序图:
    lcd3.PNG

    这个图有点模糊了,根据left_margin          定义:在每行或每列的象素数据开始输出时要插入的象素时钟周期数,left_margin=thb,即46
    根据u32 right_margin定义:在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数.right_margin=th-thd-thb,即1056-800-46=210.
    这样相对于LCD的主要参数我们就设置完毕了。
    根据上述的内容来修改RIoTboardLCD配置文件,来使LCD的分辨率等参数适合我们的7LCD
    首先我们看看使用LVDS0通道输出的配置步骤:
    1.     打开ldb.c文件找到static struct fb_videomode ldb_modedb[]这个结构体定义:
    结构体定义中将LCD配置参数修改为适合我们LCD的配置参数,具体配置方式上文给出了分析,请自行查阅,其中红色字体是我们根据上述计算内容修改好的:
    staticstruct fb_videomode ldb_modedb[] = {
    {
      "LDB-WXGA", 60, 1280, 800, 14065,
      40, 40,
      10, 3,
      80, 10,
      0,
      FB_VMODE_NONINTERLACED,
      FB_MODE_IS_DETAILED,},
      {
      "LDB-XGA", 60, 800, 480, 30030,
      210, 46,
      22, 23,
      1, 1,
            0,
           FB_VMODE_NONINTERLACED,
            FB_MODE_IS_DETAILED,},
      {
      "LDB-1080P60", 60, 1920, 1080, 7692,
      100, 40,
      30, 3,
      10, 2,
      0,
      FB_VMODE_NONINTERLACED,
      FB_MODE_IS_DETAILED,},
    };
    2.      调整BSP文件,找到board-mx6q-riot.c文件,找到static struct fsl_mxc_ldb_platform_data ldb_data结构体定义:
    staticstruct fsl_mxc_ldb_platform_data ldb_data = {
    .ipu_id = 0,
    .disp_id = 0,
    .ext_ref = 1,
    .mode = LDB_SEP0,//这个地方设置LVDS输出通道,LDB_SEP0为LVDS0通道输出。
    .sec_ipu_id = 0,
    .sec_disp_id = 1,
    };
    这个LVDS输出通道,RIoTboard上默认也是使用LVDS0,所以我们就不用修改了
    现在主要修改这两个参数,然后重新编译kernel,下载运行,就可以看到我们的ubuntu在7寸屏上的完美显示了。


    已有 1 人评分声望 铜板 收起 理由
    奔跑-350257 + 3 + 5 粗略瞄了一眼,很详细,赞一个!.

    总评分: 声望 + 3  铜板 + 5   查看全部评分

    回复

    使用道具 举报

    0

    主题

    0

    好友

    403

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    奋斗
    2014-8-20 06:55
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2014-5-18 20:50:21 |显示全部楼层
    相当nice的文章!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-3 14:46 , Processed in 0.158851 second(s), 15 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部