Infamous TFT display White screen. Please help

I currently have a DEVMO 2.2 Inch ILI9341 SPI TFT LCD Display I’m trying to connect to an arduino uno R3.

SDO/MISO not connected
LED to 5V with 56 ohm
SCK to pin 13 with 1k2 ground with 1k8
SDI/MOSI to pin 11 with 1k2 ground with 1k8
DC/RS to pin 8 with 1k2 ground with 1k8
RESET to Pin 7 with 1k2 ground with 1k8
CS to pin 9 with 1k2 ground with 1k8
GND to ground
VCC to 5V

I’m using the Adafruit GFX 1.9.0 and Adafruit_ILI9341 1.5.5 Libraries.

after uploading the GraphicsTest example the serial Monitor displays

ILI9341 Test!
Display Power Mode: 0xFF
Pixel Format: 0xFF
Image Format: 0xFF
Self Diagnostic: 0xFF
Benchmark Time (microseconds)
Screen fill 1496880
Text 175024
Lines 1435612
Horiz/Vert Lines 127044
Rectangles (outline) 83796
Rectangles (filled) 3107164
Circles (filled) 498776
Circles (outline) 613900
Triangles (outline) 316500
Triangles (filled) 1358164
Rounded rects (outline) 242988
Rounded rects (filled) 3134812

But The screen remain white no matter what any advise or idea of what i’m doing wrong?

I have a very similar display that I am using on a cheap arduino zero variant. I couldn't get it to work and sought help here. My post is here:

Have a read thru that and notice David's replies and how he stresses certain points. The one point he stressed, but I missed, is that every pin has to be hooked up to the arduno. Also, you should read up on the SPI interface. Here's a link that helped me:

Anyway, you didn't connect the MISO pin to the arduino. (read what David stress in my thread about every pin has to be connected) I would also think about powering the display using 3.3v, it's a 3.3v unit and could be damaged by 5v. I didn't look at your voltage divider/logic level shifter, but if it's wired correctly it will work. You do not need a logic level converter on the MISO pin.

On the software side of things, you need to make sure the pins are defined correctly at the beginning of the code. Posting up that bit of code might be helpful for you.


Well I was using the adafruit shield code but in other post see people are not connecting the MISO. I’ve tried to switch to 3.3V but that gave me the same results (with a less bright screen). I went ahead a define MISO and connected it to pin 12 but still no change in results. the do seems to be tong to post but heres the first half of it.

  This is our GFX example for the Adafruit ILI9341 Breakout and Shield

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_DC 8
#define TFT_CS 9
#define TFT_RESET 7
#define TFT_MISO 12

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

void setup() {
  Serial.println("ILI9341 Test!"); 

  // read diagnostics (optional but can help debug problems)
  uint8_t x = tft.readcommand8(ILI9341_RDMODE);
  Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDMADCTL);
  Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDPIXFMT);
  Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDIMGFMT);
  Serial.print("Image Format: 0x"); Serial.println(x, HEX);
  x = tft.readcommand8(ILI9341_RDSELFDIAG);
  Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
  Serial.println(F("Benchmark                Time (microseconds)"));
  Serial.print(F("Screen fill              "));

  Serial.print(F("Text                     "));

  Serial.print(F("Lines                    "));

  Serial.print(F("Horiz/Vert Lines         "));
  Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));

  Serial.print(F("Rectangles (outline)     "));

  Serial.print(F("Rectangles (filled)      "));
  Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));

  Serial.print(F("Circles (filled)         "));
  Serial.println(testFilledCircles(10, ILI9341_MAGENTA));

  Serial.print(F("Circles (outline)        "));
  Serial.println(testCircles(10, ILI9341_WHITE));

  Serial.print(F("Triangles (outline)      "));

  Serial.print(F("Triangles (filled)       "));

  Serial.print(F("Rounded rects (outline)  "));

  Serial.print(F("Rounded rects (filled)   "));



void loop(void) {
  for(uint8_t rotation=0; rotation<4; rotation++) {

You fried the display by connecting Vcc to 5V. Buy another one and chalk it up to experience.

Here is the very first of the seller's instructions:

How to use it?

  1. use 5v to led pin, 3.3v to vcc and 1k / 1.5k resistor voltage dividers to get it to work. 1k resistor in series from Arduino to tft logic pin, 1.5k from tft pin to ground.

I have to tend to agree with jremington, you might have fried the unit. The code looks correct. The only thing I can think of is to check all your jumper wires with an ohmmeter, maybe there is a bad one.

I recently bought 40 pin, male to female jumper wires. It's a 40 pin ribbon cable with individual connectors on the ends. Commonly called 'dupont' wires or cables, the wires have colored insulation and you can tear off wires as needed. I tore off 16 wires to use as a ribbon cable. Connect the device up and it didn't work. Turns out one of the wires was bad....

I don't know if the MISO pin is actually needed or not. I have been reading up on display libraries and looking for one that works better for me than the adafruit one. I was just reading how the adafruit libraries wait for a return signal from the driver. That data would be on the MISO line. Obviously the code doesn't wait forever on that data, or it would hang.....

Hope you figure it out,

From #0. You are using a Red SPI display.

From #2.

#define TFT_RESET 7
#define TFT_MISO 12

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

You have fallen for the Adafruit "trick" of omitting the TFT_RESET argument in the constructor.
This will guarantee failure on any of the Red SPI displays. (they have floating TFT_RESET pins)
But ensure that the Adafruuit examples work on Adafruit displays (which have pullups on TFT_RESET pin)

The Red boards are designed for 5V on VCC pin. They have a 3.3V regulator on the pcb.

The board in your photos does not match the image in #0.
Your board probably has a transistor for switching the LED.
Your board probably has an empty SOIC-8 footprint for a Flash chip.

You can connect VCC pin to 3.3V bit only if 5V is not available. (short out the regulator via the J1 jumper)

Adafruit code never waits for the SDO/MISO pin. There is no harm in omitting it.


p.s. the OP has posted excellent information. It would be wise to match the wire colours in the Fritzing diagram. I have not checked the wires in the photos but since the OP has been very neat and tidy, I would trust her/him.
Dupont wires tend to be well made.
The cheaper skinny male-male jumpers are less reliable.

My money is on using the proper full-fat constructor:

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RESET);

david_prentice Thanks for the compliment!

jremington the board wasn't fried (although I did order 3 other boards)

I followed the tutorial on this youtube page to the t and it worked. Since this does use a different library than adafruit it might have been a problem with libraries I was using or the resistors. I'm too tired right now to play around with the wiring, but I'll update when I do.

Your youtube tutorial example sketches both use full-fat constructors (i.e. use the TFT_RESET argument)

Ucglib example:

Ucglib_ILI9341_18x240x320_HWSPI ucg(9, 10, 8);  // (A0=9, CS=10, RESET=8)

Adafruit_ILI9341 example:

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

I would expect both these examples to work fine.
But so will the any of the Adafruit library examples if you use the full-fat constructor.