我们采用的处理器为S3C2451,显示屏为TFT1N5676,采用的驱动IC是HX8347D。
1. HX8347D概述
我们先从HX8347-D(N)手册上给出下面一些描述:
The HX8347-D supports threeinterface groups: Command-Parameter interface group,Register-Content interfacegroup and RGB interface mode. Command-Parameter interface mode andRegister-Content interface mode are selected by the external pin IFSEL setting,and RGB interface mode is selected by external RCM[1:0] pins. This manualdescription focuses on Command-Parameter interface mode and RGB interface mode,about the Register-Content interface mode; please refer to the HX8347-D(T)datasheet for detail.
可知HX8347-D支持三种接口组,分别为命令-参数接口组、寄存器-内容接口组和RGB接口模式,其中命令-参数接口模式和寄存器-内容接口模式由外部引脚IFSEL的设置来决定,如下图:
图1
对于HX8347-D(T),IFSEL直接接地。RGB和系统接口模式由外部RCM[1:0]引脚来决定,如下图:
图2
也就是说如果要选择系统接口模式,也就是CPU的显示控制器采用比如是I80接口时,LCD驱动IC这边就设置RCM[1:0]=0x,如果CPU显示控制器采用RGB接口且需要用到DE控制脚时,设置RCM[1:0]=10,如果不需要DE控制脚,就设置RCM[1:0]=11,RCM[1:0]由0x31寄存器的D[1:0]( 默认为00)两位来控制,如下图:
图3
2. TFT1N5676引脚
先来看TFT1N5676显示屏的引脚,如下图:
图4
(1) 系统接口的选择引脚
IM[3:0]--------用于选择具体的系统接口,如下图:
图5
在设计时,我们决定采用RGB接口来发送显示数据,只利用系统接口来初始化驱动IC,也就是,那是选择3线的串行接口还是4线的串行接口呢?
HX8347-D在寄存器-内容模式下,支持两种串行总线接口,分别为3和4线串行总线接口,可通过外部引脚IM2和IM1设置为10来选择3线,设置为11选择为4线的。由图5可知这两种的差别在于DNC_SCL引脚用来做什么,我们采用的显示屏并没有引出相关的引脚,所以只能选择3线串行接口,这样IM3和IM1就只能为10了。
(2) RGB操作控制引脚
RESET--------复位引脚,在上电后,要拉低复位引脚来初始化驱动IC,复位输入时序如下图:
图6
VSYSNC--------RGB接口操作的帧同步信号,低电平有效。
HSYSNC--------RGB接口操作的行同步信号,低电平有效。
DOTCLK--------RGB接口操作的像素时钟信号,输入数据在DOTCLK的上升沿输入。
ENABLE--------RGB接口操作的数据使能引脚。
(3) RGB数据总线引脚
DB[17:0]--------18位的双向数据总线,RGB像素数据就是通过这些引脚发送到驱动IC的。
HX8347-D支持RGB模式1和RGB模式2,具体见前面的描述,这两者的差别在于RGB模式1使用DE引脚。
(4) 串行控制接口
SDA--------串行总线系统接口的串行数据输入输出复用引脚,在此用来读写驱动IC的寄存器。
RD----------I80系统接口操作的读选通信号,低电平使能读操作,对于RGB接口此引脚可接到IOVCC或是GND
WR/SCL--- I80系统接口操作的写选通信号,低电平使能写操作,也可作为串行接口操作的同步时钟信号(SCL),在此用于同步SDA引脚的读写寄存器操作。
CS----------片选信号,低电平选中驱动IC并可被访问,高电平不选中驱动IC且不能被访问。
FMARK---帧头脉冲信号,在写数据到内部RAM时使用,不使用时open,在此没有使用。
3. CPU和显示屏接口的原理图设计
图7
需要说明一下几点:
(1) IM[3:0]
这里IM[3:0]=0100,也就是说采用的是3线串行接口,而且IM0对应的ID的值为0,见图5。
只要确认ID具体的值后,才能对驱动IC寄存器进行正确的读写。
(2) RD和RS
这两个引脚用于I80系统接口,但我们是采用RGB接口进行显示数据的传输,所以这里接到VDD上。
(3) VD[17:0]
这里一定要确保CPU显示控制器和显示屏对应的RGB数据引脚接好,否则可能显示偏色或是其他显示异常的情况,可见我之前的博文《AA065VD数据线连接错位的现象及分析总结》http://blog.csdn.net/loongembedded/article/details/6997526。
先来看HX8347-D相关部分:
图8
由图8可知HX8347-D支持三种数据宽度,分为是6/16/18位,这有0x17H寄存器的内容来决定,此寄存器的值可读写,其值为60h表示采用的是18位的数据宽度,由此也可知此驱动IC最大支持18位的数据宽度。
我们的CPU显示控制器这端选择RGB666的模式,由图8可知,D[17:12]分别输出R[5:0]数据,D[11:6]分别输出G[5:0]数据,D[5:0]分别输出B[5:0]数据。获取到这些信息后,我们来看CPU显示控制器RGB接口部分的描述
图9
可知VD[23:18]依次对应R[5:0],可知VD[15:10]依次对应G[5:0],可知VD[7:2]依次对应B[5:0],接下来我们再来看是哪些GPIO口可以作为VD[23:0]的,
图10
结合图8、9和10,GPC[15:10]需要依次接到显示屏的D[5:0]引脚,对应B[5:0]部分,继续:
图11
结合图8、9和11,GPD[15:10]需要依次接到显示屏的D[17:12]引脚,对应R[5:0]部分,GPD[7:2]需要依次接到显示屏的D[11:6]引脚,对应B[5:0]部分。
到此就可以确定CPU显示控制器的GPIO和显示屏数据引脚的连接关系了,如下图所示:
图12
(4)
4. CPU显示控制器的设置
显示控制器寄存器的设置在此不详细介绍,主要说明以下几点
(1) 配置RGB GPIO
由图12可知RGB数据引脚的连接关系,需要把GPCCON和CPDCON配置为对应的VD功能引脚,GPCUDP和GPDUDP配置为pull-up/down disable,其他的配置是否有效还有待验证。
(2) 图像帧、行、像素数据的同步发送时序配置
这需要根据驱动IC给出的相关时序图及具体参数,如下图:
图13
具体的确认方法可参考我之前的博文:
《AA065VD时序的确定》: http://blog.csdn.net/loongembedded/article/details/6916391
《LCD控制器时序参数的确定(基于TFT LCD:KD50G9-40NM-A3)》: http://blog.csdn.net/loongembedded/article/details/5975666
(3) 配置对驱动IC寄存器读写的GPIO
控制引脚如下:
GPC0_LCD-CS--------配置为输出和enablepull-down。
GPK0_LCD_SDA、 GPK1_LCD_SCL-----配置为输出和disablepull-up/down
这里引脚上下拉为什么要这样配置,以及是否一定要这样配置,暂时还不太确定。
(4) VIDCON0寄存器
图14
如果是RGB接口,VIDOUT=00,还有注意PNRMODE可控的显示模式等等,这些都要和显示屏的驱动IC对应起来。
(5)
5. HX8347-D的初始化
HX8347-D驱动IC在上电后需要执行下面的动作:
(1) 复位
根据图6给出的复位输入时序来控制,相关代码如下:
//拉低CS
LCD_CS_LOW;
DelayX1ms(15);
//RESET
s2450IOP->GPDDAT&=~(0x1<<0);
DelayX1ms(30); //实际4.5ms
s2450IOP->GPDDAT|=(0x1<<0);
DelayX1ms(40);
LCD_CS_HIG;
(2) 寄存器的初始化内容
具体需要对哪些寄存器设置为哪些内容,这个主要根据显示屏厂家给出的数据基本上就OK了,如果要搞清楚每个寄存器的意义就要参考驱动IC的数据手册,在此不详细描述了。
(3) 寄存器读写控制
显示屏厂家也会给出他们测试平台的参考代码,但要用到自己的平台上,一般都要做些修改,主要是涉及到具体GPIO口的控制、延时时间的调整,这部分见我之前的博文:
《兼容HX8347D和HX8347-H驱动IC类型的显示屏》:
http://blog.csdn.net/loongembedded/article/details/8032881