现在的手机有 LCD 和 OLED 两种屏幕,本文探讨 LCD 屏幕。
LCD 和 OLED 有什么区别?参考
https://www.zhihu.com/question/22263252/answer/410201820不同接口的 LCD 硬件操作原理1. 应用工程师眼里看到的 LCDLCD 由一个一个像素组成:每行有 xres 个像素,有 yres 行,它的分辨率是:xres * yres。
只要我们能控制任意一个像素的颜色,就可以在 LCD 上绘制文字、图片。
1.1 像素的颜色怎么表示用红绿蓝三颜色来表示,可以用 24 位数据来表示红绿蓝,也可以用 16 位等等格式,比如:
bpp:bits per pixel,每个像素用多少位来表示24bpp:实际上会用到 32 位,其中 8 位未使用,其余 24 位中分别用 8 位表示红(R)、绿(G)、蓝(B)16bpp:有 rbg565,rgb555rgb565:用 5 位表示红、6 位表示绿、5 位表示蓝rgb555:16 位数据中用 5 位表示红、5 位表示绿、5 位表示蓝,浪费一位1.2 怎么把颜色发给 LCD假设每个像素的颜色用 16 位来表示,那么一个 LCD 的所有像素点假设有 xres * yres个,需要的内存为:xres * yres * 16 / 8,也就是要设置所有像素的颜色,需要这么大小的内存。这块内存就被称为 framebuffer:
Framebuffer 中每块数据对应一个像素每块数据的大小可能是 16 位、3 2位,这跟 LCD 上像素的颜色格式有关设置好 LCD 硬件后,只需要把颜色数据写入 Framebuffer 即可2. 驱动工程师眼里看到的 LCD2.1 统一的 LCD 硬件模型2.2 MCU 常用的 8080 接口 LCD 模组单片机性能较弱,外接一个统一的模组。模组包括了 Framebuffer、LCD 控制器、LCD 屏幕。
单片机和模组间的接口有 CS 片选信号、RD 读、WR 写、data bus、cmd/data 标记线。标记线用来区分 data bus 上传输的是 data 还是 cmd。
这种做法的限制是屏幕像素不能太大,因为模组的 Framebuffer 是 SRAM,很贵,做不了太大。
2.3 MPU 常用的 TFT RGB 接口嵌入式 Linux 则使用 TFT RGB 接口,内存和 LCD 控制器集成在 Soc 里面,外部接一个 LCD 屏幕。
信号线有 DCLK、RGB 数据线、HSYNC、VSYNC、DE
1、横向移动像素点:DCLK2、从最右移动到下一行最左:HSYNC3、从右下角移动到左上角:VSYNC4、RGB 是数据线5、DE:data enable2.4 MIPI 标准MIPI 表示Mobile Industry Processor Interface,即移动产业处理器接口。是 MIPI 联盟发起的为移动应用处理器制定的开放标准和一个规范。主要是手机内部的接口(摄像头、显示屏接口、射频/基带接口)等标准化,从而减少手机内部接口的复杂程度及增加设计的灵活性。
对于 LCD,MIPI 接口可以分为 3 类:
MIPI-DBI (Display Bus Interface)
既然是 Bus(总线),就是既能发送数据,也能发送命令,常用的 8080 接口就属于 DBI 接口Type B (i-80 system), 8-/9-/16-/18-/24-bit busType C (Serial data transfer interface, 3/4-line SPI)MIPI-DPI (Display Pixel Interface)
Pixel(像素),强调的是操作单个像素,在 MPU 上的 LCD 控制器就是这种接口Supports 24 bit/pixel (R: 8-bit, G: 8-bit, B: 8-bit)Supports 18 bit/pixel (R: 6-bit, G: 6-bit, B: 6-bit)Supports 16 bit/pixel (R: 5-bit, G: 6-bit, B: 5-bit)MIPI-DSI (Display Serial Interface)
Serial,相比于 DBI、DPI 需要使用很多接口线,DSI 需要的接口线大为减少Supports one data lane/maximum speed 500MbpsSupports DSI version 1.01Supports D-PHY version 1.00