LCD和LED屏幕的工作原理总结

1 点阵取模原理之横向取模与纵向取模
1.1 针式打印机
- 针式打印机16针是纵向排列,每次打印垂直的16bit,然后右移一bit,继续下列打印;字节的MSB表示最上面的点,字节LSB表示最下面的点
- 由于汉字字模的点阵是横向排列的,而提供给打印头的信息却需要按纵向排列,所以必须再对字模缓冲区中存放的字模数据进行变换,变成打印机按图形方式工作时所需要的数据格式才能送出
- 参考Nokia5110和JLX12864的字符显示原理

Figure 1-1 针式打印机纵向排列点阵字模

LCD和LED屏幕的工作原理总结_第1张图片

Figure 1-2 针式打印机打印头运动方向

LCD和LED屏幕的工作原理总结_第2张图片

2 LED显示屏控制卡  - 点阵横向取模
2.1 芯片
ASAP1826T - AlphaScale,仰邦LED控制卡
AT89C52 - 最早的LED条屏控制卡,直到09年才兴起U盘LED控制卡
AT91SAM9 - Smart ARM-based Microcontroller,中航U盘控制卡
gd32f105 - GigaDevice
stm32f105 - 72MHz,中航U盘控制卡

2.2 LED控制卡接口
- LED用汉字字模点阵是16 x 16,每行16点占用2个字节,总共16行,所以占用32个字节
- HUB08控制2行汉字显示(16 x 16点阵),R1和G1控制第一行汉字的列,R2和G2控制第二行汉字的列
- HUB12控制1行汉字的显示(16 x 16点阵)

行译码:74HC138,A(LSB)、B、C、D (MSB)4根线译码出点阵的16行
列译码:74HC595,串并转换,接口类似于SPI接口,每8个clk一个字节;Q7’串行输出引脚,若输入位数比8多,则通过此引脚连接下一个74HC595,作为下一个级联74HC595的DS(Data Serial);R1和G1处理上半部的串行输入(16 x 64),R2和G2处理下半部的串行输入(16 x 64)。SPI每次传输1个字节。

2.3 LED驱动芯片
max7219

3 MCU LCD
3.1 段码LCD
- 车载空调屏幕
- 测温仪

3.2 字符型Nokia5110
V=0 水平寻址
V=1 垂直寻址

- 接口SPI
- 内部集成GRAM,Driver IC是PCD8544
- 液晶5110每次写入命令是写一个竖着的8个bit即一个字节,这是它的一个最基本的写入单元,故SPI每次传输1个字节
- 最上面的点是每个字节的LSB,最下面的点是每个字节的MSB;与针式打印机的LSB和MSB的方向是反的
- 坐标范围为X 0~83(1010011),Y 0~5(101)

3.3 字符型JLX12864
- 接口SPI
- 内部集成GRAM
- 12864表示分辨率是128 x 64,类似于Nokia5110,只是模块额外集成了一个SPI接口的字库

3.4 8080并行接口LCD

4 Android LCD
4.1 MIPI DSI几个重要的概念
MIPI DSI分为物理层和链路层。
物理层的传输模式分为:HS模式和低功耗LP模式,LP模式只使用Lane0通道,时钟通道关闭,此时Lane0既传输数据,也传输时钟,并且数据是单端模式。

链路层的模式分为:
- Command模式,原理类似于带有内部GRAM的Nokia5110
- Video模式,原理类似于传统的RGB TFT-LCD

Command模式数据格式:
命令类型(如0x05/0x15/0x39)+ 指令 + 参数
0x05:只有指令,没有参数
0x15:只有一个参数
0x39:有多个参数

当链路层选择Command模式时,物理层可以为HS模式,也可以为LP模式;但链路层选择Video模式时,物理层只能选择HS模式。所以初始化MIPI DSI屏幕时,如果要使用低速模式配置DSI屏幕的寄存器,那么链路层就选择Command模式,而物理层选择LP模式。

4.2 Android多屏显示不同内容
ActivityOptions.java
ActivityOptions.setLaunchDisplayId()
ActivityOptions.getLaunchDisplayId()

4.3 AMOLED
AMOLED需要NOR Flash,因为AMOLED的Demura(Mura表示亮度不均匀)校准数据需要保存到NOR Flash中,开机后,驱动IC将NOR Flash中的数据读出,加载到驱动IC中的SRAM。

5 显示SerDes
5.1 SerDes透传I2C或者UART数据
FCC:Forward Control Channel bit,正向传递I2C的SCL/SDA或者UART的TX/RX数据位,编码到一帧32b中的第bit 30,32b的数据使用8b/10b编码成40b
RCC:Reverse Control Channel bit,反向传递I2C的SCL/SDA或者UART的TX/RX数据位,编码成1 us的脉冲,所以最大速率为1 Mbps
PCB:Packet Parity Check bit,奇偶校验位,编码到一帧32b中的bit 31,32b的数据使用8b/10b编码成40b

5.2 SerDes初始化
1)SerDes的Serializer中需要配置Deserializer、背光、触摸屏的I2C地址。
2)SerDes的Serializer中需要配置屏幕分辨率参数,包括但不限于长、宽、前肩、后肩、pclk等。

5.3 backlight
ILight.setLight(Type type,
        LightState state)

2-byte frame_len +
3-byte frame_hdr (0, (tx_seq << 1) | type, 0x7f << 1) +
1-byte ch_id +
1-byte reserved +
2-byte data_len +
2-byte data (id + brightness) +
2-byte crc (not including frame_len)
Note: 3-byte frame_hdr bit field definitions are different from standard HDLC frame.
U-frame RST frame_hdr: 0x00, 0x8f, 0x03
U-frame ACK frame_hdr: 0x00, 0x63, 0x03

echo "\x31\x99" > \
/dev/backlight_node
cat /dev/backlight_node | \
busybox hexdump -C

5.4 Lattice ECP5-45
4ch-eDP  8ch-947/RGB-921
Diamond IDE
q <= #1 1b0 : delay one clock to set 0 to q.

6 Linux DRM
6.1 前言
fb驱动主要是嵌入式设备用,Android最开始也是用fb,但是渐渐就发现它不好用了,主要是对多硬件图层的支持不好,不过那时候DRM对嵌入式系统也不友好,Google中间还开发了一个ADF(Atomic Display Framework)的驱动框架代替fb,不过没什么人响应,后面DRM里面加了Atomic KMS的功能,对多图层的支持基本能满足Android的需求了,而且很多芯片厂家既要做Android又要做Chrome,所以都直接转向DRM了,要不然就要维护两套驱动,所以DRM现在就成了Android上的标准图形驱动。

6.2 Broxton Graphics
Intel Open Source HD Graphics Programmer's Reference Manual
page 14
Pipe A and Pipe B have four planes and a cursor. Each plane can be used as a sprite, primary, or overlay. Pipe C has three planes and a cursor. Each plane can be used as a sprite, primary, or overlay.
The plane blending follows a fixed Z-order. Plane 1 is the bottom most plane and higher numbered planes stack on top of it.

6.3 A-KMS pipeline
fb -> CRTC -> encoder -> connector,connector是hotpluggable。
fb -> CRTC -> encoder -> bridge,最后一步的桥会创建connector,譬如encoder是dpi,lvds是桥,负责输出。

A-KMS工具:libdrm/tests/modetest

6.4 kernel
1)struct drm_device
struct drm_device {}代表一个显卡,该显卡中的所有connector组成一个list,所有encoder组成一个list,所有crtc组成一个list,所有fb组成一个list。
2)创建connector和encoder,并且关联起来。
component_add()
component_ops->bind()
3)创建connector时,会解析cmdline中与connector有关的参数。
drm_connector_init()
drm_connector_get_cmdline_mode()

6.5 DRM加载静态EDID配置
1)应用程序调用libdrm代码中的drmModeGetConnector()函数,通过ioctl传递宏DRM_IOCTL_MODE_GETCONNECTOR通知Linux内核要获取相关数据(包括EDID)。

Linux内核中,如果定义了宏CONFIG_DRM_LOAD_EDID_FIRMWARE,内核会先调用drm_load_edid_firmware()函数,从/vendor/firmware路径下的对应文件中读取EDID数据;若读取失败或未定义宏CONFIG_DRM_LOAD_EDID_FIRMWARE,内核通过DDC通道和显示器进行通信,获取EDID数据。
2)
zcat /proc/config.gz | grep CONFIG_DRM_LOAD_EDID_FIRMWARE
BOARD_KERNEL_CMDLINE += \
drm_kms_helper.edid_firmware=\
HDMI-A-1:edid/1920x720.bin,\
HDMI-A-2:edid/1920x1080.bin \
video=HDMI-A-1:e \
video=HDMI-A-2:e
3)
cat /sys/module/drm_kms_helper/parameters/edid_firmware
cat /sys/class/drm/card0-HDMI-A-1/status
echo 0x1f > \
/sys/module/drm/parameters/debug
4)
drm_edid_load.c
Kramer EDID Designer
Descriptor #1: LCD Timing Table

7 Display Interface
7.1 HDMI
7.1.1 数据格式
TMDS CH0传输B[7:0]信号,H信号和V信号分别使用该通道的bit0和bit1。
TMDS CH1传输G[7:0]信号。
TMDS CH2传输R[7:0]信号。
每个数据通道都通过编码算法(异或、异或非等),将8位数据转换成10位数据,前8位数据由原始信号经运算后获得,第9位指示运算的方式,1表示异或,0表示异或非。第10位实际是一个反转标志位,1表示进行了反转而0表示没有反转。通过这种算法,会使得数据的传输和恢复更加可靠。

7.1.2 带宽计算
4K频率需要的带宽:选最常用的3840 x 2160分辨率,色深常用的是8位,RGB三色就是24bit,60Hz刷新率,3840 x 2160 x 24bit x 60fps = 11.94Gbps
HDMI1.4像素时钟高达340MHz,即最大带宽是:340MHz x 10bit (10bit encoder) x 3 (3 lanes) = 10.2Gbps
但是由于HDMI采用的是8bit/10bit编码方式,实际效率是理论值的80%,所以10.2Gbps能传输的最大视频带宽是10.2 x 0.8 = 8.1Gbps

7.2 MT2712 LVDS
every LVDS TX period: 7 bit
LVDS pair0: R0 - R5, G0
LVDS pair1: G1 - G5, B0 - B1
LVDS pair2: B2 - B5, HS, VS, DE
LVDS pair3: R6 - R7, G6 - G7, B6 - B7, RSVD

8 Abbreviations
AOD: Always On Display, 1Hz refresh rate
APIX:Automotive Pixel link,类似于美信的GMSL和德州仪器的FPDLINK,BMW MGU使用
Chrom-GRC:STM32 Graphics Resource Cutter,图形资源切割,当使用圆形显示器(如智能手表上的显示器)时,Chrom-GRC会丢弃由于屏幕形状而不可见的像素
DBL:Camera SerDes double-input mode,大多数摄像头输出的是RawData格式的数据,位数比较低。因此,可以把两个像素的数据放到一个帧里进行传输。即24位或32位的数据里包含两个像素的数据。这种每帧传输两个像素的方式称为双输入模式
D/C:Data/Command Pin
DE: Data Enable
DPI:Display Parallel Interface
DSI:Display Serial Interface
HDMI ARC:Audio Return Channel,音频回传通道,pin14和pin19传输差分数据,pin17作为差分地
MISO:mi s əu
MOSI:m əu si
OpenLDI: TI SerDes Open LVDS Display Interface
PSRAM:Pseudo SRAM,一种伪静态SRAM,实际就是SPI SRAM
QUP:高通平台的SPI总线和I2C共用core和引脚,称为QUP(QCOM Universal Peripheral);而UART和QUP又共用引脚,并且称为BLSP
RS:Register Select
SerDes:sir-deez
TE:MIPI Command Mode Tearing Effect

你可能感兴趣的:(Display,LCD,LED,图形资源切割,1024程序员节)