1、LCD和FrameBuffer简介

1.1LCD的原理

LCD的原理:我们在液晶面板后面加白光(即背光板),然后通过不同的电信号,令液晶分子选择性透光,这样液晶面板就显示出了不同的颜色。
不难得出结论,LCD本身只会透光,不会发光。亮度控制是由背光板负责的。
当前主流的LCD是TFT,特点是超薄、清晰。

SoC(主控)如何控制LCD显示原理:
LCD驱动器:LCD驱动器一般与LCD面板集成在一起,面板需要一定的模拟电信号来控制液晶分子,LCD驱动器芯片负责给面板提供控制液晶分子的模拟电信号,驱动器的控制信号(数字信号)来自于LCD控制器的提供的接口。

LCD控制器:LCD控制器集成在SoC内部,它负责通过数字接口向外部的LCD驱动器提供要显示的像素数字信号。它必须按照一定的时序和LCD驱动器通信,LCD控制器受SoC控制,SoC会从内存中拿出像素数据给LCD控制器并最终传给LCD驱动器。

显存:SoC在内存中选一段内存,用来存放颜色数据(应用程序通过往显存中写数据),然后通过配置将LCD控制器和这一段内存连接起来,构成一个映射关系,一旦这个关系建立以后,LCD控制器就会自动从显存中读取像素数据传给LCD驱动器,LCD驱动器会自动的控制每个像素点的液晶分子,以形成最终的图像,建立这个映射以后就不需要SoC再来参与任何行为了。

总结一下:SoC控制LCD液晶显示的过程分为两个部分:

(1) SoC的LCD控制器引出一定的引脚与LCD驱动器连接,按照标准设置一定的时序;

(2) 把LCD要显示的像素信息放入内存中,再通过设置LCD控制器中的寄存器,与LCD控制器建立映射;之后过程就是LCD控制器芯片与驱动器芯片自动完成的事情了,整个LCD图像的显示过程就是这样,如下图所示。
    
    

1.2 FrameBuffer

FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。

Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。

但Framebuffer本身不具备任何运算数据的能力,就只好比是一个暂时存放水的水池.CPU将运算后的结果放到这个水池,水池再将结果流到显示器.中间不会对数据做处理. 应用程序也可以直接读写这个水池的内容.在这种机制下,尽管Framebuffer需要真正的显卡驱动的支持,但所有显示任务都由CPU完成,因此CPU负担很重.

framebuffer的设备文件一般是 /dev/fb0、/dev/fb1 等等。可以用命令: #ddif=/dev/zero of=/dev/fb 清空屏幕.如果显示模式是1024x768-8 位色,用命令:$ ddif=/dev/zero of=/dev/fb0 bs=1024 count=768 清空屏幕;用命令: #ddif=/dev/fb of=fbfile  可以将fb中的内容保存下来;可以重新写回屏幕: #ddif=fbfile of=/dev/fb;在使用Framebuffer时,Linux是将显卡置于图形模式下的.

在应用程序中,一般通过将FrameBuffer设备映射到进程地址空间的方式使用,比如下面的程序就打开 /dev/fb0 设备,并通过 mmap 系统调用进行地址映射,随后用 memset 将屏幕清空(这里假设显示模式是1024x768-8 位色模式,线性内存模式):

int fb;unsigned char* fb_mem;fb = open ("/dev/fb0", O_RDWR);fb_mem = mmap (NULL, 1024*768,PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);memset (fb_mem, 0, 1024*768);

FrameBuffer 设备还提供了若干 ioctl 命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等等。

2、LCD信号

对于嵌入式设备来说,最普遍的就是RGB信号

VD:数据信号,用来传输图像信息
HSYNC:帧同步信号,每发出一个脉冲,都意味着新的一屏图像数据开始发送
VSYNC:行同步信号,每发出一个脉冲,都意味着新的一行图像数据开始发送
VDEN:数据有效标志,时序信号,和HSYNC、VSYNC结合使用
LEND:行结束标志,时序信号,不是必须的,譬如210接口就没有
VCLK:时钟信号
在帧同步以及行同步的头尾都必须留有回扫时间。这样的时序安排起源于 CRT 显示器电子枪偏转所需要的时间,但后来成为实际上的工业标准,因此 TFT 屏也包含了回扫时间。

对于LCD来说,一般还有两个重要的输入信号,UPDN和SHLR,这两个信号的高低决定了LCD的扫描方向,通俗一点说就是决定了:LCD显示画面的上下、左右是否镜面反转。
这两个信号引脚一般直接硬件拉高拉低即可,软件不需要做任何的事情

3.LCD的接口(RGB接口)

物理接口主要有两种:
一种是ttl的接口,常用于7寸以下的LCD,以软排线相连。
一种是lvds差分信号的接口,抗干扰性比较好,常用于7寸以上的LCD,以软排线相接。常见的lvds接口分为四通道、五通道、十通道。

4、LCD的各种参数

RGB信号的六个时序参数:若要初始化soc中的LCD控制器,关键是设置如下七个时序参数

Clock frequency LCD的时钟频率,单位mhz
Horizontal pulse width 水平同步信号脉宽,单位dclk
Horizontal back porch 水平同步信号后肩,单位dclk
Horizontal front porch 水平同步信号前肩,单位dclk
Vertical pulse width 垂直同步信号脉宽,单位dclk
Vertical back porch 垂直同步信号后肩,单位dclk
Vertical front porch 垂直同步信号前肩,单位dclk

这些参数值都可以直接从LCD的datasheet获取

bpp(bits per pixel 像素深度):表示一个像素的颜色状态需要用几位来表示
1位:单色显示,只有亮灭之分,常见的如小店招牌
8位:灰度显示,此时能表示256种颜色,这时候显示不了色彩,但是有了黑白明暗的区别
16位:一般是RGB565的颜色分布,即16位色
24位:RGB888的颜色分布,称之为24位真彩
32位:还是RGB888的颜色分布,剩下的8位代表透明度,故称之为ARGB,是目前主流

5、LCD的描述参数(液晶屏的选型)

5.1、分辨率 行和列像素点的个数

5.2、尺寸 有效的显示区对角线的长度,单位英寸。

5.3、色位 一个像素点用多少位数据来描述----24bits

5.4、响应时间 刷新时间---->60Hz(16ms)
响应时间---->几ms

5.5、亮度 cd/m**2 —>高亮屏:600
一般屏:250

5.6、对比度 白色的亮度/黑色的亮度。

5.7、寿命 单位:小时 5万小时
当液晶屏的亮度降低到出厂亮度的一半的时候,认为寿命到了。

5.8、可视角度 四个方向的可视角度是不对称的,一般有一个方向是比较差的

Linux的LCD硬件实现原理和FrameBuffer简介相关推荐

  1. Linux内核 LCD 驱动程序框架

    Linux 内核 LCD 驱动程序框架 1. framebuffer 简介 1.1 什么是 framebuffer 1.2 framebuffer的作用 2. framebuffer 驱动的框架 3. ...

  2. Linux下LCD编程

    Linux下的帧缓冲lcd应用编程 (2009-12-16 22:25)一键转载 分类: xserver 原文地址:http://www.dzkf.cn/html/qianrushixitong/20 ...

  3. Linux 2440 LCD 控制器

    嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 共享资源,欢迎转载:http:/ ...

  4. linux的LCD的驱动编写

    Framebuffer设备 ​ Framebuffer 翻译过来就是帧缓冲,简称 fb,因 此大家在以后的 Linux 学习中见到"Framebuffer"或者"fb&q ...

  5. Linux下LCD驱动的详解

    看了不少人写的LCD驱动解释,看之前很懵逼,看之后还是很懵逼.都是放一大堆内核代码,我当时就想吐槽,能写就写,写不明白放一大堆代码是啥意思.后来,实在没办法,只能去看内核代码,结果,真香,原来别人放一 ...

  6. 计算机网络原理和OSI模型与TCP模型

    计算机网络原理和OSI模型与TCP模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机网络的概述 1.计算机网络的定义 计算机网络是一组自治计算机的互连的集合 2.计算机 ...

  7. 硬件大熊原创合集(2023/02更新)

    技术2月份更新篇章: 问了ChatGPT几个硬件问题 智能开关保险丝选型&安规要求 智能墙壁开关电源篇--AC-DC概述 这个月花了很多的精力在梳理产品的技术架构,过程中总会发现很多自己尚且模 ...

  8. 硬件大熊原创合集(2022/09更新)

    9月份更新篇章: 红外发射管主要参数及设计建议 为什么你的温湿度传感器测不准? 几个你容易忽略的DFM软件技能 <天线设计和射频布局指南> 9月份推荐一本书:<哲学家们都做了什么&g ...

  9. web应用原理和tomact服务器介绍

    web应用原理和tomact服务器介绍 HTTP协议 工作原理 HTTP 消息结构 客户端请求消息 服务器响应消息 HTTP方法 Web应用原理 静态页面 动态页面 web服务器 协议 www tom ...

  10. AES加密原理和AOE工程实践

    AES加密原理和AOE工程实践 在AI业务的开发的过程中,我们常常需要对模型文件进行加密. 我们从以下几个方面来说一说AES的加密原理以及AOE里的工程实践. 常见的加密算法 AOE对模型加密需求的思 ...

最新文章

  1. DAY74-Django框架(五)
  2. [JAVA]寻找满足和的最短子序列(Minimum Size Subarray Sum)
  3. python 防止转义_python字符串前加r、f、u、l 的区别
  4. 整型数据类型存储空间大小(信息学奥赛一本通-T1016)
  5. 用Visual C#实现文件下载
  6. 从头开发一个 RPC 是种怎样的体验?
  7. java 内存泄漏问题_Java内存泄露的理解与解决(转)
  8. gitlab主备同步_gitlab实现主备切换集群
  9. C#窗体连连看小游戏(超详细)
  10. NXP ZigBee JN5169开发流程总结
  11. hutool 读取扩展名文件_好多公司都要用的一些知识点Office办公软件、文件加密、文件扩展名!...
  12. 泰凌微 Telink TLSR825X Uart 串口无法接收数据 关闭休眠和深度休眠解决 问题
  13. PAT考试经验总结(甲乙级均适用)~~想满分的请看这里!~~
  14. 一台电脑如何同时登录两个skype帐号
  15. 关于安装myeclipse7.5或者myeclipse7.0出现问题
  16. 智慧交通产品解决方案-交通地理信息平台
  17. kafka HA ISR机制
  18. 计算机和正餐的英语发音,晚饭的英文,早餐,午餐,晚餐英语怎么读!
  19. Flink中任务的并发:slot和parallelism
  20. 【重要】2019年美赛(MCM/ICM)的参赛建议

热门文章

  1. Unity Shader 噪声消融特效 - 剑灵死亡特效
  2. Activiti CamelTask(骆驼任务)
  3. rownum的用法oracle
  4. ActiveMQ之Topic
  5. iOS 四种延时的方法
  6. Linux系统下Lighttpd的安置设置-3
  7. 端午节那晚,见了个小学时的同学!
  8. NIPS中稿,聊聊科研!
  9. AI速查表:神经网络、机器学习、深度学习与数据科学一览
  10. linux错误—3.解决设置普通用户的sudo权限中碰到的问题:sudo: /etc/sudoers is world writable...