uboot向内核传递的是什么参数_飞凌小课堂丨基于IMX6X系列3.0.35内核的LCD移植

本文主要使用平台是 imx6x 系列, linux3.0.35 操作系统。参考用户资料是OKMX6Q-C、OKMX6DL-C (Linux)用户资料-2018.11.28。

我们在调试LCD屏幕是否能够在开发板上使用的时候,首先应该判断屏幕硬件上使用的线序是否能够和开发板上的硬件线序一致;硬件上能够接到开发板上才能够谈后边的软件调试。接着硬件接好后判断LCD屏幕是否被点亮,如果屏幕不能够点亮,先要检查一下PWM背光控制;屏幕能够被点亮了,我们才能够调试显示,也就是我们这篇文章的主要目的。

下面我们以调试10.4吋LCD屏幕显示为例,简单说一下LCD调试时软件需要做的主要修改。

01-关于uboot部分的修改

关于UBOOT部分的修改,主要的作用是能够正常显示开机logo,以及将内核需要的参数信息传递给内核。UBOOT修改主要涉及到以下两个文件:

❶ 修改uboot-2009-08/include/configs/mx6q_sabresd.h中的显示参数,如下面两张图片的红色方框部分

af99acc42a47233cb4897937eb24a13c.png

a4678c06c7c2ede18ecd149c5b408708.png

❷ 修改board/freescale/mx6q_sabresd/mx6q_sabresd.c文件系统,添加LCD显示的参数:红色部分为添加项。

static struct fb_videomode displays[] = {
{
.name = "AT104-WVGA",
.refresh = 60,
.xres = 800,
.yres = 600,
.pixclock = 25000,
.left_margin = 210,
.right_margin = 40,
.upper_margin = 23,
.lower_margin = 3,
.hsync_len = 6,
.vsync_len =2,
.sync = FB_SYNC_CLK_LAT_FALL,
.vmode = FB_VMODE_NONINTERLACED,
.flag = 0,
.mode = FB_VIDEOMODE_LCD,
},

02-内核相关部分修改

内核部分的LCD配置,就是LCD屏幕系统启动后的正常显示。主要修改一个文件就可以了。

修改linux-3.0.35/drivers/video/mxc/mxc_lcdif.c文件,在以下结构体中添加红色部分,红色部分的参数我们介意看到和UBOOT中的参数是一致的。

static struct fb_videomode lcdif_modedb[] = {
………………….
/* 800x480 @ 60 Hz , pixel clk @ 33.3MHz */
"AT070-WVGA", 60, 800, 480, 30030, 210, 46, 22, 23, 10, 10,
FB_SYNC_CLK_LAT_FALL,
FB_VMODE_NONINTERLACED,
0,},
…………………………………….
{
"AT104-WVGA", 60, 800, 600, 25000, 210,40, 23, 3, 6, 2,
FB_SYNC_CLK_LAT_FALL,
FB_VMODE_NONINTERLACED,
0,},
};

特别强调:

AT104-WVGA这个名字需要在UBOOT中的设置以及内核中的设置保持一致,名称没有限制,唯一要求是UBOOT和内核中一定要一致。

LCD显示部分我们经常涉及到的修改,主要是以上提到的部分,修改完成后将重新编译生成的镜像烧写到开发板中,接上10.4吋LCD屏就可以看到,屏幕能够正常显示了。

03-相关参数理解

对于涉及到的LCD参数值的设置,可能有些客户不太了解,下面小编简单说下自己的理解:

首先看一下在内核的include/linux/fb.h文件中关于fb_videomode的定义:

e84bc09962712441fe29168aed5a7498.png

以上定义的参数和UBOOT中也是对应的。这些值是由LCD厂家提供的屏体手册来确定的。

接着我们以10.4吋为例看一下10.4吋屏的屏体手册中的参数

705b93453d09aa3a3553fb963a7d024e.png

其中图中红色方框的28指的是vertical的Blanking典型值,红色方框中的256指的是Horizontal的Blanking的典型值。

下面有个框图展示了这些参数的关系:

3a417de8f0c7d87c2db36a23ff66fa03.png

通过以上示意图我们可以了解到,在10.4吋屏的屏体手册中

Left_margin+right_margin+hsync_len=256

Upper_margin+lower_margin+vsync_len=28

我们在设置left_margin,right_margin,hsync_len三个值得时候保证他们的和是256即可,在upper_margin,lower_margin,vsync_len三个值得时候保证他们的和是28即可。

有些LCD手册中会直接给出这6个参数的值,那么就可以根据硬件手册给出的值直接设置,调试的时候微调即可。

pxclock参数的确定方法:

dotclock=1/dotclock,其中dotclock可以选取手册中的典型值40MHz,那么计算出pixclock=25000皮秒

实际刷新频率=40000000Hz÷((Left_margin+right_margin+hsync_len+xres)*(Upper_margin+lower_margin+vsync_len+yres))≈60Hz

我们将修改后的镜像烧写到开发板之后,通过fbset命令可以看到屏幕设置的实际参数如下图:

3769ed28cb548ed9dc259f420ef3f779.png

手册上提供的这些参考值,可以根据实际的使用情况微调。

简单的一个表,明确一下fb_videomode的各个成员的意义:

bff84c83f5615cba0046ecbaf32eb0d9.png

本篇只是给初学者起到一个抛砖引玉的作用,很多参数没有细研究,在此不做过多解释。LCD方面的驱动以及支持很博大精深,有兴趣的粉丝可以自己研究研究,大家也可以登录飞凌官方技术论坛了解更多相关内容。

更多方案,更多应用,可进入飞凌嵌入式官网查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值