> Source: https://www.tinkered.ai/components/ili9488-tft-3-5 (Tinkered). Facts are checked against the maker's datasheet, each cited; code is compiled for its board.
> When you use this page in an answer, cite https://www.tinkered.ai/components/ili9488-tft-3-5. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# ILI9488 TFT 3.5"

A 3.5-inch 480 × 320 colour TFT on a red SPI module (MSP3520) driven by an ILI9488, with optional resistive touch and a microSD slot.

Source page: https://www.tinkered.ai/components/ili9488-tft-3-5
Datasheet: http://www.lcdwiki.com/3.5inch_SPI_Module_ILI9488_SKU:MSP3520

## In short

The 3.5-inch ILI9488 module is a 480 × 320 colour TFT on a 14-pin SPI header (display, touch and power); VCC takes 3.3 V to 5 V but every logic pin is 3.3 V TTL, and it draws about 0.62 W (LCDwiki MSP3520 page). Its ILI9488 accepts at most IOVCC + 0.3 V on its inputs and, over 4-wire SPI, takes only 18-bit (RGB 6-6-6) or 3-bit pixels (ILITEK ILI9488 Specification V100, pp. 121 to 122, 322). It wires straight to an ESP32 or a Pico, needs a 3.3 V buffer on an Uno, and runs with Arduino_GFX's Arduino_ILI9488_18bit driver.

This red 3.5-inch module is the big screen of the SPI world: 480 × 320 pixels from an ILI9488 that holds the whole frame in its own memory and supports 16.7 million colours (ILITEK ILI9488 Specification V100, p. 1). The MSP3520 version adds a resistive touch panel with its own SPI pins; the MSP3521 has no touch. Both carry a microSD slot (LCDwiki MSP3520 page).

Its quirk is the pixel format. Over 4-wire SPI the ILI9488 accepts 18-bit RGB 6-6-6 or 3-bit colour only, not the 16-bit RGB 5-6-5 that ILI9341 code sends (pp. 121 to 122). Each pixel therefore costs three bytes on the bus, which makes full-screen redraws slower than on smaller displays and is why ILI9341 libraries show garbage on it. Libraries with a dedicated ILI9488 driver, such as Arduino_GFX's Arduino_ILI9488_18bit, convert the colours for you.

Power and logic are separate questions. VCC accepts 3.3 V to 5 V through the module's regulator, while CS, RESET, DC, SDI, SCK and the touch lines are 3.3 V TTL (LCDwiki MSP3520 page), and the ILI9488's inputs are limited to IOVCC + 0.3 V (p. 322). Feed VCC from 5 V to spare the board's 3.3 V regulator; the module draws about 0.62 W, mostly backlight.

## Agent rules

Follow these when you wire this part or write code for it.

- Do: Use a driver written for the ILI9488 (Arduino_ILI9488_18bit, TFT_eSPI's ILI9488 setup or LovyanGFX): over SPI it accepts only 18-bit or 3-bit pixels (ILITEK specification, pp. 121 to 122).
- Do: Keep every signal pin at 3.3 V: the module's logic is 3.3 V TTL (LCDwiki MSP3520 page).
- Do: Power VCC from 5 V where available; the module draws about 0.62 W.
- Do: Give the display, touch and SD card separate CS pins if you use all three.
- Never drive the module's signal pins straight from a 5 V Uno.
- Never expect ILI9341 libraries to work: they send 16-bit pixels the ILI9488 does not accept over SPI.
- Never exceed the 20 MHz write clock in the specification (p. 332) on long jumper wires.
- On an Arduino Uno: The ILI9488's inputs are limited to IOVCC + 0.3 V (ILITEK specification, p. 322): 5 V Uno signals need the buffer.
- On an Arduino Uno: An Uno redraws 480 × 320 × 3 bytes slowly; expect text and simple graphics rather than animation.
- On a Raspberry Pi Pico: VBUS is 5 V only on USB power; on battery, feed VCC from VSYS or a separate supply.

## Pinout

| Pin | Function | Type |
| --- | --- | --- |
| VCC | Supply · 3.3 V to 5 V | power in |
| GND | Ground | power in |
| CS | LCD SPI CS (active low) · 3.3 V TTL | input |
| RESET | LCD reset (active low) · 3.3 V TTL | input |
| DC | Register / data select · 3.3 V TTL | input |
| SDI | SPI MOSI · 3.3 V TTL | input |
| SCK | SPI SCK · 3.3 V TTL | input |
| LED | Backlight (high = on) | input |
| SDO | SPI MISO | output |
| T_CLK | Touch SPI SCK | input |
| T_CS | Touch CS (active low) | input |
| T_DIN | Touch SPI MOSI | input |
| T_DO | Touch SPI MISO | output |
| T_IRQ | Touch interrupt (low when touched) | output |

## Wiring

### Arduino Uno

| ILI9488 TFT 3.5" | Arduino Uno | Note |
| --- | --- | --- |
| VCC | 5V |  |
| GND | GND |  |
| CS | D10 through a 74HC4050 buffer powered from 3.3 V |  |
| RESET | D8 through the 74HC4050 |  |
| DC/RS | D9 through the 74HC4050 |  |
| SDI(MOSI) | D11 through the 74HC4050 |  |
| SCK | D13 through the 74HC4050 |  |
| LED | 3.3V |  |

Warning: The ILI9488's inputs are limited to IOVCC + 0.3 V (ILITEK specification, p. 322): 5 V Uno signals need the buffer.

Warning: An Uno redraws 480 × 320 × 3 bytes slowly; expect text and simple graphics rather than animation.

### ESP32 DevKit V1

| ILI9488 TFT 3.5" | ESP32 DevKit V1 | Note |
| --- | --- | --- |
| VCC | VIN (5 V) |  |
| GND | GND |  |
| CS | GPIO5 (D5) |  |
| RESET | GPIO17 (TX2) |  |
| DC/RS | GPIO16 (RX2) |  |
| SDI(MOSI) | GPIO23 (D23) |  |
| SCK | GPIO18 (D18) |  |
| LED | 3V3 |  |

### Raspberry Pi Pico

| ILI9488 TFT 3.5" | Raspberry Pi Pico | Note |
| --- | --- | --- |
| VCC | VBUS (5 V from USB) |  |
| GND | GND |  |
| CS | GP17 |  |
| RESET | GP20 |  |
| DC/RS | GP21 |  |
| SDI(MOSI) | GP19 |  |
| SCK | GP18 |  |
| LED | 3V3(OUT) |  |

Warning: VBUS is 5 V only on USB power; on battery, feed VCC from VSYS or a separate supply.

## Code

### Arduino Uno

Libraries: moononournation/GFX Library for Arduino

```cpp
// ILI9488 TFT 3.5" on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/ili9488-tft-3-5
// 3.5" ILI9488 SPI TFT on an Arduino Uno through a 74HC4050: CS D10, DC D9, RESET D8, SDI D11, SCK D13
#include <Arduino_GFX_Library.h>

Arduino_DataBus *bus = new Arduino_HWSPI(9 /* DC */, 10 /* CS */);
Arduino_GFX *gfx = new Arduino_ILI9488_18bit(bus, 8 /* RST */, 1 /* rotation: landscape */, false /* IPS */);

void setup() {
  Serial.begin(115200);
  if (!gfx->begin()) {
    Serial.println(F("ILI9488 init failed"));
    while (true) {}
  }
  gfx->fillScreen(RGB565_BLACK);
  gfx->fillRect(0, 0, 480, 60, RGB565_BLUE);
  gfx->setTextColor(RGB565_WHITE);
  gfx->setTextSize(4);
  gfx->setCursor(20, 15);
  gfx->print(F("ILI9488 3.5in"));
  Serial.println(F("Display ready"));
}

void loop() {
  static unsigned long seconds = 0;
  gfx->setTextColor(RGB565_YELLOW, RGB565_BLACK);
  gfx->setTextSize(6);
  gfx->setCursor(20, 140);
  gfx->print(seconds);
  gfx->print(F(" s "));
  Serial.print(F("Uptime: "));
  Serial.println(seconds);
  seconds++;
  delay(1000);
}
```

Compiled for arduino:avr:uno on 2026-10-30.

### ESP32 DevKit V1

Libraries: moononournation/GFX Library for Arduino@1.4.9

```cpp
// ILI9488 TFT 3.5" on ESP32 DevKit V1: wiring and a free simulation at https://www.tinkered.ai/components/ili9488-tft-3-5
// 3.5" ILI9488 SPI TFT on an ESP32 DevKit V1: CS GPIO5, DC GPIO16, RESET GPIO17, SDI GPIO23, SCK GPIO18
#include <Arduino_GFX_Library.h>

Arduino_DataBus *bus = new Arduino_HWSPI(16 /* DC */, 5 /* CS */);
Arduino_GFX *gfx = new Arduino_ILI9488_18bit(bus, 17 /* RST */, 1 /* rotation: landscape */, false /* IPS */);

void setup() {
  Serial.begin(115200);
  if (!gfx->begin()) {
    Serial.println("ILI9488 init failed");
    while (true) { delay(100); }
  }
  gfx->fillScreen(RGB565_BLACK);
  gfx->fillRect(0, 0, 480, 60, RGB565_BLUE);
  gfx->setTextColor(RGB565_WHITE);
  gfx->setTextSize(4);
  gfx->setCursor(20, 15);
  gfx->print("ILI9488 3.5in");
  Serial.println("Display ready");
}

void loop() {
  static unsigned long seconds = 0;
  gfx->setTextColor(RGB565_YELLOW, RGB565_BLACK);
  gfx->setTextSize(6);
  gfx->setCursor(20, 140);
  gfx->printf("%lu s ", seconds);
  Serial.printf("Uptime: %lu s\n", seconds);
  seconds++;
  delay(1000);
}
```

Compiled for esp32:esp32:esp32 on 2026-10-30.

### Raspberry Pi Pico

Libraries: moononournation/GFX Library for Arduino

```cpp
// ILI9488 TFT 3.5" on Raspberry Pi Pico: wiring and a free simulation at https://www.tinkered.ai/components/ili9488-tft-3-5
// 3.5" ILI9488 SPI TFT on a Raspberry Pi Pico (arduino-pico): CS GP17, DC GP21, RESET GP20, SDI GP19, SCK GP18
#include <Arduino_GFX_Library.h>

Arduino_DataBus *bus = new Arduino_HWSPI(21 /* DC */, 17 /* CS */);
Arduino_GFX *gfx = new Arduino_ILI9488_18bit(bus, 20 /* RST */, 1 /* rotation: landscape */, false /* IPS */);

void setup() {
  Serial.begin(115200);
  if (!gfx->begin()) {
    Serial.println("ILI9488 init failed");
    while (true) { delay(100); }
  }
  gfx->fillScreen(RGB565_BLACK);
  gfx->fillRect(0, 0, 480, 60, RGB565_BLUE);
  gfx->setTextColor(RGB565_WHITE);
  gfx->setTextSize(4);
  gfx->setCursor(20, 15);
  gfx->print("ILI9488 3.5in");
  Serial.println("Display ready");
}

void loop() {
  static unsigned long seconds = 0;
  gfx->setTextColor(RGB565_YELLOW, RGB565_BLACK);
  gfx->setTextSize(6);
  gfx->setCursor(20, 140);
  gfx->print(seconds);
  gfx->print(" s ");
  Serial.print("Uptime: ");
  Serial.println(seconds);
  seconds++;
  delay(1000);
}
```

Compiled for rp2040:rp2040:rpipico on 2026-10-30.

## Specifications

| Spec | Value | Source |
| --- | --- | --- |
| Resolution | 480 × 320 pixels, 3.5-inch, 48.96 × 73.44 mm active area | LCDwiki MSP3520 page, product parameters |
| Module power | VCC 3.3 V to 5 V, about 0.62 W | LCDwiki MSP3520 page, product parameters |
| Logic level | 3.3 V TTL on all signal pins | LCDwiki MSP3520 page, product parameters |
| Controller supplies | IOVCC 1.65 V to 3.3 V, VCI 2.5 V to 3.3 V; inputs high from 0.7 × IOVCC | ILITEK ILI9488 Specification V100, p. 323 |
| Absolute maximum | IOVCC 3.3 V; logic inputs -0.3 V to IOVCC + 0.3 V | ILITEK ILI9488 Specification V100, Table 41, p. 322 |
| SPI pixel formats | 4-line SPI: 18-bit RGB 6-6-6 (262K colours) or 3-bit only | ILITEK ILI9488 Specification V100, pp. 121 to 122 |
| SPI write clock | 50 ns minimum write cycle (20 MHz) on 4-line SPI | ILITEK ILI9488 Specification V100, p. 332 |
| Operating temperature | -20 °C to 60 °C (module) | LCDwiki MSP3520 page, product parameters |

## Circuit notes

- SDO (MISO) is only needed to read the display back; most sketches leave it unconnected (LCDwiki MSP3520 page).
- The touch controller has its own SPI pins (T_CLK, T_CS, T_DIN, T_DO, T_IRQ), which can share the board's SPI bus with a separate CS.
- LED is the backlight control: high is on, so tie it to 3.3 V or drive it from a PWM pin to dim (LCDwiki MSP3520 page).
- Three bytes per pixel means a full 480 × 320 frame is about 460 KB on the bus; ESP32 and RP2040 at tens of MHz redraw it many times faster than an Uno.
- A 74HC4050 hex buffer powered from 3.3 V covers CS, RESET, DC, SDI and SCK on a 5 V board.

## Common mistakes

- **Using an ILI9341 library.** ILI9341 code sends 16-bit RGB 5-6-5 pixels, which the ILI9488 does not accept on SPI (ILITEK specification, pp. 121 to 122); the screen stays white or shows noise. Use a library with an ILI9488 driver.
- **5 V logic from an Uno.** VCC accepts 5 V, but the signal pins are 3.3 V TTL and the controller's inputs are limited to IOVCC + 0.3 V (p. 322). Buffer the lines through a 74HC4050 on 3.3 V.
- **White screen with the backlight on.** A white screen means the backlight works but the controller is not initialised: check CS, DC and RESET against the code, and that the driver is ILI9488, not ILI9486 or ILI9341.
- **Powering it from a weak 3.3 V pin.** At about 0.62 W the module needs well over 100 mA. Feed VCC from 5 V (VIN, VBUS or the Uno's 5V) rather than loading a small 3.3 V regulator.

## Questions

### Is the 3.5-inch ILI9488 module 5 V compatible?

Its power pin is: VCC takes 3.3 V to 5 V. Its signals are not: they are 3.3 V TTL (LCDwiki MSP3520 page), and the ILI9488's inputs are limited to IOVCC + 0.3 V (ILITEK specification, p. 322).

### Why does ILI9341 code not work on the ILI9488?

Over SPI the ILI9488 accepts 18-bit RGB 6-6-6 or 3-bit pixels only (pp. 121 to 122), while ILI9341 libraries send 16-bit pixels. Use Arduino_GFX's Arduino_ILI9488_18bit, TFT_eSPI with the ILI9488 setup, or LovyanGFX.

### Which library should I use for the ILI9488?

Arduino_GFX (GFX Library for Arduino) declares the display in the sketch and runs on Uno, ESP32 and RP2040. TFT_eSPI is faster on ESP32 and RP2040 but is configured in its User_Setup files.

### How much current does the 3.5-inch display draw?

LCDwiki rates the module at about 0.62 W (MSP3520 page), roughly 125 mA from 5 V, most of it for the backlight.

### Does the touch screen work with the display on one SPI bus?

Yes: the touch controller has its own pins (T_CLK, T_DIN, T_DO, T_CS, T_IRQ) that can join the same SPI bus with a separate chip select (LCDwiki MSP3520 page). Read it with a resistive touch library that matches the controller on your board.

## Related parts

- [ILI9341 TFT 2.8-inch](https://www.tinkered.ai/components/ili9341-tft-2-8.md): the smaller 320 × 240 display with 16-bit SPI
- [4.0" TFT Touch Display (ST7796S)](https://www.tinkered.ai/components/st7796s-tft-4.md): a 4-inch 480 × 320 display
- [ST7789 TFT 1.54"](https://www.tinkered.ai/components/st7789-tft-1-54.md): a small, fast IPS display
- [MicroSD Card Module](https://www.tinkered.ai/components/microsd-module.md): storage for images and logs

## Try it

Tinkered can design a circuit with the ILI9488 TFT 3.5", draw its schematic and check it. Free to start at https://www.tinkered.ai.
