1.液晶控制器管脚定义
CS: 片选,低电平有效,高电平无效
WR: 写操作,低电平有效,高电平无效
RD: 读操作,低电平有效,高电平无效
C/D: 命令或数据通道 低电平是命令通道,高电平是数据通道
D0~D8: 输入输出数据通道
uc1698u和st75161的数据和命令操作是通过C/D管脚进行区分的,当读取液晶控制器里数据时,如厂商ID
2. uc1698u厂商ID读取
static unsigned int gpio_read_lcd_id(void)
{
unsigned char ID[3] = {0};
unsigned int id = 0;
int i;
gpio_lcd_dat_cfg_input();
gpio_lcd_cs(0); //片选
gpio_lcd_A0(0); //0命令通道
gpio_lcd_wr(1); //1写信号无效
for (i=0; i<3; i++){
gpio_lcd_rd(0); //1读信号有效
ID[i] = gpio_lcd_rd_dat() & 0xff;
gpio_lcd_rd(1); //0读信号无效
}
gpio_lcd_cs(1);
gpio_lcd_dat_cfg_output();
id = (ID[0]<<16) | (ID[1]<<8) | ID[2];
return id;
}
uc1698u读取ID时逐次读取,分三次,id=0x96008c,通过查看手册厂商id=8
3. ST75161厂商ID读取
static unsigned int read_lcd_id_st75161(void)
{
unsigned char ID[3] = {0};
unsigned int id = 0;
int i;
write_cmd(0x38); // Extension Command 3
write_cmd(0x7F); // Enable Read ID
write_cmd(0x30); // Extension Command 1
for (i=0; i<3; i++){
ndelay(10*1000);
ID[i] = read_ID() & 0xff;
}
write_cmd(0x38); // Extension Command 3
write_cmd(0x7E); // Disable Read ID
write_cmd(0x30); // Extension Command 1
id = (ID[0]<<16) | (ID[1]<<8) | ID[2];
}
st75161读取方式不一样,首先要切换到命令3,使能控制器读ID,然后在切换到命令1读取ID数据,读取完在切换到命令3,禁止读ID,再切换到命令1,我这里读出的id=0x300101。