Linux

MHS35 3.5 inch Touchscreen Raspberry Pi Display Installation

Update, September 2026. This guide still describes the driver installation correctly, but on a current Raspberry Pi OS image (Debian 13 “trixie”) running MHS35-show on its own leaves you with a black panel. The screen is not faulty. See What changed on Raspberry Pi OS trixie at the end of this post for what to do instead.

MHS35 3.5 Inch Touch Screen product Features

  • Physical resolution 320 x 480, with resistive touch control
  • It supports up to 125MHz SPI signal input, showing stable no screen and no flicker
  • With the refresh rate of raspberry pie around 50Hz, play video to play the game without pressure
  • Support FBCP software drive, support double screen display, can adjust the resolution of the software to zoom
  • Same size as the Raspberry Pi, perfectly compatible and can be directly inserted into any version of the Raspberry Pi (Raspberry Pi ZeroW, A, A+, B, B+, 2B, 3B, 3B+,4B)
  • Support Raspbian/Ubuntu/Kali system, provide driver and image
  • This product has passed CE and RoHS certification

Main Parameters

NameDescription
SKUMHS3528
Screen Size3.5inch
LCD TypeTFT
Module InterfaceSPI (upports up to 125MHz SPI input)
Resolution320*480 (Pixel)
Touch Screen ControllerXPT2046
LCD Driver ICILI9486
BacklightLED
power consumption0.16A*5V
Working temperature(℃)-20~60
Active Area48.96×73.44(mm)
Module PCB Size85.42*55.60 (mm)
Package Size136x98x41 (mm)
Product Weight(Package containing)(g)92 (g)

Hardware Description

1, 173.3VPower positive (3.3V power input)
2, 45VPower positive (5V power input)
3, 5, 7, 8, 10, 12, 13, 15, 16NCNC
6, 9, 14, 20, 25GNDPower ground
11TP_IRQThe touch panel is interrupted, and it is detected that the touch panel is pressed low
18LCD_RSInstruction/data register selection, low level is instruction, high level is data
19LCD_SI / TP_SILCD display / touch panel SPI data input
21TP_SOTouch panel SPI data output
22RSTReset signal, low reset
23LCD_SCK / TP_SCKLCD display / touch panel SPI clock signal
24LCD_CSLCD chip select signal, low level enable
26TP_CSTouch panel chip select signal, low level enable

. Install on the Raspbian system (the Raspberry Pi needs to connect to the Internet)

Log in to the Raspberry Pi terminal(SSH remote login user name and password, see the image download of the Download Resources(Q:The ssh can’t connect?)

Execute the following command to get the LCD driver and install it (after copying, click the right mouse button in the Putty window to paste):

sudo rm -rf LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD-show
cd LCD-show/
sudo ./MHS35-show

How to install the 3,5 inch touch screen for Raspberry Pi in the Raspberry/Ubuntu Mate/Kali/Retropie system

Download the local driver, the download link is as follows: (Because of system differences, the driver downloaded from github cannot run normallyin the three systems Ubuntu Mate, Kali, Retropie, so only local drivers can be used)

Driver download for Ubuntu-mate-18.04 system:LCD-show.tar.gz

Driver download for Kali-linux system:LCD-show.tar.gz

Driver download for the retropie-rpi2_rpi3-rpi4 system:LCD-show.tar.gz

Driver download for retropie-rpi1_zero system:LCD-show.tar.gz(2)

Log in to the Raspberry Pi terminal(SSH remote login user name and password, see the image download of the Download Resources

(Q:The ssh can’t connect?)

Copy the local driver to the running Raspberry Pi system and execute the following command to extract it (can be copied by SD card or FileZilla software)

tar -xvzf LCD-show.tar.gz

(4) Execute the following command to install the LCD driver

chmod -R 755 LCD-show
cd LCD-show/
sudo ./MHS35-show

Step 4, Check if the driver is successfully installed(1) After the LCD driver is installed, the system will automatically restart. After the startup is successful, the LCD can display and touch normally,indicating that the driver installation is successful.

Note:A. Ubuntu system default SSH is not enabled, the specific method of opening seeRaspberryPi Ubuntu-mate open ssh instructionsB. Ubuntu-18.04 system ssh connection may fail, the specific solution is shown in RaspberryPi Ubuntu-mate-18.04 ssh connection failure solution descriptionC. The retropie-rpi1_zero system cannot log in via SSH (no network port and wifi module). You need to copy the driver through the serial port. For details, see RaspberryPi Zero open serial instructionsD. Retropie system game installation and setup instructions see RaspberryPi Retropie using instructions

How to rotate the display direction

This method only applies to the Raspberry Pi series of display screens, other display screens do not apply.

  • Method 1,If the driver is not installed, execute the following command (Raspberry Pi needs to connected to the Internet):
sudo rm -rf LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD-show
cd LCD-show/
sudo ./XXX-show 180

After execution, the driver will be installed. The system will automatically restart, and the display screen will rotate 90 degrees to display and touch normally.
 ‘ XXX-show ‘ can be changed to the corresponding driver, and ‘ 90 ‘ can be changed to 0, 90, 180 and 270, respectively representing rotation angles of 0 degrees, 90 degrees, 180 degrees, 270 degrees)

  • Method 2,If the driver is already installed, execute the following command:
cd LCD-show/
sudo ./rotate.sh 180

After execution, the system will automatically restart, and the display screen will rotate 90 degrees to display and touch normally.
( ‘ 90 ‘ can be changed to 0, 90, 180 and 270, respectively representing rotation angles of 0 degrees, 90 degrees, 180 degrees, 270 degrees)
If the rotate.sh prompt cannot be found, use Method 1 to install the latest drivers

What changed on Raspberry Pi OS trixie

I fitted one of these panels to a Pi 4 in September 2026, on the 2026-06-18 Raspberry Pi OS image, and ran the script exactly as described above. The driver loaded, the SPI bus came up and the XPT2046 touch controller was detected on the first boot. The panel stayed black anyway. Nothing was broken: the part of the old setup that actually puts a picture on the screen no longer exists.

Here is what a check on the running Pi showed, and how to get the display working again on a current system.

The boot files have moved

Everything now lives in /boot/firmware. On my install /boot/config.txt is a symlink, so editing it still works, but /boot/cmdline.txt is a plain file containing nothing but a notice:

DO NOT EDIT THIS FILE
The file you are looking for has moved to /boot/firmware/cmdline.txt

Edit the wrong one and nothing happens, silently.

fbcp no longer exists

This is the important one. The classic setup drew the desktop on the HDMI framebuffer and used the small fbcp daemon to copy it onto the panel. On trixie there is no package that provides it, and libraspberrypi-bin has gone too, taking tvservice with it.

apt-cache policy fbcp rpi-fbcp libraspberrypi-bin

All three come back with no candidate. So the panel driver paints nothing, because nothing is feeding it.

The script turns KMS off, and the rest follows

MHS35-show rewrites config.txt, dropping dtoverlay=vc4-kms-v3d and adding disable_fw_kms_setup=1. The result is a system with no DRM at all:

kmsprint
terminate called ... what(): failed to find DRM cards

Without DRM the X server cannot use the modesetting driver, so it falls back to fbdev and you are back on the old firmware framebuffers. Every oddity below comes from this one change.

The panel is fb2, not fb1

The old guides assume the panel is /dev/fb1. With max_framebuffers=2 plus the overlay, what you actually get is the table below. Check yours with cat /sys/class/graphics/fb*/name and the matching virtual_size.

DeviceNameHoldsSizeBits
fb0BCM2708 FBthe text console480×32032
fb1BCM2708 FBthe X desktop1920×128032
fb2fb_ili9486the MHS35 panel480×32016

There is a second surprise in there. The X server opens the “default device” and lands on the 1920×1280 framebuffer, not on the 480×320 one the script set up. You can see it in ~/.local/share/xorg/Xorg.0.log:

(II) FBDEV(0): using default device
(II) FBDEV(0): hardware: BCM2708 FB (video memory: 9600kB)

9600 kB is 1920 x 1280 x 4 bytes, which confirms which framebuffer it took.

Check that the panel itself is alive

Before changing anything, prove the hardware works. Your user is in the video group, so this needs no root. 307200 is 480 x 320 x 2 bytes, one frame at 16 bits per pixel.

dd if=/dev/urandom of=/dev/fb2 bs=307200 count=1
head -c 307200 /dev/zero | tr '\000' '\377' > /dev/fb2
head -c 307200 /dev/zero > /dev/fb2

You should see noise, then white, then black. If you do, the panel, the SPI wiring and the driver are all fine, and the problem is purely about which framebuffer the desktop is using.

The fix: put X on the panel

Since the mirroring daemon has gone, the simplest approach on trixie is to stop mirroring altogether and let the X server draw straight onto the panel. One file does it:

sudo tee /etc/X11/xorg.conf.d/99-mhs35.conf > /dev/null <<'EOF'
Section "Device"
    Identifier "MHS35"
    Driver     "fbdev"
    Option     "fbdev" "/dev/fb2"
EndSection
EOF
sudo reboot

Check first that xserver-xorg-video-fbdev is installed, and that nothing else in /etc/X11/xorg.conf.d/ already declares a Device section. After the reboot the desktop runs at the panel native 480×320, the touch calibration the script left behind lines up with what you see, and HDMI shows the console. To undo it, delete that file and reboot. SSH keeps working either way, so you are never locked out.

If you would rather keep the desktop on HDMI and have the panel mirror it, you now have to supply your own copier in place of fbcp, converting 32 bit pixels to RGB565 and scaling to fit. I wrote a small one in Python using numpy and mmap for my own Pi. Ask in the comments if that would be useful and I will publish it.

Rotation on trixie

The rotate.sh script still works, but if you prefer to change it by hand, the rotation lives in the overlay line in /boot/firmware/config.txt:

sudo sed -i 's/rotate=90/rotate=270/' /boot/firmware/config.txt

Whatever you do here, remember to invert the touch calibration to match, otherwise you press top left and the pointer lands bottom right. In /etc/X11/xorg.conf.d/99-calibration.conf, swap the pairs so that Calibration "3936 227 268 3880" becomes Calibration "227 3936 3880 268".

Command changes at a glance

ForOld wayOn trixie
Boot files/boot/config.txt/boot/firmware/
Copy the desktop to the panelfbcpgone, run X on the panel instead
Video output statustvservice -skmsprint, vcgencmd, fbset -fb /dev/fbN
List framebuffersnot neededcat /sys/class/graphics/fb*/name
VNC serverRealVNC via raspi-configx11vnc for X11, wayvnc for Wayland

None of this makes the MHS35 a bad buy. The hardware is the same as it always was, and once the desktop is pointed at the right framebuffer it behaves exactly as this guide describes. It is the software around it that moved on.

If you are setting a Pi up from scratch alongside this, the rest of my Linux notes cover the ground either side of it, including a step by step Debian install and a list of Raspberry Pi keyboard shortcuts that saves a lot of time on a machine with a tiny screen.

Have you fitted one of these panels on trixie? Tell me in the comments how you got on.

73 de G7RDX

Leave a comment