滴滴FAE

各种调屏经验分享:TFT,AMOLED,PMOLED,详情见麦瑞科技术mrklcd.com

ILI9488,ILI9486,ILI9481,ST7796S,HX8357D 3W-SPI读ID

0
阅读(5582)


一、HX8357D:

先下指令:

write_cmd(0xB9);

write_para(0xFF);

write_para(0x83);

write_para(0x57);

write_cmd(0xFE );

write_para(0xD0);

read_data(0xFF,one_byte_return); 

//Read HX8357-D ID=99h  读0XFF返回0x99刚是HX8357D

二、ILI9488与ILI9486读ID流程一样


void DispRegValue(void)
{
unsigned char i=0;
unsigned char id1,id2,id3,id4;

SPI_CS=0;

SPI_RES=1;
Delay(160);      // delay 40 ms
SPI_RES=0;
Delay(160);        // delay 40 ms

 SPI_RES=1;

Delay(480);        // delay 120 ms


 //Adjust Control 3 
SPI_WriteComm(0XF7);
SPI_WriteData(0xA9);
SPI_WriteData(0x51);
SPI_WriteData(0x2C);
SPI_WriteData(0x82);

 //3W-SDA read id

 SPI_WriteComm(0XB0);
SPI_WriteData(0X80); //byte1

SPI_WriteComm(0XFB);
SPI_WriteData(0X80);
id1=Read_chipID(0xd3);    //Parameter1=DUMMY 无效

SPI_WriteComm(0X2E);
SPI_WriteData(0X81); //Parameter2=0X88 无效
id2=Read_chipID(0xd3);

SPI_WriteComm(0XFB);
SPI_WriteData(0X82); //Parameter3=0X94 有用

id3=Read_chipID(0xd3);

  SPI_WriteComm(0XFB);
SPI_WriteData(0X83);//Parameter4=0X88 ,9486为0X86
id4=Read_chipID(0xd3);
}

unsigned int Read_chipID(unsigned char regist)
{  
unsigned char i,dat=0x00;
DIR=0; //MCU send data to driver ic
SPI_CS=0;
SPI_DI=0;
SPI_CLK=0;
SPI_CLK=1; //写0XD3
for(i=8;i>0;i--) 
{
regist<<=1;
SPI_DI=CY;
SPI_CLK=0;
_nop_();_nop_();_nop_();_nop_();
SPI_CLK=1;
}
SPI_DI=1;    //读之前将SDA拉高
Delay(80);    //延时20ms
    for(i=8;i>0;i--)   
     {  
SPI_CLK=0;
Delay(4); //1ms
SPI_CLK=1;
dat<<=1;   //MCU read data from driver ic
    if(SPI_DI)
{
dat++;

      }
DIR=0;     //MCU send data to driver ic
CS0=1;  
DIR=0;
return dat;
}


三、ILI9481读BF寄存器,可以读到ID,第四,第五个字节为需要的ID

复位过后写C6H再去读BFH


void DispRegValue(void)
{

unsigned char i=0, id1,id2,id3,id4;
 SPI_CS=0;

SPI_RES=1;
Delay(160);         // delay 40 ms
SPI_RES=0;
 Delay(160);        // delay 40 ms

 SPI_RES=1;


Delay(480);        // delay 120 ms

//3W-SDA read id

SPI_WriteComm(0xC6);

SPI_WriteData(0X80);        //SDA读使能

id1=Read_chipID(0XBF);    //byte1=0X02

id2=Read_chipID(0XBF);    //byte2=0x04有用

id3=Read_chipID(0XBF);  //byte3=0X94 有用

id4=Read_chipID(0XBF);    //byte4=0X81 有用

id5=Read_chipID(0XBF);    //byte5=0XFF 有用

}

unsigned int Read_chipID(unsigned char regist)
{  
 unsigned char i,dat=0x00;

DIR=0;         //MCU send data to driver ic

SPI_CS=0;
SPI_DI=0;
SPI_CLK=0;
SPI_CLK=1;     //写0XBF
for(i=8;i>0;i--) 
{
regist<<=1;
SPI_DI=CY;
SPI_CLK=0;
_nop_();_nop_();_nop_();_nop_();
SPI_CLK=1;
}
SPI_DI=1;    //读之前将SDA拉高
Delay(80);    //延时20ms
    for(i=8;i>0;i--)   
     {  
SPI_CLK=0;
Delay(4); //1ms
SPI_CLK=1;
dat<<=1;  

DIR=1;    //MCU read data from driver ic

    if(SPI_DI)
{
dat++;

      }
DIR=0;     //MCU send data to driver ic
CS0=1;  
DIR=0;
return dat;
}

送完初始化后先下以下指令

write_cmd(0xc6);

write_dat(0x82);


四、ST7796S读BF寄存器,可以读到ID,第三,第四个字节为需要的ID值

复位过后:FBH送偏移量,再读D3H


void DispRegValue(void)
{

unsigned char i=0;
unsigned char id1,id2,id3,id4;
  SPI_CS=0;

SPI_RES=1;
Delay(160);          // delay 40 ms
SPI_RES=0;
Delay(160);        // delay 40 ms

 SPI_RES=1;

Delay(480);        // delay 120 ms


SPI_WriteComm(0XFB);
SPI_WriteData(0X10);
id1=Read_chipID(0xd3);    //Parameter1=0x00无效

SPI_WriteComm(0XFB);
SPI_WriteData(0X11); //Parameter2=0X77 有用
id2=Read_chipID(0xd3);

SPI_WriteComm(0XFB);
SPI_WriteData(0X12); //Parameter3=0X96 有用

id3=Read_chipID(0xd3);


SPI_WriteComm(0XFB);
SPI_WriteData(0X13); //Parameter3=0X00 有用

id3=Read_chipID(0xd3);

}

unsigned int Read_chipID(unsigned char regist)
{  
unsigned char i,dat=0x00;
DIR=0;         //MCU send data to driver ic

SPI_CS=0;
SPI_DI=0;
SPI_CLK=0;
SPI_CLK=1; //写0xd3
for(i=8;i>0;i--) 
{
regist<<=1;
SPI_DI=CY;
SPI_CLK=0;
_nop_();_nop_();_nop_();_nop_();
SPI_CLK=1;
}
SPI_DI=1;//读之前将SDA拉高
Delay(80);//延时20ms
    for(i=8;i>0;i--)   
     {  
SPI_CLK=0;
Delay(4); //1ms
SPI_CLK=1;
dat<<=1;  

DIR=1;    //MCU read data from driver ic

    if(SPI_DI)
{
dat++;

      }
DIR=0; //MCU send data to driver ic
CS0=1;  
DIR=0;
return dat;
}

以上读代码都是基于51单片机实现,仅供参考