260 likes | 433 Views
Linux 帧缓冲. 北京博创兴业科技有限公司. LCD 简介. 主讲人:张笑天. zhangxt_uptech@126.com. LCD 简介. 液晶显示是一种被动的显示,它不能发光,只能使用周围环境的光。它显示图案或字符只需很小能量。液晶显示所用的液晶材料是一种兼有液态和固体双重性质的有机物,它的棒状结构在液晶盒内一般平行排列,但在电场作用下能改变其排列方向. LCD 的背光. EL (场致发光): 2000-3000 小时 以黄绿色为主,常用于小型灰度 LCD 背光 LED 光源: 50000 小时 成本低、寿命长、支流供电,发光电压低、体积小
E N D
Linux 帧缓冲 北京博创兴业科技有限公司
LCD简介 主讲人:张笑天 zhangxt_uptech@126.com
LCD 简介 液晶显示是一种被动的显示,它不能发光,只能使用周围环境的光。它显示图案或字符只需很小能量。液晶显示所用的液晶材料是一种兼有液态和固体双重性质的有机物,它的棒状结构在液晶盒内一般平行排列,但在电场作用下能改变其排列方向
LCD 的背光 • EL(场致发光):2000-3000小时 以黄绿色为主,常用于小型灰度LCD背光 • LED光源:50000小时 成本低、寿命长、支流供电,发光电压低、体积小 • CCFL(冷阴极荧光灯):60000小时 需要高压交流,体积大
LCD的显示方式 • 反射型LCD:底偏光片后面加了一块反射板,它一般在户外和光线良好的办公室使用。 • 透射型LCD:底偏光片是透射偏光片,它需要连续使用背光源,一般在光线差的环境使用。 • 透反射型LCD:是处于以上两者之间,底偏光片能部分反光,一般也带背光源,光线好的时候,可关掉背光源;光线差时,可点亮背光源使用LCD。
LCD驱动方式 • 一种是带有LCD扫描芯片的LCD模块 • 一种是通过LCD控制器,直接扫描LCD屏。 比如:S3C2410处理器,带有LCD控制器,显示缓存和系统内存公用。可以支持STN(彩色/灰度)和TFT两种模式的LCD TFT模式下最多支持18位色,800x600分辨率。
嵌入式处理器 数据总线 LCD模块 寄存器选择 使能信号 LCD 有LCD控制器的嵌入式处理器 LCD控制信号线 嵌入式处理器与LCD的连接
S3C2410的LCD扫描模式 • 4/8位,单/双扫描模式,CSTN • 最多256级灰度 • 显示缓冲区支持15、16、24位TFT模式 • 支持RGB格式
典型的LCD模式信号线 • LDD<17:0>,数据线 • L_PCLK,点时钟 • L_LCLK,行频 • L_FCLK,帧频 • L_BIAS,CSTN的AC信号,TFT的开启信号
TFT常见信号线 • VSYNC——帧同步信号(垂直) • HSYNC——行同步信号(水平) • VCLK——时钟 • VDEN——数据有效控制 • VD——数据信号
显示缓冲与显示点的对应 • 4位单扫描显示缓冲的对应关系 • 1个字节存储两个点的信息 • 16级灰度
8位单扫描显示缓冲的对应关系 标准映射: • 1个字节存储1个点的信息 • 可以是用调色板
Framebuffer的结构 • 在Linux系统下,把显示缓冲区映射给用户空间 • 应用程序直接操作显示缓冲区(mmap) • Linux中,有对framebuffer的专门支持,提供系统的ioctl • X86下就有支持,软件容易移植
Framebuffer的应用 • Linux的framebuffer接口提供给用户访问显示设备的通用接口 • 通过mmap映射显示缓冲给用户 • 不包括任何绘图接口
Framebuffer使用练习 • 常用接口 • 重要结构体: 在fb.h文件中定义了下列结构: fb_info 、fb_fix_screeninfo、fb_var_screeninfo、fb_cmap等 /usr/src/linux-2.4.20-8/include/linux/fb.h /usr/src/linux-2.4.20-8/drivers/video/fbmem.c /usr/src/linux-2.4.20-8/drivers/video/fbcmap.c
常用接口 • 在fbmem.c文件中定义了对framebuffer的操作 static struct file_operations fb_fops = { owner: THIS_MODULE, read: fb_read, write: fb_write, ioctl: fb_ioctl, mmap: fb_mmap, open: fb_open, release: fb_release, #ifdef HAVE_ARCH_FB_UNMAPPED_AREA get_unmapped_area: get_fb_unmapped_area, #endif };
常用接口 • mmap • 说明: 一般情况下是将设备内存映射到用户空间 #include <sys/mman.h> void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
常用接口 • 常用的ioctl if (ioctl(fb, FBIOGET_VSCREENINFO, &fb_vinfo)) { printf("Can't get VSCREENINFO: %s\n", strerror(errno)); close(fb); return -1; } if (ioctl(fb, FBIOGET_FSCREENINFO, &fb_finfo)) { printf("Can't get FSCREENINFO: %s\n", strerror(errno)); return 1; }