一,lcd屏介绍
LCD液晶屏的接口类型非常丰富,最常用的接口主要有RGB、MCU、LVDS、MIPI接口。
1、RGB接口
LCD液晶屏的RGB接口通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及三者组合来得到丰富多彩的颜色,RGB分别代表红、绿、蓝三个通道的颜色,它们三者之间的组合几乎包括了人类视觉感知的所有颜色,是最常用的颜色体系之一。所以LCD液晶屏的RGB接口就是分三原色输入的视频接口 。通常一个颜色通道由8bit表示, 即每个颜色通道值的范围是0~255, 通常称RGB888/RGB24。三个颜色通道总共能组合出约。在实际的使用中, 除了RGB888/RGB24, 还有RGB555,、RGB565、RGB32、RGB666等等。
2、MCU接口
LCD液晶屏的MCU接口主要针对单片机的领域。在尺寸较小的手机上大量使用,主要优势是价格便宜。MCU接口的标准是因特尔提出的8080总线标准,因此在很多文档中用I80 来指MCU接口屏。MCU接口模式分为8080模式和6800模式,主要是时序的区别。数据位传输有8位,16位,18位,24位。连线分为:CS/RS/RD/WR/。优点是控制简单方便,无需时钟和同步信号。缺点是要耗费GRAM,所以难以做到大屏,一般都用在4寸以下。对于MCU接口的LCM,其内部的芯片就叫LCD驱动器。主要功能是对主机发过的数据/命令,进行变换,变成每个像素的RGB数据,使之在屏上显示出来。这个过程不需要点、行、帧时钟。
3、LVDS接口
LCD液晶屏的LVDS接口即Low Voltage Differential Signaling,是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅(约350mV)在两条PCB走线或一对平衡电缆上通过差分进行数据的传输,即低压差分信号传输。采用LVDS输出接口,可以使得信号在差分PCB线或平衡电缆上以几百Mbit/s的速率传输,由于采用低压和低电流驱动方式,因此,实现了低噪声和低功耗。
4、MIPI接口
LCD液晶屏的MIPI接口是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准。MIPI是一个比较新的标准,其规范也在不断修改和改进,目前比较成熟的接口应用有DSI(显示接口)和CSI(摄像头接口)。CSI/DSI分别是指其承载的是针对Camera或Display应用,都有复杂的协议结构。
在LCD液晶屏选择与定制的过程中,使用何种LCD接口类型,主要是根据主板的接口而定,通过软件驱动的匹配,来点亮屏幕,从而实现产品的显示方案。
来源:LCD液晶屏的接口类型有哪些? (baidu.com)
二,调试记录,MCU8080接口。
1,硬件:主控芯片stm32f767,LCD是MCU 8080接口16位数据口,分辨率320*240。
这种LCD,内部有 GRAM ,MCU操作IO口,就是向GRAM写入数据,GRAM对应屏幕上的像素点。刷新整个屏幕的话,就需要写入320*240个数据,数据量还是非常大的。
2,控制引脚和时序。
CS,片选。
WR,写操作。由0到1,上升沿,写入数据。
RS,命令/数据标志。0,读写命令;1,读写数据。
RST,可以硬件复位,软件复位两种。
RD,如果不读,尽量直接初始化,置高。
3,驱动程序例程很多,最关键的就是读写指令数据的时序。
void LCD_WR_REG(u16 data)
{
LCD_CS_CLR;
LCD_RD_SET;
LCD_RS_CLR; //写地址
DATAOUT(data);
LCD_WR_CLR;
LCD_WR_SET;
LCD_CS_SET;
//LCD_RS_SET;
}
//写数据函数
//可以替代LCD_WR_DATAX宏,拿时间换空间.
//data:寄存器值
void LCD_WR_DATA(u16 data)
{
LCD_CS_CLR;
LCD_RD_SET;
LCD_RS_SET;
DATAOUT(data);
LCD_WR_CLR;
LCD_WR_SET;
LCD_CS_SET;
//LCD_RS_CLR;
}
4,刷新速度测试。
主频96Mhz,使用IO口模拟时序,每个IO单独控制,测试清屏一个周期时间。
a,完全使用库函数,清屏周期:529ms。
b,D0-D15使用寄存器操作,清屏周期:150ms。
c,全部IO口使用寄存器操作,清屏周期:107ms。
可以发现,完全使用库函数操作,很耗时。
以下是清屏函数:
void LCD_Clear(unsigned int color)
{
u32 i;
LCD_SetWindows(0,0,239,319);
//LCD_WR_REG(0x2C);
LCD_RS_SET; // data mode
LCD_CS_CLR;
for(i=0;i<240*320;i++)
{
DATAOUT(color);
LCD_WR_CLR;
LCD_WR_SET;
}
LCD_CS_SET;
}
三,总结
头两天移植程序,查看手册,熟悉LCD,但是就是没点亮,查看时序也没发现问题,加延时,改时序,都没有作用。第三天,因为改了RD引脚,导致电流猛增,以为板子坏了,又换了一块新焊接的板子,还是一样的现象,看来是程序控制的原因,恢复到昨天的程序,意外出现了,点亮了。好的有点莫名奇妙,估计可能与焊接还是又关系。
电流猛增,这里应该是与RD引脚有关系,我的MCU的IO设置推挽输出,如果RD置低的话,LCD变成读模式,这样可能灌电流,导致电流增加。注意如果不使用RD引脚,将该引脚置高,禁止读操作。
总的来说,时序并不复杂,根据参考程序,一般没有大的问题,如果新板子调试的话,先检查每个IO口配置,是否都正常驱动。我使用stm32CubeIDE单步调试,用示波器查看每一步的状态,体验还真不错。其次,就是注意焊接,新板子,焊接出问题的概率很大。
如何提高刷新频率?网友回答,
FSMC的速度相比于串行口的屏要快。
程序上使用DMA,进行数据移动刷屏。
关键代码使用寄存器的方式进行操作,而不是使用库函数。
下版准备改成FSMC驱动,使用DMA试试。
参考文章:
(5条消息) 一文搞懂单片机驱动8080LCD_NULL_1969的博客-CSDN博客_st7796
(5条消息) STM32之LCD液晶屏(ILI9341)模拟8080时序_Swiler的博客-CSDN博客_lcd_cs
如何提高单片机在显示屏上刷新速度?-电子芯吧客(www.icxbk.com)
F411使用模拟8080时序刷屏测速 - STM32/STM8单片机论坛 - ST MCU意法半导体官方技术支持论坛 - 21ic电子技术开发论坛
LCD液晶屏的接口类型有哪些? (baidu.com)