[Linux项目实践] LCD Panel的硬件分析及调试

LCD硬件分析

项目使用3.5” TFT-LCD并且支持触摸控制。LCD的硬件可从几个方面学习:1)查看LCD的硬件连线。2)查看数据手册了解寄存器的控制。3)查看LCD DATASHEET了解硬件操作

1LCD硬件连线

[Linux项目实践] LCD Panel的硬件分析及调试_第1张图片

在图中有33个引脚,22根数据引脚和9根控制引脚。

LCD的工作原理:像素点是从左至右,从上至下逐个显示,LCD控制寄存器会从从内存中的framebuffer通过24位数据引脚写到LCD显示屏,同时会有VCLK,VLINE,VFRAME同步信号控制当像素当最右边会跳转到下一行,当以一帧完成会跳转到第一行第一列。

不同的LCD生产厂商对这些信号的名字有不同的叫法:

Ⅰ.VFRAME/VSYNC/STV:帧同步信号(STN/垂直同步信号(TFT)/SEC TFT信号

帧同步信号的脉冲信号有效时表示新的一帧开始了,也就是新的画面出现了。即跳到最上边。

Ⅱ.VLINE/HSYNC/CPV:行同步信号/水平同步信号/ SEC TFT信号

行同步信号的脉冲信号有效时表示新的一行开始了。即跳到最左边。

Ⅲ.VCLK/LCD_HCLK : 像素时钟信号

LCD控制器送出的数据在VCLK的上升沿处送出,在VCLK的下降沿被LCD驱动器采样。

Ⅳ.VM/VDEN/TP :数据使能信号

控制像素的点的显示或熄灭。

Ⅴ.LEND/STH :行结束信号

Ⅵ.PWREN:电源使能信号

为了配置以上6种控制信号需要设置与其高度相关的时间参数,设置到哪里?就在S3C2410 LCD控制器中,在后面看手册时会分析。

TSXM,TSXP,TSYM,TSYP 四个引脚为控制触摸屏的功能引脚,会在分析触摸屏时再分析。

2)看s3c2410LCD寄存器

LCD控制器由REGBANK, LCDCDMA,VIDPRCS, TIMEGEN, and LPC3600几个部分组成。

REGBANK: 有17个寄存器和256*16的调色板配置LCD控制器

LCDCDMA: 是一个专用的DMA,它可以自动从内存的framebuffer区域读取视频数据传给LCD驱动,通过使用这个特殊的DMA,这个视频数据能够不在CPU参入下显示在显示屏上。

注:DMA是一种无需CPU参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的IO数据传输过程中摆脱出来,从而大大提高系统的吞吐量,DMA通常与硬件体系结构特别是外设的总线技术紧密相连。

解决由于DMA导致的cache的一致性问题的最简单的解决办法就是直接禁止DMA目标的地址范围内内存的cache功能,当然这将牺牲性能但却更可靠。

VIDPRCS:把LCDCDAM接收到的数据转换成合适的格式,通过VD[23:0]端口发送到LCD

TIMEGEN: 由可编程逻辑组成以支持各种常见的LCD驱动器的定时和速率界面的

不要求。TIMEGEN模块产生帧同步,行同步,像素时钟,数据使能等信号。

当我们清楚了这些模块的功能,我们来看怎么操作硬件,对应我们用的TFT LCD屏幕,我们主要了解TFT 的操作:

上面已知TIMEGEN模块为外部LCD驱动器产生了控制信号,例如帧同步,行同步,

像素时钟,数据使能,行结束控制信号。这些控制信号与存放在REGBANK中的LCD1/2/3/4/5

寄存器相关。基于这些存放在REGBANK的寄存器的可编程的配置信息,TIMEGEN产生适合于各种各样的LCD驱动器的可编程的控制信号。

S3C2410 LCD控制器支持1,2,4,8bpp(bit per pixel)带调色板和16,24bpp不带调色板的显示。在这次项目设置为24bpp真彩显示,我们查看24bpp的数据存放格式:

[Linux项目实践] LCD Panel的硬件分析及调试_第2张图片

当设置为24bpp,通过设置LCDCON5[12]位来选择不同的数据存放顺序。当BSWP = 0, HWSWP = 0, BPP24BL = 0,高8为无效,蓝色[0:7],绿色[8:15],红色[16:23]BSWP = 0, HWSWP = 0, BPP24BL = 1,低8位无效,蓝色[8:15],绿色[16:23],红色[24:31]。当应用层中显示视频时就需要根据内核设置来数据在framebuffer中的存放。

LCD 通用的时序图

[Linux项目实践] LCD Panel的硬件分析及调试_第3张图片

图中显示一帧图片的时序过程,当VSYNC信号高电平表示一帧图像的开始,但VDEN像素有效信号会有VSPW+1,VBPD+1的延迟后才到达高电平,像素点才真正在LCD上显示出来,同样在VDEN无效后有VFPD+1的延迟后才到达下一个VSYNC信号。对HSYNC行同步信号是同样的,当HSYNC信号高电平有效时,会经过HSPW+1,HBPD+1的延迟后像素点才能显示在LCD屏,当下一个VDEN信号无效后会经过HFPD+1的延迟才有下一个HSYNC信号到来。

总的来说,在一帧图片的开始和下一个帧信号到来后会有一段时间延迟,在这段时间的像素点显示到LCD上无效,对一行的数据有同样的道理。所以我们要使图像正常的显示在LCD上,我们需要设置这些延迟的值到控制寄存器中。

VSPW:  垂直同步脉冲宽度    

HSPW:  水平同步脉冲宽度

VBPD:  上边沿 帧回扫延时  

VFPD:  下边沿 帧前扫延时

HBPD:  左边沿 行回扫延时  

HFPD:  左边沿 行前扫延时

BPP:   像素24bpp or 16bpp

LINEVAL * HOZVAL 320*240..分辨率

但是这些值到底要设置为多少呢?这需要我们看对应LCDDATESHEET

3)看LCDDATESHEET

这里是看WXCAT35-TG3#001F的datasheet,我们查看datasheet的目的就是为了设置时序图的中的参数,所以我们要找到datasheet中的时序图,看厂商给出的参考值然后设置。

datasheet中的时序图:

[Linux项目实践] LCD Panel的硬件分析及调试_第4张图片

[Linux项目实践] LCD Panel的硬件分析及调试_第5张图片

通过查看上表格数据可得出需要设置LCDCON0~5的中数值。

HSPW+1 = Thp = 30 ;  HSPW = 29

HBPD+1 = Thb = 38 ;  HBPD =37

HFPD+1 = Thf = 20 ;   HFPD =19 

VSPW+1 = Tvp =3 ;   VSPW =2

VBPD+1 = Tvd =15 ;  VBPD =14 

VFPD+1 = Tvf =12 ;   VFPD=11

LINEVAL+1 = Thd = 320 LINEVAL = 219

HOZVAL+1 = Tvf = 240 HOZVAL  = 239

通过看硬件原理和手册我们就知道了硬件需要设置什么值才能使LCD正常显示,当看代码时主要注意这些方面的设置,更加容易理解代码和找到代码的重要语句。

你可能感兴趣的:(编程,c,linux,工作,cache,IO)