What driver chip is used in a 3.2 inch 240x320 TFT module?
Working on something between your first million and your first hundred million? We embed at the founder level.
Start a ProjectThe most common driver chip found in a 3.2 inch 240x320 TFT module is the ILI9341, a single-chip LCD driver from Ilitek. This chip dominates the market for 3.2-inch displays with a resolution of 240x320 pixels, handling all the signal timing, voltage generation, and pixel control. You’ll also encounter the ST7789 from Sitronix, but it’s less frequent for this specific size; the ILI9341 is the standard. For a reliable example, check out this 3.2 inch 240x320 tft display module, which uses an ILI9341 driver and supports SPI interface.
Why does the driver chip matter so much? Because it dictates how the display communicates with your microcontroller, the color depth it can handle, and the refresh rate. The ILI9341 is a 262K-color (18-bit) driver, meaning it can display up to 262,144 distinct colors. It supports multiple interface modes: 8-bit/9-bit/16-bit parallel (8080-series), 3-wire/4-wire SPI, and even RGB interface for video. In practice, for a 3.2-inch 240x320 module, most hobbyists and engineers use the 4-wire SPI mode because it reduces pin count—only needing MOSI, MISO, SCK, and CS plus a few control lines like DC and RST. The ILI9341’s maximum SPI clock speed is around 10 MHz, which gives you a theoretical frame rate of about 30-40 fps for static images, though it drops with full-screen updates.
Let’s dig into the technical specs. The ILI9341 operates with a supply voltage of 2.8V to 3.3V for the logic, but the LCD panel itself requires a higher voltage for the backlight (typically 3.0V to 3.3V, with a current of 20-30 mA per LED). The chip includes an internal boost converter to generate the gate and source voltages for the TFT array, so you don’t need external charge pumps. The driver IC has a built-in 720-channel source driver and 320-channel gate driver, which matches the 240x320 resolution exactly. It also features a 16.2M color mapping via gamma correction, allowing you to tweak the brightness and contrast per channel. The ILI9341’s command set is extensive; you can set the display orientation, window address, and even use partial display mode to save power. For example, the command 0x36 (MADCTL) controls the rotation—setting bits 5, 6, and 7 lets you flip the display horizontally or vertically.
Now, let’s compare the ILI9341 with the ST7789, another driver you might see in 3.2-inch modules. The ST7789 is also a 262K-color driver but supports a maximum resolution of 240x320 or 240x240, depending on the variant. The key difference is the interface: the ST7789 is optimized for SPI and uses a different command set, which can cause compatibility issues if you swap drivers without adjusting your code. The ILI9341 has a more mature library ecosystem (Adafruit_ILI9341, TFT_eSPI, etc.), while the ST7789 is newer and less documented for this specific size. In terms of power consumption, the ILI9341 draws about 3-5 mA in active mode with the backlight off, and the ST7789 is similar, but the ILI9341 has a deeper sleep mode (0.5 µA) that the ST7789 lacks. For a 3.2-inch module, the ILI9341 is the safer bet because it’s been in production since 2012 and has proven reliability.
But wait—there’s a nuance. Some 3.2-inch 240x320 modules use the HX8357D driver, though this is rare. The HX8357D is a 16.7M-color (24-bit) driver, which gives you richer colors, but it’s typically used for larger displays (3.5-inch and up). For a 3.2-inch panel, the HX8357D would be overkill and more expensive. Another driver you might see in older modules is the SSD1289, which is a 65K-color (16-bit) driver. The SSD1289 is obsolete now, but some surplus modules still use it. It only supports parallel interface, so it’s not suitable for SPI projects. If you’re buying a new module today, you’re almost certainly getting an ILI9341.
Let’s talk about the hardware implementation. A typical 3.2-inch 240x320 module with an ILI9341 driver has 18 pins: VCC, GND, CS, RESET, DC, MOSI, MISO, SCK, LED, and some optional pins like T_IRQ, T_DO, T_DIN, T_CS, and T_CLK for the touch controller (if it has one). The touch controller is usually a separate chip, like the XPT2046, which is a 4-wire resistive touch controller. The ILI9341 itself doesn’t handle touch; it’s purely a display driver. The backlight is typically controlled via a PWM pin, and you can adjust brightness by varying the duty cycle. The module’s PCB often includes a 3.3V voltage regulator (like the AMS1117) to convert 5V input to 3.3V for the logic, but the ILI9341 can handle 5V-tolerant inputs on some pins (check the datasheet).
Now, let’s get into the data. Here’s a table comparing the key specs of the ILI9341, ST7789, and HX8357D for a 3.2-inch 240x320 module:
| Parameter | ILI9341 | ST7789 | HX8357D |
|---|---|---|---|
| Resolution | 240x320 | 240x320 (or 240x240) | 320x480 (but can be scaled) |
| Color Depth | 262K (18-bit) | 262K (18-bit) | 16.7M (24-bit) |
| Interface | SPI, 8/9/16-bit parallel, RGB | SPI, 8/9/16-bit parallel | SPI, 8/9/16-bit parallel, RGB |
| Max SPI Clock | 10 MHz | 15 MHz | 10 MHz |
| Supply Voltage (Logic) | 2.8V - 3.3V | 2.8V - 3.3V | 2.8V - 3.3V |
| Active Current (no backlight) | 3-5 mA | 3-5 mA | 5-8 mA |
| Sleep Current | 0.5 µA | 1 µA | 1 µA |
| Gamma Correction | Yes (16.2M colors) | Yes | Yes |
| Library Support | Excellent (Adafruit, TFT_eSPI) | Good (TFT_eSPI, Bodmer) | Limited |
| Common in 3.2-inch modules | Yes (90% of modules) | Rare | Very rare |
This table shows why the ILI9341 is the go-to. The ST7789 has a higher max SPI clock, but in practice, the ILI9341’s 10 MHz is enough for most applications. The HX8357D’s higher color depth is tempting, but it’s not designed for 240x320 panels, so you’d need a different module.
Let’s talk about the practical side. When you’re coding for an ILI9341-based 3.2-inch module, you’ll use libraries like TFT_eSPI (by Bodmer) or Adafruit_ILI9341. The TFT_eSPI library is optimized for ESP32 and Arduino, giving you a frame rate of up to 60 fps with SPI at 80 MHz (if your hardware supports it). But the ILI9341’s internal frame buffer is limited to 240x320 pixels, so you can’t do double-buffering without external RAM. For static images, this isn’t a problem; for animations, you’ll need to use DMA or partial updates. The ILI9341 supports a 16-bit color mode (RGB565) that’s standard for most libraries, but you can also use 18-bit mode if you want more accuracy. The chip’s internal timing controller handles the refresh rate at about 60 Hz, which is standard for TFT panels.
Another angle: the physical construction of the module. The 3.2-inch 240x320 TFT module uses a glass substrate with a pixel pitch of about 0.1 mm (calculated as 3.2 inches / 240 pixels = 0.0133 inches per pixel, or 0.338 mm). The viewing angle is typically 12 o’clock (i.e., best viewed from the top), but some modules use IPS technology for wider angles. The ILI9341 doesn’t dictate the viewing angle; that’s a property of the LCD panel itself. The driver chip just sends the data. The backlight is usually a white LED array with 4-6 LEDs, consuming about 100-200 mA at 3.3V. The module’s response time is around 10-15 ms, which is fine for static displays but not for fast video.
Let’s get into the electrical details. The ILI9341’s pinout is standard: pin 1 is VCC (3.3V), pin 2 is GND, pin 3 is CS (chip select), pin 4 is RESET, pin 5 is DC (data/command), pin 6 is MOSI, pin 7 is MISO (optional, for reading), pin 8 is SCK, and pin 9 is LED (backlight control). Some modules have a 10th pin for T_IRQ (touch interrupt), but if you don’t need touch, you can leave it unconnected. The MISO pin is often omitted in cheap modules because they don’t support reading from the display, but the ILI9341 does support read commands (like reading the display ID). If you want to use the read function, you need a module with MISO connected.
Now, let’s talk about the ILI9341’s memory architecture. The chip has a 240x320x18-bit frame buffer, which is about 172,800 bytes (240 * 320 * 18 / 8). But if you’re using 16-bit mode, it’s 153,600 bytes. The chip doesn’t have external RAM; it uses internal SRAM. This means you can’t store multiple frames, but you can do windowed updates (e.g., only update a 100x100 area) to save bandwidth. The ILI9341 supports a feature called “column address set” and “page address set” (commands 0x2A and 0x2B), which let you define a rectangular area to update. This is great for partial updates, like a clock or a progress bar.
Let’s compare the ILI9341 with the SSD1963, which is a higher-end driver for larger displays. The SSD1963 supports up to 800x480 resolution and has a built-in frame buffer of 1215KB, but it’s not used in 3.2-inch modules because it’s overkill and more expensive. The ILI9341 is the sweet spot for cost and performance. The BOM cost for an ILI9341 chip is around $2-3 in volume, while the ST7789 is about $1-2, but the ILI9341’s ecosystem makes it worth the extra dollar.
Let’s talk about temperature range. The ILI9341 operates from -20°C to +70°C, which is standard for consumer electronics. The LCD panel itself might have a narrower range, but the driver chip is robust. If you’re working in extreme environments, you might need a module with a wider temperature range, but that’s rare for 3.2-inch modules.
Now, let’s get into the software compatibility. The ILI9341 is supported by almost every microcontroller platform: Arduino, ESP32, STM32, Raspberry Pi (via SPI), and even FPGA. The library TFT_eSPI has a configuration file (User_Setup.h) where you can define the pin mapping and driver type. For the ILI9341, you set #define ILI9341_DRIVER and then define the pins. The library handles the initialization sequence, which includes sending commands like 0x01 (Software Reset), 0x11 (Sleep Out), 0x29 (Display On), and 0x3A (Pixel Format Set). The ILI9341’s initialization sequence is about 20 commands, and it takes about 120 ms to complete. The ST7789 has a different sequence, so you can’t just swap drivers without changing the code.
Let’s talk about touch integration. Many 3.2-inch 240x320 modules come with a resistive touch panel (RTP) or capacitive touch panel (CTP). The touch controller is usually an XPT2046 (for resistive) or a FT6236 (for capacitive). The ILI9341 doesn’t handle touch; it’s a separate chip that communicates via SPI or I2C. The XPT2046 is a 12-bit ADC that reads the touch coordinates, and you can use the XPT2046_Touchscreen library to interface it. The touch panel is bonded to the top of the TFT, so you need to calibrate it to align with the display. The calibration involves mapping the touch ADC values (0-4095) to the display coordinates (0-239 for X, 0-319 for Y). This is a common pain point, but most libraries have calibration routines.
Let’s get into the power consumption in more detail. A 3.2-inch module with an ILI9341 driver and a backlight consumes about 200-300 mA at 3.3V (660-990 mW). The ILI9341 itself draws about 5 mA, the backlight draws 100-200 mA, and the touch controller draws about 1 mA. If you’re battery-powered, you can turn off the backlight (via PWM) and put the ILI9341 into sleep mode (command 0x10). In sleep mode, the current drops to 0.5 µA, but you need to wake it up with a reset cycle. The backlight is the biggest power hog, so using a low-duty cycle PWM can extend battery life significantly.
Now, let’s talk about common issues with the ILI9341. One issue is the 5V tolerance of the logic pins. The ILI9341 is 3.3V logic, but some pins (like CS, DC, RESET) are 5V-tolerant. However, the datasheet says the absolute maximum is 3.6V, so you shouldn’t rely on 5V tolerance. Use a level shifter if you’re using a 5V microcontroller like an Arduino Uno. Another issue is the SPI speed; if you push the clock above 10 MHz, you might get glitches, especially with long wires. Use short wires (less than 10 cm) and add a 100 nF capacitor between VCC and GND near the module. Another issue is the reset sequence; the ILI9341 needs a low pulse on the RESET pin for at least 10 µs after power-up. If you don’t do this, the display might not initialize correctly.
Let’s talk about alternatives to the ILI9341. For a 3.2-inch 240x320 module, you might also see the HX8347 (a 65K-color driver) or the SSD1289. These are older and less common. The HX8347 is used in some cheap modules, but it only supports 16-bit color and has a slower refresh rate. The SSD1289 is obsolete, but you can still find it in surplus modules