飞凌小课堂丨基于IMX6X系列3.0.35内核的LCD移植

i.mx 6系列应用处理器提供了一个功能和性能可扩展的多核平台,包括基于Cortex的单核、双核和四核系列,包括Cortex-A9、Cortex-A9+Cortex-M4组合和基于Cortex-A7的解决方案。

本文主要使用平台是 imx6 四核、双核系列, linux3.0.35 操作系统。
参考用户资料是飞凌嵌入式OKMX6Q-C、OKMX6DL-C (Linux)用户资料-2018.11.28。

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

下面将以调试10.4吋LCD屏幕显示为例,简单说一下LCD调试时软件需要做的主要修改。
1、关于uboot部分的修改

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

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

[wps40.jpg]

[wps41.jpg]

❷ 修改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,

},、

2、内核相关部分修改

内核部分的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屏就可以看到,屏幕能够正常显示了。

3、相关参数理解

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

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

[wps42.jpg]

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

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

[wps43.jpg]

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

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

[wps44.jpg]

通过以上示意图我们可以了解到,在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命令可以看到屏幕设置的实际参数如下图:

[wps45.jpg]

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

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

在这里插入图片描述在这里插入图片描述

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于imx6ul的入门,我能够找到三个相关的引用内容。首先是内核自带的IMX6ULL LCD驱动程序,该驱动程序的源码可以在Linux内核的drivers\video\fbdev\mxsfb.c路径下找到。其次是imx6ul环境搭建脚本,使用该脚本可以在凌嵌入式imx6ul-c2的板子上搭建开发环境。最后是IMX6ULL的LCD裸机程序,可以在IMX6ULL\source\03_LCD\05_参考的裸机源码\03_font_test路径下找到。关于59管脚,我没有找到与之相关的信息。 所以,对于imx6ul入门以及59管脚的具体信息,可能需要进一步的资料来获取答案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [嵌入式Linux上机实验_基于IMX6ULL](https://blog.csdn.net/thisway_diy/article/details/119905729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [imx6ul 环境搭建脚本](https://download.csdn.net/download/u011019070/12788112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值