Files
MCUFRIEND_kbv/examples/LCD_ID_readnew/LCD_ID_readnew.ino
2021-06-09 22:48:59 +01:00

767 lines
23 KiB
C++

// adapted from LCD_ID_Reader from http://misc.ws/lcd_information
// controllers either read as 16-bit or as a sequence of 8-bit values
//-- Arduino UNO or Mega 2560 Plugged as shield
#define LCD_RST A4 //A1
#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_D0 8
#define LCD_D1 9
#define LCD_D2 2 //10
#define LCD_D3 3 //11
#define LCD_D4 4
#define LCD_D5 5 //13
#define LCD_D6 6
#define LCD_D7 7
uint8_t unlock_05A1_F0[] = { (0xF0), 2, 0x5A, 0x5A };
uint8_t unlock_05A1_F1[] = { (0xF1), 2, 0x5A, 0x5A };
uint8_t unlock_1520[] = { (0xB0), 2, 0x00, 0x00 };
uint8_t unlock_1526[] = { (0xB0), 2, 0x3F, 0x3F };
uint8_t unlock_3229[] = { (0x0607), 0 }; //intentional 16-bit command
uint8_t unlock_8357[] = { (0xB9), 3, 0xFF, 0x83, 0x57};
uint8_t unlock_5310[] = { (0xED), 2, 0x01, 0xFE};
uint8_t d5310_0_in[] = { (0xEE), 2, 0xDE, 0x21}; //enter CMD3 8bit args
//uint8_t d5310_1[] = { (0x??), 2, 0xDE, 0x21};
uint8_t d5310_1_in[] = { (0xBF), 1, 0xAA}; //enter page#1 16bit args
uint8_t d5310_1_out[] = { (0x00), 1, 0xAA}; //leave page#1 16bit args
uint8_t d1526nvm[] = { (0xE2), 1, 0x3F};
uint8_t *unlock = NULL;
uint8_t *page_N = NULL;
void setup()
{
Serial.begin(9600);
while (!Serial) ;
Serial.println(F("Read Special Registers on MCUFRIEND UNO shield"));
Serial.println(F("controllers either read as single 16-bit"));
Serial.println(F("e.g. the ID is at readReg(0)"));
Serial.println(F("or as a sequence of 8-bit values"));
Serial.println(F("in special locations (first is dummy)"));
Serial.println(F(""));
lcdInit();
lcdReset(); //ensures that controller is in default state
// unlock = unlock_1520;
// unlock = unlock_1526;
// unlock = unlock_3229;
// unlock = unlock_8357;
// unlock = unlock_5310;
// page_N = d5310_1_in;
// unlock = unlock_05A1_F0;
// page_N = unlock_05A1_F1;
// for (uint16_t i = 0x00; i <= 0xFE; i++) readReg(i, 10, "f.k");
read_regs("diagnose any controller");
// read_xxxx("mystery");
// read_5310_P0("NT35310 P0");
// read_5310_P1("NT35310 P1");
// read_61509("R61509 / ILI9326");
// read_61526("R61520 / R61526");
// read_61581("R61581");
// read_8357("HX8357X");
// read_9320("ILI9320");
// read_9327("ILI9327");
// read_9338("ILI9302 / ILI9329 / ILI9338 / ILI9341");
// read_9481("ILI9481 / HX8357-B / R61581");
// read_9486("ILI9486 / 1LI9488");
}
void loop()
{
// put your main code here, to run repeatedly:
}
void printhex(uint8_t val)
{
if (val < 0x10) Serial.print("0");
Serial.print(val, HEX);
}
void readReg(uint16_t reg, uint8_t n, const char *msg)
{
uint8_t val8;
lcdReset();
lcdSetWriteDir();
if (unlock == unlock_3229) pushCommand(0x0607, NULL, 0);
else if (unlock) pushCommand(unlock[0], unlock + 2, unlock[1]);
if (page_N) pushCommand(page_N[0], page_N + 2, page_N[1]);
Serial.print("reg(0x");
printhex(reg >> 8);
printhex(reg);
Serial.print(")");
lcdWriteCommand(reg);
lcdSetReadDir();
while (n--) {
val8 = lcdReadData8();
Serial.print(" ");
printhex(val8);
}
lcdSetWriteDir();
digitalWrite(LCD_CS, HIGH);
Serial.print("\t");
Serial.println(msg);
}
void lcdInit()
{
pinMode(LCD_CS, OUTPUT);
digitalWrite(LCD_CS, HIGH);
pinMode(LCD_RS, OUTPUT);
digitalWrite(LCD_RS, HIGH);
pinMode(LCD_WR, OUTPUT);
digitalWrite(LCD_WR, HIGH);
pinMode(LCD_RD, OUTPUT);
digitalWrite(LCD_RD, HIGH);
pinMode(LCD_RST, OUTPUT);
digitalWrite(LCD_RST, HIGH);
}
void lcdReset()
{
digitalWrite(LCD_RST, LOW);
delay(2);
digitalWrite(LCD_RST, HIGH);
delay(10); //allow controller to re-start
}
void lcdWrite8(uint16_t data)
{
digitalWrite(LCD_D0, data & 1);
digitalWrite(LCD_D1, (data & 2) >> 1);
digitalWrite(LCD_D2, (data & 4) >> 2);
digitalWrite(LCD_D3, (data & 8) >> 3);
digitalWrite(LCD_D4, (data & 16) >> 4);
digitalWrite(LCD_D5, (data & 32) >> 5);
digitalWrite(LCD_D6, (data & 64) >> 6);
digitalWrite(LCD_D7, (data & 128) >> 7);
}
uint16_t lcdRead8()
{
uint16_t result = digitalRead(LCD_D7);
result <<= 1;
result |= digitalRead(LCD_D6);
result <<= 1;
result |= digitalRead(LCD_D5);
result <<= 1;
result |= digitalRead(LCD_D4);
result <<= 1;
result |= digitalRead(LCD_D3);
result <<= 1;
result |= digitalRead(LCD_D2);
result <<= 1;
result |= digitalRead(LCD_D1);
result <<= 1;
result |= digitalRead(LCD_D0);
return result;
}
void lcdSetWriteDir()
{
uint8_t mode = OUTPUT;
pinMode(LCD_D0, mode);
pinMode(LCD_D1, mode);
pinMode(LCD_D2, mode);
pinMode(LCD_D3, mode);
pinMode(LCD_D4, mode);
pinMode(LCD_D5, mode);
pinMode(LCD_D6, mode);
pinMode(LCD_D7, mode);
}
void lcdSetReadDir()
{
uint8_t mode = INPUT;
pinMode(LCD_D0, mode);
pinMode(LCD_D1, mode);
pinMode(LCD_D2, mode);
pinMode(LCD_D3, mode);
pinMode(LCD_D4, mode);
pinMode(LCD_D5, mode);
pinMode(LCD_D6, mode);
pinMode(LCD_D7, mode);
}
void lcdWriteData(uint16_t data)
{
lcdSetWriteDir();
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, HIGH);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(data >> 8);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(data);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
digitalWrite(LCD_CS, HIGH);
}
void lcdWriteCommand(uint16_t command)
{
lcdSetWriteDir();
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, LOW);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(command >> 8);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(command);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
// digitalWrite(LCD_CS, HIGH);
}
uint8_t lcdReadData8()
{
uint8_t result;
lcdSetReadDir();
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, HIGH);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
digitalWrite(LCD_RD, LOW);
delayMicroseconds(10);
result = lcdRead8();
digitalWrite(LCD_RD, HIGH);
delayMicroseconds(10);
return result;
}
uint16_t lcdReadData16()
{
uint16_t result;
result = lcdReadData8() << 8;
result |= lcdReadData8();
return result;
}
void lcdWriteRegister(uint16_t addr, uint16_t data)
{
lcdWriteCommand(addr);
lcdWriteData(data);
}
void pushCommand(uint16_t command, uint8_t *block, int8_t n)
{
lcdWriteCommand(command);
digitalWrite(LCD_RS, HIGH);
while (n--) {
lcdWrite8(*block++);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
}
digitalWrite(LCD_CS, HIGH);
}
// make all the functions static.
// the linker will discard unused anonymous strings.
static void read_regs(char *title)
{
Serial.println(title);
readReg(0x00, 2, "ID: ILI9320, ILI9325, ILI9335, ...");
readReg(0x04, 4, "Manufacturer ID");
readReg(0x09, 5, "Status Register");
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x30, 5, "PTLAR");
readReg(0x33, 7, "VSCRLDEF");
readReg(0x61, 2, "RDID1 HX8347-G");
readReg(0x62, 2, "RDID2 HX8347-G");
readReg(0x63, 2, "RDID3 HX8347-G");
readReg(0x64, 2, "RDID1 HX8347-A");
readReg(0x65, 2, "RDID2 HX8347-A");
readReg(0x66, 2, "RDID3 HX8347-A");
readReg(0x67, 2, "RDID Himax HX8347-A");
readReg(0x70, 2, "Panel Himax HX8347-A");
readReg(0xA1, 5, "RD_DDB SSD1963");
readReg(0xB0, 2, "RGB Interface Signal Control");
readReg(0xB3, 5, "Frame Memory");
readReg(0xB4, 2, "Frame Mode");
readReg(0xB6, 5, "Display Control");
readReg(0xB7, 2, "Entry Mode Set");
readReg(0xBF, 6, "ILI9481, HX8357-B");
readReg(0xC0, 9, "Panel Control");
readReg(0xC1, 4, "Display Timing");
readReg(0xC5, 2, "Frame Rate");
readReg(0xC8, 13, "GAMMA");
readReg(0xCC, 2, "Panel Control");
readReg(0xD0, 4, "Power Control");
readReg(0xD1, 4, "VCOM Control");
readReg(0xD2, 3, "Power Normal");
readReg(0xD3, 4, "ILI9341, ILI9488");
readReg(0xD4, 4, "Novatek");
readReg(0xDA, 2, "RDID1");
readReg(0xDB, 2, "RDID2");
readReg(0xDC, 2, "RDID3");
readReg(0xE0, 16, "GAMMA-P");
readReg(0xE1, 16, "GAMMA-N");
readReg(0xEF, 6, "ILI9327");
readReg(0xF2, 12, "Adjust Control 2");
readReg(0xF6, 4, "Interface Control");
}
static void read_5310_P0(char *title)
{
Serial.println(title);
readReg(0xB0, 2, "DISPLAY_CTRL");
readReg(0xB1, 4, "PORCH_CTRL");
readReg(0xB2, 4, "FRAME_CTRL");
readReg(0xB3, 2, "SPI_RGB");
readReg(0xB6, 7, "SOURCE_EQ");
readReg(0xC0, 5, "PWR_CTRL1");
readReg(0xC1, 3, "PWR_CTRL2");
readReg(0xC2, 4, "PWR_CTRL3");
readReg(0xC3, 2, "PWR_CTRL5");
readReg(0xC4, 2, "PWR_CTRL6");
readReg(0xC5, 5, "PWR_CTRL7");
readReg(0xC6, 5, "PWR_CTRL8");
readReg(0xD1, 2, "WRID");
readReg(0xD2, 2, "WRID");
readReg(0xD3, 2, "WRID");
readReg(0xD4, 5, "RDID4");
readReg(0xD5, 5, "WRDDB");
readReg(0xDE, 4, "EPWR");
readReg(0xFF, 2, "PAGE_STATUS");
}
static void read_5310_P1(char *title)
{
Serial.println(title);
/*
readReg(0xB0, 19, "f.k");
readReg(0xB1, 7, "f.k");
readReg(0xB2, 7, "f.k");
readReg(0xB3, 25, "f.k");
readReg(0xB4, 7, "f.k");
readReg(0xB5, 7, "f.k");
readReg(0xB6, 3, "f.k");
readReg(0xB7, 23, "f.k");
readReg(0xB8, 7, "f.k");
readReg(0xBA, 5, "f.k");
readReg(0xC0, 19, "f.k");
readReg(0xC1, 7, "f.k");
readReg(0xC2, 5, "f.k");
readReg(0xC3, 49, "f.k");
readReg(0xC4, 27, "f.k");
readReg(0xC5, 11, "f.k");
readReg(0xC6, 7, "f.k");
readReg(0xC7, 5, "f.k");
readReg(0xC8, 5, "f.k");
readReg(0xC9, 17, "f.k");
*/
readReg(0xE0, 37, "GAMMA_RED_P");
readReg(0xE1, 37, "GAMMA_RED_N");
readReg(0xE2, 37, "GAMMA_GREEN_P");
readReg(0xE3, 37, "GAMMA_GREEN_N");
readReg(0xE4, 37, "GAMMA_BLUE_P");
readReg(0xE5, 37, "GAMMA_BLUE_N");
readReg(0xE6, 33, "CABC_RED");
readReg(0xE7, 33, "CABC_GREEN");
readReg(0xE8, 33, "CABC_BLUE");
// readReg(0xE9, 5, "f.k.");
readReg(0xFF, 2, "PAGE_STATUS");
}
static void read_61509(char *title)
{
Serial.println(title);
readReg(0x0000, 2, "Device Code Read");
readReg(0x0001, 2, "Device Output Control");
readReg(0x0002, 2, "LCD Waveform Control");
readReg(0x0003, 2, "Entry Mode");
readReg(0x0007, 2, "Display Control 1");
readReg(0x0008, 2, "Display Control 2");
readReg(0x0009, 2, "Display Control 3");
readReg(0x0010, 2, "Panel Interface Control 1");
readReg(0x0011, 2, "Panel Interface Control 2");
readReg(0x0012, 2, "Panel Interface Control 3");
readReg(0x0013, 2, "Panel Interface Control 4");
readReg(0x0100, 2, "Power Control 1");
readReg(0x0101, 2, "Power Control 2");
readReg(0x0102, 2, "Power Control 3");
readReg(0x0103, 2, "Power Control 4");
readReg(0x0210, 2, "Horiz SA");
readReg(0x0211, 2, "Horiz EA");
readReg(0x0212, 2, "Vert SA");
readReg(0x0213, 2, "Vert EA");
readReg(0x0400, 2, "Base Image NL");
readReg(0x0401, 2, "Base Image Control");
readReg(0x0404, 2, "Base Image Scroll");
}
static void read_61526(char *title)
{
Serial.println(title);
readReg(0x04, 4, "Manufacturer ID");
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 3, "Command Access Protect");
readReg(0xB3, 6, "Frame Memory");
readReg(0xB4, 2, "Frame Mode");
readReg(0xBF, 5, "Device Code Read");
readReg(0xC0, 9, "Panel Control");
readReg(0xC1, 6, "Display Timing Normal");
readReg(0xC3, 6, "Display Timing Idle");
readReg(0xC4, 6, "Timing setting");
readReg(0xC8, 23, "GAMMA");
readReg(0xC9, 23, "GAMMA");
readReg(0xCA, 23, "GAMMA");
readReg(0xD0, 7, "Power Control");
readReg(0xD1, 4, "VCOM Control");
readReg(0xD2, 3, "Power Normal");
readReg(0xD4, 3, "Power Idle");
readReg(0xE0, 4, "NVM Access");
readReg(0xE1, 2, "set_DDB");
readReg(0xE2, 2, "NVM Load Control");
}
static void read_8357(char *title)
{
Serial.println(title);
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 3, "SETOSC");
readReg(0xB1, 8, "SETPOWER");
readReg(0xB2, 6, "SETDISPLAY");
readReg(0xB3, 5, "SETRGB");
readReg(0xB4, 8, "SETCYC");
readReg(0xB5, 4, "SETBGP");
readReg(0xB6, 3, "SETVCOM");
readReg(0xB7, 6, "SETOTP");
readReg(0xB9, 4, "SETEXTC");
readReg(0xC0, 7, "SETSTBA");
readReg(0xC1, 11, "SETDGC");
readReg(0xC3, 5, "SETID");
readReg(0xC4, 5, "SETDDB");
readReg(0xC9, 3, "SETCABC");
readReg(0xCC, 2, "SETPANEL");
readReg(0xD0, 4, "GETICID");
readReg(0xE0, 35, "SETGAMMA");
readReg(0xE9, 2, "SETIMAGEI");
readReg(0xEA, 2, "SETMESSI");
}
static void read_fk(char *title)
{
Serial.println(title);
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 3, "Command Access Protect");
readReg(0xBF, 5, "Device Code Read");
readReg(0xF0, 4, "f.k.");
readReg(0xF2, 18, "f.k.");
readReg(0xF3, 2, "f.k.");
readReg(0xF4, 14, "f.k.");
readReg(0xF5, 11, "f.k.");
readReg(0xF6, 10, "f.k.");
readReg(0xF7, 4, "f.k.");
readReg(0xF8, 2, "f.k.");
readReg(0xF9, 2, "f.k.");
readReg(0xFA, 12, "f.k.");
readReg(0xFB, 2, "f.k.");
readReg(0xFC, 2, "f.k.");
readReg(0xFD, 12, "f.k.");
readReg(0xFE, 2, "f.k.");
}
static void read_xxxx(char *title)
{
Serial.println(title);
readReg(0x09, 5, "Status Register");
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 3, "Command Access Protect");
readReg(0xBF, 5, "Device Code Read");
readReg(0xC6, 2, "f.k.");
readReg(0xD6, 4, "f.k.");
readReg(0xD7, 5, "f.k.");
readReg(0xD8, 5, "f.k.");
readReg(0xD9, 4, "f.k.");
readReg(0xE0, 2, "f.k.");
readReg(0xE1, 3, "f.k.");
readReg(0xF0, 2, "f.k.");
readReg(0xF1, 2, "f.k.");
readReg(0xF2, 12, "f.k.");
readReg(0xF3, 9, "f.k.");
readReg(0xF4, 6, "f.k.");
readReg(0xF5, 7, "f.k.");
readReg(0xF6, 5, "f.k.");
readReg(0xF7, 16, "f.k.");
readReg(0xFD, 4, "f.k.");
readReg(0xFE, 2, "f.k.");
readReg(0xFF, 2, "f.k.");
}
static void read_9320(char *title)
{
Serial.println(title);
readReg(0x0000, 2, "Device Code Read");
readReg(0x0001, 2, "Drive Output Control");
readReg(0x0002, 2, "LCD Waveform Control");
readReg(0x0003, 2, "Entry Mode");
readReg(0x0007, 2, "Display Control 1");
readReg(0x0008, 2, "Display Control 2");
readReg(0x0009, 2, "Display Control 3");
readReg(0x000A, 2, "Display Control 4");
readReg(0x0010, 2, "Power Control 1");
readReg(0x0011, 2, "Power Control 2");
readReg(0x0012, 2, "Power Control 3");
readReg(0x0013, 2, "Power Control 4");
readReg(0x0014, 2, "Power Control 5");
readReg(0x0015, 2, "Power Control 6");
readReg(0x0029, 2, "Power Control 7");
readReg(0x002B, 2, "Frame Rate");
}
static void read_9327(char *title)
{
Serial.println(title);
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 2, "Command Access Protect");
readReg(0xB1, 2, "Low Power Control");
readReg(0xB3, 5, "Frame Memory");
readReg(0xB4, 2, "Frame Mode");
readReg(0xB5, 2, "Sub Panel Control");
readReg(0xBF, 2, "Backlight Control");
readReg(0xC0, 7, "Panel Control");
readReg(0xC1, 4, "Display Timing Normal");
readReg(0xC3, 4, "Display Timing Idle");
readReg(0xC4, 2, "VCOM Timing");
readReg(0xC5, 2, "Frame Rate");
readReg(0xC6, 2, "Interface Control");
readReg(0xC8, 13, "GAMMA");
readReg(0xC9, 13, "GAMMA Red/Blue");
readReg(0xCC, 2, "Panel Control");
readReg(0xD0, 4, "Power Control");
readReg(0xD1, 4, "VCOM Control");
readReg(0xD2, 3, "Power Normal");
readReg(0xD3, 3, "Power Partial");
readReg(0xD4, 3, "Power Idle");
readReg(0xEF, 6, "Device Code Read");
}
static void read_9338(char *title)
{
Serial.println(title);
readReg(0x04, 4, "Manufacturer ID");
// readReg(0x05, 2, "DSI errors");
readReg(0x09, 5, "Status Register");
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xB0, 2, "Interface Mode");
readReg(0xB1, 3, "Frame Rate Normal");
readReg(0xB2, 3, "Frame Rate Idle");
readReg(0xB3, 3, "Frame Rate Partial");
readReg(0xB4, 3, "Inversion Control");
readReg(0xB5, 5, "Blanking Porch");
readReg(0xB6, 4, "Display Control");
readReg(0xB7, 2, "Entry Mode Set");
readReg(0xC0, 2, "Power Control 1");
readReg(0xC1, 2, "Power Control 2");
readReg(0xC2, 2, "Power Control 3");
readReg(0xC3, 2, "Power Control 4");
readReg(0xC4, 2, "Power Control 5");
readReg(0xC5, 3, "VCOM Control 1");
readReg(0xC7, 2, "VCOM Control 2");
/*
readReg(0xD0, 3, "NVM Write");
readReg(0xD1, 4, "NVM key");
*/
readReg(0xD2, 3, "NVM Status");
readReg(0xD3, 4, "RDID4");
readReg(0xDA, 2, "RDID1");
readReg(0xDB, 2, "RDID2");
readReg(0xDC, 2, "RDID3");
readReg(0xE0, 16, "GAMMA-P");
readReg(0xE1, 16, "GAMMA-N");
readReg(0xF2, 2, "GAMMA-3G");
readReg(0xF6, 4, "Interface Control");
}
static void read_9481(char *title)
{
Serial.println(title);
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 2, "Command Access Protect");
readReg(0xB3, 5, "Frame Memory");
readReg(0xB4, 2, "Frame Mode");
readReg(0xBF, 6, "Device Code Read");
readReg(0xC0, 6, "Panel Control");
readReg(0xC1, 4, "Display Timing Normal");
readReg(0xC2, 4, "Display Timing Partial");
readReg(0xC3, 4, "Display Timing Idle");
readReg(0xC5, 2, "Frame Rate");
readReg(0xC6, 2, "Interface Control");
readReg(0xC8, 13, "GAMMA");
readReg(0xCC, 2, "Panel Control");
readReg(0xD0, 4, "Power Control");
readReg(0xD1, 4, "VCOM Control");
readReg(0xD2, 3, "Power Normal");
readReg(0xD3, 3, "Power Partial");
readReg(0xD4, 3, "Power Idle");
readReg(0xE4, 4, "? SETCABC(HX) (f.k. ILI)");
readReg(0xE9, 4, "? Set Panel Related(HX)");
readReg(0xEE, 5, "? Set EQ Function(HX)");
readReg(0xF0, 4, "f.k (ILI)");
readReg(0xF1, 2, "f.k");
readReg(0xF2, 4, "f.k");
readReg(0xF3, 4, "f.k (ILI)");
readReg(0xF4, 4, "f.k");
readReg(0xF5, 2, "f.k");
readReg(0xF6, 2, "f.k");
readReg(0xF7, 4, "f.k");
readReg(0xF8, 3, "f.k");
readReg(0xF9, 2, "f.k");
}
static void read_9486(char *title)
{
Serial.println(title);
readReg(0x04, 4, "Manufacturer ID");
readReg(0x05, 2, "DSI errors");
readReg(0x09, 5, "Status Register");
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xB0, 2, "Interface Mode");
readReg(0xB1, 3, "Frame Rate Normal");
readReg(0xB2, 3, "Frame Rate Idle");
readReg(0xB3, 3, "Frame Rate Partial");
readReg(0xB4, 2, "Inversion Control");
readReg(0xB5, 5, "Blanking Porch");
readReg(0xB6, 4, "Display Control");
readReg(0xB7, 2, "Entry Mode Set");
readReg(0xBF, 6, "NON-Ilitek Device Code Read");
readReg(0xC0, 3, "Power Control 1");
readReg(0xC1, 3, "Power Control 2");
readReg(0xC2, 2, "Power Control 3");
readReg(0xC3, 2, "Power Control 4");
readReg(0xC4, 2, "Power Control 5");
readReg(0xC5, 5, "VCOM Control 1");
/*
readReg(0xC6, 3, "CABC Control 1");
readReg(0xC8, 3, "CABC Control 2");
readReg(0xC9, 2, "CABC Control 3");
readReg(0xCA, 2, "CABC Control 4");
readReg(0xCB, 2, "CABC Control 5");
readReg(0xCC, 2, "CABC Control 6");
readReg(0xCD, 2, "CABC Control 7");
readReg(0xCE, 2, "CABC Control 8");
readReg(0xCF, 2, "CABC Control 9");
readReg(0xD0, 3, "NVM Write");
readReg(0xD1, 4, "NVM key");
readReg(0xD2, 5, "NVM Status");
*/
readReg(0xD3, 4, "RDID4");
readReg(0xDA, 2, "RDID1");
readReg(0xDB, 2, "RDID2");
readReg(0xDC, 2, "RDID3");
readReg(0xE0, 16, "GAMMA-P");
readReg(0xE1, 16, "GAMMA-N");
readReg(0xF2, 10, "Adjust 2");
readReg(0xF7, 5, "Adjust 3");
readReg(0xF8, 3, "Adjust 4");
readReg(0xF9, 3, "Adjust 5");
readReg(0xFB, 2, "SPI Read");
readReg(0xFC, 3, "Adjust 6");
}
static void read_61581(char *title)
{
Serial.println(title);
readReg(0x0A, 2, "Get Power Mode");
readReg(0x0B, 2, "Get Address Mode");
readReg(0x0C, 2, "Get Pixel Format");
readReg(0x0D, 2, "Get Display Mode");
readReg(0x0E, 2, "Get Signal Mode");
readReg(0x0F, 2, "Get Diagnostic Result");
readReg(0xA1, 6, "RD_DDB Start");
readReg(0xB0, 2, "Command Access Protect");
readReg(0xB3, 5, "Frame Memory");
readReg(0xB4, 2, "Frame Mode");
readReg(0xB8, 19, "Backlight ctl1");
readReg(0xB9, 6, "Backlight ctl2");
readReg(0xBA, 2, "Backlight ctl3");
readReg(0xBC, 2, "MDDI CRC");
readReg(0xBF, 5, "Device Code Read");
readReg(0xC0, 9, "Panel Control");
readReg(0xC1, 5, "Display Timing Normal");
readReg(0xC2, 5, "Display Timing Partial");
readReg(0xC3, 5, "Display Timing Idle");
readReg(0xC4, 5, "Gate Drive");
readReg(0xC6, 2, "Interface Control");
readReg(0xC8, 21, "GAMMA");
readReg(0xD0, 4, "Power Control");
readReg(0xD1, 4, "VCOM Control");
readReg(0xD2, 4, "Power Normal");
readReg(0xD3, 4, "Power Partial");
readReg(0xD4, 4, "Power Idle");
}