3.5" SPI LCD touch screen ili9488

Hello, I got a customized 3.5" LCD with touch panel but without touch controller. The LCD controller is ili9488. I am using ATmega328P-AU in one of my project. And due to limited io pins, I wanted to use ISP LCD interface. I could easily find upto 2.8" LCD with SPI but I wanted to use 3.5" with SPI. Which is hard to get. One of the manufacturer I got in touch with in China. They had made customized LCD with ili9488 controller for one of their client. They configured ili9488 to work with SPI. I ordered the samples from them. Now I got them with me. I am now looking for a library which can support 320x480 ili9488 based SPI LCD. I would appreciate if any one could guide me for it.

For touch panel I have XPT2046 chips with me, and I will use it with any touch library.

I tried quite a few libraries including ili9341, UTFT etc. But could not find ili9488 SPI based library. Or I may have overlooked it.

Thank you for any support.


What board / module do you have?

I found ILI9481 SPI Touch module

and ILI9481 SPI Touch board

and ILI9488 SPI Touch module

and ILI9486 SPI Touch module

or R61581 SPI Touch module

or R61581 SPI Touch board

There is nothing special with using the SPI interface. Just look at any ILI9341 SPI library. The only differences are the screen dimensions and the initialisation code. Most 320x480 controller chips can perform the same functions. Ok, there are some minor differences between the '81 and 86/88 style.

I just went to AliExpress and searched for "ILI9488 SPI Touch". I am a little wary of some AliExpress vendors. i.e. are the photos accurate ?

If you have had some boards made, what are they like, would you sell one?


Hello David,

The 9488 LCD I have is customized one. I am developing a project where I have used 328P and arduino bootloader.

I have to depend upon SPI due to pin count constrains on the uC chip. The project I have can work with 2.8" screen, which so far I have tried upon. I had a feeling that if I could manage to get a slightly bigger screen without adding up too much cost, would be perfect. But could not find a ready 3.2 or bigger LCD with SPI. Therefore I had floated my buying request to alibaba.com.

I got many offers for 3.2" LCDs but all of them were with 8/16/18 bit parallel interface. One manufacturer offered me this LCD. Which they have customized tooled to be used for SPI. They had some samples so they have sent me few samples to test it with.

Though I spent some $$ for samples and dhl charges etc. But was happy to get things going the way I wanted.

Upon my request, they sent me few PCBs which they have used for testing that LCDs according to their customers requirements.

You will see the LCD and the PCB they have sent me.

I tried connecting it with Arduino and tried it with some libraries without any luck.

With this LCD there are few issues which manufacturer is ready to omit once they get at least 500 pcs. order.

1- The first issue is that it needs 18.4volts for backlit LEDs. So I had to provide 18.4 volts with a boost converter.
2- The connector is 45pin, and the PCB they sent is not 2.54mm friendly. So I have to manually wired it for testing on bread boarded Nano.
3- The touch pad is there but with 4 analog output only. Touch controller is not included with this LCD. I had ordered few 2046 controller in the past so I have a plan to connect touch controller externally.

All above issues will be resolved if I place an order of over 500pcs. Which I am willing to do once I get this ili9488 based LCD work with SPI.

I am really happy to get in touch with you here. I know I got the right person for this problem to be resolved. I have gone through the previous threads on this forum and saw your contribution to the LCD related topics and libs.

Just few words for my bg. I had been electronic hobbyist since 1985. I started my carrier as a SMPS designer then moved to the PC/Computer side. On those days we use to have 6800/8080/Z80 as uP. It was very difficult to program them. Mostly discrete components were in use. I was font of 8051 for over 10 years, but mostly did that in assembly. C I just learned few years ago. C++ is still unknown treasure for me.

Thank you for your patients and time.


couple of pictures attached with this post.

I was thinking to mix two libraries together. One is for TFT_ILI9341 with SPI and one for Adafruit_TFTLCD, modified for ILI9488 parallel.

But I need some guidance which part of code should be taken from Adafruit_TFTLCD and place it inside TFT_ILI9341. Or other way around.

I need some guidelines for doing it.

I would really appreciate if I can get some help on this.



First off, describe your hardware or post a schematic. It is essential that you have 3.3V logic. The RESET pin must be connected and pulled up to 3.3V with a 10k resistor.

Explain which libraries you are using with the ILI9341.

  1. Read the ID register on the ILI9341. Or some typical registers if EXTC is not enabled.
  2. Connect your ILI9488 and read its ID.
  3. This will confirm that you are using the correct 3-wire or 4-wire SPI interface.

Once you have got this going, adapting for ILI9488 is trivial.


Hello David,

I am using Hardware SPI with GitHub - Bodmer/TFT_ILI9341: A fast Arduino IDE compatible graphics and fonts library including a driver for the ILI9341 based TFT displays. library.

I have connected LCD to nano on Breadboard. I have used voltage deviders as shown in the attached schematic.

Nano LCD

D10 DC
RST RESET (reset is directly connected to nano RST)

I am not sure how to read the 9488 ID, as it seems LCD is not communicating with nano.
I could not understand EXTC part of your message also.

Manufacturer told me that LCD is configured for 3 wire SPI. However, I sent her email to further confirm it. I am waiting for her reply on it.

I think Arduino forum has some issues. Every post disappear when I go to Preview. This is the second time I am retyping it.




I forgot to mention above, that I am using a ili9341 based 2.8" LCD perfectly with the same configuration. I just remove the 2.8" LCD out from breadboard and connect this ili9488 one. And that does not work.



To read anything, you will also need MISO.



ardxb: RST RESET (reset is directly connected to nano RST)

You post a wiring schematic. And then say it is different in real life.

  1. Disconnect JP9.13, JP9.12, JP9.11, JP9.10
  2. Connect JP9.9 (MISO) to D12 on your Arduino.

  3. Install the Adafruit_ILI9341 library.

  4. I suggest that you use the Adafruit wiring.

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
  1. Personally, I am happier with having RESET under program control. e.g.
// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
#define TFT_RST 8
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
  1. JP9.RESET connected to a real Arduino pin. e.g. D8 (via R9, R14)

  2. Run the graphictest.ino example program. Observe the Serial Terminal.

  3. Copy-paste the output from the Serial terminal.

  4. Wire up your ILI9488 in exactly the same way. Copy-paste the Serial terminal.

Until I see that you can read your ILI9341 correctly, there is little point in going much further.

If you get similar numbers in (8 ) and (9), you are in regular 4-wire SPI mode. It would be unfortunate if your ILI9488 is in 3-wire SPI mode but not fatal.

When we get the ILI9488 running, the XPT2046 and microSD can be connected. Meanwhile, you only connect the TFT signals (and always via their level converter resistors)


Ok, I will follow the above and will come back with results.




While posting, I again lost a very detailed post I wrote.

Anyways, I got the information from the manufacturer that ili9488 LCD is configured to work as 3 wire SPI.

I have attached a 2.8" ili9341 LCD as per Adafruit_TFT9341 default configuration and found the following on serial monitor.

With 2.8" ILI9341 LCD

ILI9341 Test! Display Power Mode: 0xCE MADCTL Mode: 0x24 Pixel Format: 0x2 Image Format: 0x0 Self Diagnostic: 0xE0 Benchmark Time (microseconds) Screen fill 2126428 Text 252004 Lines 2343412 Horiz/Vert Lines 179232 Rectangles (outline) 118832 Rectangles (filled) 4416444 Circles (filled) 906848 Circles (outline) 1024004 Triangles (outline) 743424 Triangles (filled) 1830956 Rounded rects (outline) 386100 Rounded rects (filled) 4896476 Done!

Then I connected the ili9488 LCD with the same connection including MISO on pin 12 of nano.

I found the following result.

with new LCD ili9488

ILI9341 Test! Display Power Mode: 0x0 MADCTL Mode: 0x0 Pixel Format: 0x0 Image Format: 0x0 Self Diagnostic: 0x0 Benchmark Time (microseconds) Screen fill 2126432 Text 252012 Lines 2343420 Horiz/Vert Lines 179228 Rectangles (outline) 118832 Rectangles (filled) 4416476 Circles (filled) 906844 Circles (outline) 1023996 Triangles (outline) 743432 Triangles (filled)

Nothing could be seen on ili9488 LCD while running the sketch, only backlit white light. I dont see any change on screen if I press reset button on nano.

I also notice that while ili9488 connected, sketch does not move after Triangles(filled).

Any idea?



I get this with my ILI9341:

ILI9341 Test!
Display Power Mode: 0x9C
MADCTL Mode: 0x48
Pixel Format: 0x5
Image Format: 0x0
Self Diagnostic: 0x0

and obviously, the demo program performs all the tests ok on the ILI9341. I might have made some alterations.

I am taking my dog out. I will install and run a fresh copy of the Adafruit_ILI9341 library later.


Ok, I will wait. Thank you,


dear Rauf,

I have walked my dog (Ralfie), and eaten my Tea.

I installed a fresh copy of the Adafruit library. I get the same read values from both the HW constuctor() and the SW constructor(). Judging by your timing, you are using HW SPI.

Please can you re-install a fresh copy for yourself.

Once you are getting a good "read" and a good display, we will fix the 3-Wire functions.


Hello David,

This was a fresh install of Adafruit 9341 library, downlaoded from github. https://github.com/adafruit/Adafruit_ILI9341

I am using arduino 1.6.8. Does that make any difference in compile?


I am using v1.6.6 It should make no difference at all. After all, it is a hardware SPI peripheral.

You may have noticed that your read values were shifted by one bit from mine. e.g. 0x36 MADCTL was 0x24 for you and 0x48 for me.

I presume that your display was actually showing the correct results.


Hi David,

So how to go further from here?



Until you can read valid results, there is little point in going further. e.g. MADCTL should be 0x48

Do you have a good wire on MISO ? Good soldering?

Does the example code actually produce a picture? Can you use the SW constructor()?

Once we know this, writing the interface function is trivial.


These all are running on a bread board. So there might be possibility for loose connections. I will rearrange all the wirings and will retry again to get correct values. Just to avoid any doubt, at this moment I am working on ili9341 based 2.8" tft lcd. Because the one with ili9488 is silent, nothing shows on screen nor reply to any knock.

Thank you,