From 8a5643982bd9ba7c8bdc5f3febe9bcc919d98d73 Mon Sep 17 00:00:00 2001 From: prenticedavid Date: Mon, 30 Apr 2018 18:32:39 +0100 Subject: [PATCH] add LCD_ID_readnew example --- examples/LCD_ID_readnew/LCD_ID_readnew.ino | 734 +++++++++++++++++++++ extras/mcufriend_how_to.txt | 2 +- 2 files changed, 735 insertions(+), 1 deletion(-) create mode 100644 examples/LCD_ID_readnew/LCD_ID_readnew.ino diff --git a/examples/LCD_ID_readnew/LCD_ID_readnew.ino b/examples/LCD_ID_readnew/LCD_ID_readnew.ino new file mode 100644 index 0000000..92b28ec --- /dev/null +++ b/examples/LCD_ID_readnew/LCD_ID_readnew.ino @@ -0,0 +1,734 @@ +// 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_1520[] = { (0xB0), 2, 0x00, 0x00 }; +uint8_t unlock_1526[] = { (0xB0), 2, 0x3F, 0x3F }; +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 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_8357; + // unlock = unlock_5310; + // page_N = d5310_1_in; + // 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_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) 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(uint8_t command, uint8_t *block, int8_t n) +{ + lcdSetWriteDir(); + digitalWrite(LCD_CS, LOW); + digitalWrite(LCD_RS, LOW); + digitalWrite(LCD_RD, HIGH); + digitalWrite(LCD_WR, HIGH); + lcdWrite8(command); + digitalWrite(LCD_WR, LOW); + delayMicroseconds(10); + digitalWrite(LCD_WR, HIGH); + 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 Powsr 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 Powsr 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 Powsr 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 Powsr 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 Powsr 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 Powsr 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 Powsr 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"); +} + + diff --git a/extras/mcufriend_how_to.txt b/extras/mcufriend_how_to.txt index 0bb54a7..120ba8b 100644 --- a/extras/mcufriend_how_to.txt +++ b/extras/mcufriend_how_to.txt @@ -60,7 +60,7 @@ R61580 240x320 ID=0x1580 #define SUPPORT_1580 *** Untested *** R61581 320x480 ID=0x1581 RM68090 240x320 ID=0x6809 RM68140 320x480 ID=0x6814 #define SUPPORT_68140 -S6D0139 240x320 ID=0x0139 #define SUPPORT_0139 *** Untested *** +S6D0139 240x320 ID=0x0139 #define SUPPORT_0139 (no Band Scroll) S6D0154 240x320 ID=0x0154 #define SUPPORT_0154 SPFD5408 240x320 ID=0x5408 SPFD5420 240x400 ID=0x5420 #define SUPPORT_9326_5420