显示技术介绍(1)_概述

作者:wowo 发布于:2015-11-22 21:44 分类:显示

1. 前言

本文是显示子系统的第一篇文章,介绍嵌入式系统显示有关的硬件组成,进而拆分为相对独立的模块,以便在后续的文章中一一介绍。

2. 显示的本质

人类和外界进行信息交互的方法有如下几种:

1)通过听觉、视觉、触觉、嗅觉从外界接收信息。

2)通过声音、动作(包括表情)、直接接触、气味向外界发送信息。

“显示”是相对人的视觉而言的,凡是人可以看到的东西,都可以称作“显示”。而在嵌入式系统(其它系统也相同)中,特指通过视觉,向人传递信息的过程。因此,显示的本质是,两个系统之间进行信息交互的一种手段,其中一个系统是人类,为信息接收方,另外一个是各种产品,为信息的发送方,如下:

display

上图系统1,将是显示子系统需要描述的对象。而系统2,就是大家比较熟悉(又非常陌生)的人类自身,“可视信号接收”就是眼睛,“可视信号解析”就是大脑。

这里之所以把这么简单的过程通过框图的形式表示出来,其实是想让大家的思考:

系统2(人类),之所以是这个形态(视觉),是因为这是和这个世界交互的一种好方法。但和我们的产品交互,就不一定了,想象一下图中的红色虚线?是不是很有意思?

3. 显示相关的硬件组成

由第2章的图片可知,对一个系统来说,要生成人眼可以看到的显示信号,必须具备“显示内容生成”和“将显示内容转换为人眼可见的光信号”两个部分,在我们比较熟悉的消费类电子产品中(如电脑、手机),主要由如下硬件组成:

display_hardware

说明如下:

1)我们通常所说的显示屏(或者显示器),称作显示模组(display module),主要由显示面板(display panel)和显示驱动器(display driver)两部分组成。

2)display panel的主要任务就是发光,但发光可是个技术活,一般人还做不了。这就是display module通常以独立的硬件模块的形式存在的原因:做面板的,专心研究怎么发光、怎么发好光就行了;而做产品的,直接把模组拿来用即可。既经济,又实惠,皆大欢喜。

3)display driver有两个功能:按照一定的格式(由display interface规定),接收显示内容;控制显示面板发光,将显示内容显示在屏幕上。

4)display interface充当了通信协议的角色,通过它,主控和显示模组按照协商好的方式沟通,就可以分开了。

5)display controller和display driver的极角色类似,功能也有两个:以一定的方式,接收主控发送过来的显示数据;将显示数据转换为display interface规定的格式,发送给display driver。

6)剩下的最重要的事情,就是显示内容的生成了。在很长的一段时间内,显示屏的像素还比较小(如320x240),UI界面还比较简单,一般都是通过CPU直接绘制,生成需要显示的图像数据,交给display controller显示。

7)慢慢的,显示屏像素变大了(如1920x1080),与此同时,UI界面变得越来越复杂,显示内容生成的过程中,可以需要其它额外操作,例如多个UI画面的叠加、颜色格式转换、旋转、缩放、透明度处理、等等。这个时候,再让CPU做这些事情,就会严重影响CPU处理其它事情的能力,因此一个单独的硬件模块产生了。这个硬件模块就是一个协处理器,协助CPU处理显示相关的数据处理,不同厂商对这个模块的命名不同,一般称作2D加速模块(相对于GPU的3D绘制而言)。

8)再后来,更复杂的场景出现了,例如大型游戏,需要实时产生很多带有特殊效果的图像,例如带3D特效的图像等等,单独的显示处理模块出现了。它也是一个协处理器,和CPU拥有相同的总线地位,负责处理所有图形相关的操作,通过称作GPU或者显卡。

9)GPU(或显卡)的功能是如此强大,以至于所有2D加速模块的任务都可以通过GPU完成,所以有些平台就不再单独提供2D加速模块,转而实用GPU内部的2D功能。这也是上面图片2D模块为虚线框的原因。但GPU的强大是需要付出代价的,就是功耗代价。对于对功耗敏感的嵌入式平台,2D模块通常是有保留的必要的(在Android平台称作H/W composer)。

10)在GPU和2D加速模块共存的系统中,GPU一般处理图像绘制、3D生成、特效处理等和图像内容有关的事情,2D模块处理后期的合成、缩放、格式转换等操作。

11)最后,有些产品有多屏互动的需求,如带有HDMI功能的手机,在显示屏上显示的同时,通过HDMI线将显示内容投射到电视上。此时系统内可能存在多个不同形式、不同技术的display controller。

4. 后续工作

本文只是对显示技术进行一个简单的介绍,后续将会通过硬件和软件两条线,进行更详细的分析。

硬件方面,将会包括如下的系列文章:

显示面板有关的技术介绍,介绍不同的面板技术,如之前的CRT,现在的液晶、等离子,未来的激光等等。

显示接口有关的技术介绍,如RGB、HDMI、EDP等等。

2D、3D加速有关的技术介绍,如GPU等。

软件方面,将会以原生linux平台为例,介绍显示有关的软件框架以及各个软件模块实现方法,具体可以参考后续“linux显示子系统”的文章。

 

原创文章,转发请注明出处。蜗窝科技,www.wowotech.net

标签: 显示 GPU 2D 3D

评论:

昵称真难取
2020-06-24 16:36
一般来说,对于简单的嵌入式设备(带2D加速),2D模块处理数据都是操作的RAM硬件地址.
这些硬件地址空间有两种方式
1. 在uboot 进入 kernel时 通知kernel 预留 部分内存供2D模块使用
2. 通过Linux自带的机制来分配硬件地址空间
但是,这块硬件地址需要是连续的,也比较大,所以目前我接触到的嵌入式设备基本都是采用了方式一
在使用方法上面,基本都是下面的架构模式:
1. 提供MMA driver 来分配和管理 预留的硬件地址空间
2. 应用层通过ioctl来申请硬件地址,并mmap为用户空间地址
3. 最后将应用层数据写入到申请的硬件地址中,ioctl提交给2D 加速模块
提交时可以指定dst addr为framebuffer的硬件地址,这样的话,2D模块绘制完成后就直接送给linux framebuffer去显示了。
加油
2016-06-23 14:27
请问,2D和GPU处理的数据是从dram里拷贝出来的,还是直接对dram操作?就是这些模块对dram中的数据进行处理,需不需要做拷贝工作?
wowo
2016-06-23 15:43
@加油:这个具体的设计有关。一般情况下,设计原则就是尽量少的copy,因此这些模块都有自己的独立RAM。可以单独预留的,也可以是系统启动给从DDR中分配的。
加油
2016-06-23 16:07
@wowo:能举个例子吗?感觉不是太懂。。。抱歉我对这方面不太熟悉
wowo
2016-06-23 21:22
@加油:这方面的东西,不是一两句话能说的明报的,需要在一定的硬件架构和软件架构下,结合图像数据的数据流向,进行说明。
sweetytoise
2016-06-15 15:07
请问这里的memory是dram吗?
wowo
2016-06-15 16:35
@sweetytoise:这一篇介绍性质的文章,所以memory没有特指,要看具体的环境。
action
2015-12-08 23:25
期待~
cc
2015-11-28 09:36
期待中,
常山黄豆
2015-11-26 13:29
期待ing!

发表评论:

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog