刚开始学LCD驱动,以为是通常的做法,就是GPIO来驱动LCD。但是不一样,这次是在FPGA板子上,SRAM来驱动LCD。查了些资料,这种方法类似于FSMA驱动LCD。
对于MCU总线来说,LCD只有2个地址,分别对应RS=0,RS=1两种情况。
1、RS=0 写命令
2、RS=1 写数据
Write_Reg分为2步:写命令(寄存器地址);写数据(寄存器数据)
Read_Reg分页2步:写命令(寄存器地址);读数据(寄存器数据)
所有的寄存器地址和寄存器数据,以及 GRAM数据都是通过数据线完成传输的,而不是SRAM的地址.这是容易搞混的一个地方.LCD的SRAM地址只有一根 ,就是RS。
因为我们是用SRAM驱动LCD,所以时序都是MCU自动完成的。开始的时候很不理解“自动”的含义,到后来查了些资料,稍微懂了一点。
读存储器一般是SRAM控制器使能片选CS,在地址总线上输出地址,RD=0,WR=1,然后存储器响应这些信号在数据总线上输出数据,然后SRAM在数据总线上读取该数据.
写存储器一般是SRAM控制器使能片选CS,在地址总线上输出地址,在数据总线上输出数据,RD=1,WR=0,然后存储器响应这些信号把数据总线上的数据写入内部存储单元.
#define SRAM_LCD_DATA ((uint32_t)0x60020000) //disp Data ADDR
#define SRAM_LCD_CMD ((uint32_t)0x60000000) //disp Reg ADDR
//写寄存器地址函数
void LCD_WR_REG(unsigned int index)
{
*(volatile uint16_t *) (SRAM_LCD_CMD)= index;
}
//写寄存器数据函数
void LCD_WR_CMD(unsigned int index,unsigned int val)
{
*(volatile uint16_t *) (SRAM_LCD_CMD)= index;
*(volatile uint16_t *) (SRAM_LCD_DATA)= val;
}
SRAM_LCD_CMD是写寄存器,此时RS=0,告诉LCD我在总线上输出数据的是寄存器的地址
SRAM_LCD_DATA是写数据,此时RS=1,告诉LCD我在总线上输出地数据是寄存器的数据或者GRAM的数据.
接下来说说SRAM_LCD_CMD和SRAM_LCD_DATA的地址确定。
首先是SRAM_LCD_CMD。这个要看LCD的CS管脚接到哪个SRAM的片选上面,由此来确定的基地址。
SRAM_LCD_DATA则是根据LCD的RS接到SRAM的哪根地址线上,还有一点就是屏的数据类型。
对于数据类型为8bit来说,如果RS接到A0上,SRAM_LCD_DATA = SRAM_LCD_CMD+1。An的话 则SRAM_LCD_DATA = SRAM_LCD_CMD | 1<<n
如果数据类型为16bit。那地址线中的1对应的是基址中的2byte。SRAM_LCD_DATA = SRAM_LCD_CMD | (1<<n)*2
LCD可以清屏了。来说说调试遇到的问题吧。由于公司在做芯片开发,所以我是在FPGA板子上跑程序的。
SRAM----------------------------LCD
CE--------------------------------CS
A[0:24]---------------------------RS
DATA-----------------------------DATA 数据线
OE--------------------------------RD
WE-------------------------------WR
RESET--------------------------RESET
管脚对应差不多是这样子。我用的LCD型号是SPFD5408,从datasheet上看,
1、
需要 将RST管脚先拉低至少1ms 然后再拉高。这就意味着reset需要接在板子的复位key上。
2、LCD屏的数据类型是16bit。贴上一图,
这个表上表达的意义是,当使用16位数据宽度的外部存储器时,内部的HADDR[25:1]被移位输出到外部总线A24~A0上,内部的HADDR[0]不输出。
A0不接,所以SRAM上的A1相当于A2,1 <<n ----> 1 << (n+1)
分享到:
相关推荐
旭曜科技股份有限公司的LCD驱动IC SPFD5408B spcifaction
SPFD5408A.pdf
SPFD5408A_V0.1_20061020.pdf
SPFD5408A WINTEK 3.2 inch Application Note_20070712.pdf
SPFD5408A AUO 2.8 inch Application Note_20070803.pdf
SPFD5408A AUO 2.2 inch Application Note_070803.pdf
SPFD5408A_V0.5_20070626.pdf
SPFD5408A_VGL 鎖死解除方法.doc
SPFD5408A WINTEK 2.4 inch Application Note_20070712.pdf
SPFD5408A PVI 2.6 inch Application Note_20070706.pdf
SPFD5408A CPT 3.2 inch Application Note_20070706.pdf
SPFD5408A CPT 2.8 inch Application Note_20070706.pdf
SPFD5408A CPT 2.4 inch Application Note_20070706.pdf
SPFD5408A AUO 2.6 inch Application Note_20070803.pdf
SPFD5408A AUO 2.4 inch Application Note_20070803.pdf
2.4寸宇顺的LCD的驱动IC的指令说明 型号为S90184A
tft 液晶屏测试完整程序源代码,本代码是基于STM32系列的开发应用源程序。
TFTLCD模块驱动兼容ili93XX,rm68042驱动芯片包括括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/SPFD5408/SSD1289/1505/B505/C505等
一个240x400的显示屏程序,型号为SPFD5420A,资料有点难找,前期已经上传了SPFD5420A的DataSheet。
彩屏LCD 的控制模块SPFD54126B