imx6dl需要支持lcd接口的屏,imx6dl的datasheet并没有明确的说明lcd相关的配置,只在Display Content Integrity Checker (DCIC)一章中介绍。本文记录imx6支持lcd的方法。

参考链接

http://developer.toradex.com/knowledge-base/display-output-resolution-and-timings-linux

https://community.nxp.com/thread/307613

http://cache.freescale.com/files/32bit/doc/user_guide/MX53UG.pdf

https://boundarydevices.com/configuring-i-mx6-machines-different-screens-nitrogen6x-sabre-lite/

uboot

更改bootargs,添加lcd支持:video=mxcfb0:dev=lcd,SEIKO-WVGA,if=RGB24,bpp=32

include/configs/mx6dl_sabresd_android.h

#define CONFIG_EXTRA_ENV_SETTINGS                   \
"netdev=eth0\0" \
"ethprime=FEC0\0" \
"uboot=u-boot.bin\0" \
"kernel=uImage\0" \
"nfsroot=/opt/eldk/arm\0" \
"bootargs_base=setenv bootargs console=ttymxc0,115200 video=mxcfb0:dev=lcd,SEIKO-WVGA,if=RGB24,bpp=32\0"\
"bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs "\
"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0"\
"bootcmd_net=run bootargs_base bootargs_nfs; " \
"tftpboot ${loadaddr} ${kernel}; bootm\0" \
"bootargs_mmc=setenv bootargs ${bootargs} ip=none " \
"root=/dev/mmcblk0p1 rootwait\0" \
"bootcmd_mmc=run bootargs_base bootargs_mmc; " \
"mmc dev 2; " \
"mmc read ${loadaddr} 0x800 0x3000; bootm\0" \
"bootcmd=run bootcmd_mmc\0 " \
"splashimage=0x30000000\0" \
"splashpos=m,m\0" \
"lvds_num=1\0"

kernel

需要注册设备和驱动

device

配置引脚复用

arch/arm/mach-mx6/board-mx6dl_sabresd.h

static iomux_v3_cfg_t mx6dl_sabresd_pads[] = {
......
MX6DL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK,
MX6DL_PAD_DI0_PIN15__IPU1_DI0_PIN15, /* DE */
MX6DL_PAD_DI0_PIN2__IPU1_DI0_PIN2, /* HSync */
MX6DL_PAD_DI0_PIN3__IPU1_DI0_PIN3, /* VSync */
MX6DL_PAD_DI0_PIN4__IPU1_DI0_PIN4, /* Contrast */
MX6DL_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0,
MX6DL_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1,
MX6DL_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2,
MX6DL_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3,
MX6DL_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4,
MX6DL_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5,
MX6DL_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6,
MX6DL_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7,
MX6DL_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8,
MX6DL_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9,
MX6DL_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10,
MX6DL_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11,
MX6DL_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12,
MX6DL_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13,
MX6DL_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14,
MX6DL_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15,
MX6DL_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16,
MX6DL_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17,
MX6DL_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18,
MX6DL_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19,
MX6DL_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20,
MX6DL_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21,
MX6DL_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22,
MX6DL_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23,
......
};

设备初始化

arch/arm/mach-mx6/board-mx6q_sabresd.c

// 与bootargs中"dev=lcd,SEIKO-WVGA" 对应
static struct ipuv3_fb_platform_data sabresd_fb_data[] = {
// Tony 2016-11-22
{
.disp_dev = "lcd",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "SEIKO-WVGA",
.default_bpp = 32,
.int_clk = false,
},
{ /*fb0*/
.disp_dev = "ldb",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "LDB-XGA",
//.default_bpp = 16,
.default_bpp = 24,
.int_clk = false,
.late_init = false,
}, {
.disp_dev = "hdmi",
.interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "1920x1080M@60",
.default_bpp = 32,
.int_clk = false,
.late_init = false,
}, {
}; static struct fsl_mxc_lcd_platform_data lcdif_data = {
.ipu_id = 0, // ipu 0
.disp_id = 0, // 第0个接口
.default_ifmt = IPU_PIX_FMT_RGB24,
}; // lcd初始化
static void __init mx6_sabresd_board_init(void)
{
......
imx6q_add_ipuv3(0, &ipu_data[0]);
if (cpu_is_mx6q()) {
imx6q_add_ipuv3(1, &ipu_data[1]);
for (i = 0; i < 4 && i < ARRAY_SIZE(sabresd_fb_data); i++)
imx6q_add_ipuv3fb(i, &sabresd_fb_data[i]);
} else
for (i = 0; i < 2 && i < ARRAY_SIZE(sabresd_fb_data); i++) //不知道这里为什么要i<2,难道因为imx6的ipu只有2个接口?
imx6q_add_ipuv3fb(i, &sabresd_fb_data[i]); imx6q_add_lcdif(&lcdif_data);
......
}

driver

添加lcd的驱动支持

make menuconfig

选择 SEIKO WVGA Panel

Prompt: SEIKO WVGA Panel
Defined at drivers/video/mxc/Kconfig:55
Depends on: HAS_IOMEM [=y] && ARCH_MXC [=y] && FB_MXC_SYNC_PANEL [=y]
Location:
-> Device Drivers
-> Graphics support
-> MXC Framebuffer support (FB_MXC [=y])
-> Synchronous Panel Framebuffer (FB_MXC_SYNC_PANEL [=y])

更改LCD参数。

drivers/video/mxc/mxc_lcdif.c

static struct fb_videomode lcdif_modedb[] = {
...
{
/* 640x480 @ 60 Hz , pixel clk @ 25MHz */
"SEIKO-WVGA", 60, 640, 480, 40000, 89, 164, 23, 10, 10, 10,
FB_SYNC_CLK_LAT_FALL,
FB_VMODE_NONINTERLACED,
0,},
...
};

Tony Liu

2016-11-28, Shenzhen

imx6 RGB LCD的更多相关文章

  1. I.MX6 Parallel RGB LCD Datasheet描述

    /******************************************************************** * I.MX6 Parallel RGB LCD Datas ...

  2. imx6 uboot lcd

    本文记录imx6 uboot中关于lcd初始化的过程. uboot中相关的文件: cpu/arm_cortexa8/start.S lib_arm/board.c board/freescale/mx ...

  3. LCD接口和RGB介绍【转】

    转自:https://www.cnblogs.com/hzl6255/p/5470583.html 阅读目录 1. 介绍 2. 接口类型 3. RGB 4. YUV 5. FOURCC 回到顶部 1. ...

  4. LCD接口和RGB介绍

    1. 介绍 Video的显示离不开LCD, 所以这里简单介绍一下LCD的接口和RGB LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器LCD目前已经取代CRT, 成为 ...

  5. LCD RGB 控制技术讲解 — 时钟篇(上)

    时序图 下面是LCD RGB 控制的典型时序图  天啊,一下就上这玩意,怎么看??? 其实要解释上面的时序图,我们还需要了解一些LCD的显示过程.所以现在只是有个印象,稍后我们详细讲解. LCD显示流 ...

  6. LCD RGB 控制技术讲解 — 时钟篇(上)【转】

    1. 时序图 下面是LCD RGB 控制的典型时序图 天啊,一下就上这玩意,怎么看??? 其实要解释上面的时序图,我们还需要了解一些LCD的显示过程.所以现在只是有个印象,稍后我们详细讲解. 2. L ...

  7. 【团购活动】接口最全最好用的S5PV210开发板Sate210-F 开发板开始团购活动了,一起学习linux!

    接口最全最好用的S5PV210开发板Sate210-F 开发板开始团购活动了,一起学习linux!http://bbs.eeworld.com.cn/forum.php?mod=viewthread& ...

  8. 【原创】在RT1050 LittleVgl GUI中嵌入中文输入法框架

    时隔一年多终于又冒泡了,哎,随着工作越来越忙,自己踏实坐下来写点东西真是越来越费劲,这篇文章也是准备了好久好久才打算发表出来(不瞒大家,东西做完好久了,文章憋了一年了,当真"高产" ...

  9. LCD LED OLED区别 以及RGB、YUV和HSV颜色空间模型

    led 液晶本身不发光,而是有背光作为灯源,白色是由红绿蓝三色组成,黑色是,液晶挡住了led灯光穿过显示器. lcd比led更薄. oled:显示黑色时,灯是灭的,所以显示黑色更深,效果更好. 这就不 ...

随机推荐

  1. 【BZOJ】1441: Min(裴蜀定理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1441 这东西竟然还有个名词叫裴蜀定理................ 裸题不说....<初等数 ...

  2. 【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有时候人蠢还真是蠢.一开始我看不懂期望啊..白书上其实讲得很详细的,什么全概率,全期望(这个压 ...

  3. 【BZOJ】3224: Tyvj 1728 普通平衡树(某不科学的oj)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3224 无力吐槽,无力吐槽,无力吐槽....... bzoj竟然不能用time(0)我竟然不造!!re ...

  4. POJ 1095 Trees Made to Order(卡特兰数列)

    题目链接 中间计算的各种细节.有的细节没处理好,就wa了...主要思路就是根据卡特兰数列的: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n&g ...

  5. CentOS 拷贝mysql数据库到新的硬盘报错了

    服务器硬盘满了,加了一块,在目录 下新建了 mkdir /mysql cp -r /var/lib/mysql/* /mysql chown -R mysql:root /mysql 更改/etc/m ...

  6. 通过ReflectionMethod,我们可以得到Person类的某个方法的信息

    PHP反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互.借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传 ...

  7. [转]发送邮件提示“551 User not local; please try ”错误的原因及解决办法

    本文转自:http://www.biglee.cn/blog/article.asp?id=204 一网站要嵌入一个客户反馈系统.为了方便收集反馈信息,并能及时查看信息,我决定以将反馈内容提交到邮箱. ...

  8. java 中的instanceof的用法

    instanceof 运算符是Java.php的一个二元操作符(运算符),和==.>.<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右 ...

  9. 【贴图】网友 snoopy 用《iHMI43 液晶模块》做的界面给大家看看

    请大家欣赏! iHMI43 4.3寸液晶模块购买地址: http://item.taobao.com/item.htm?id=20508376359

  10. NVlink

    Nvidia's Pascal to use stacked memory, proprietary NVLink interconnect by Scott Wasson — 6:50 PM on ...