Overview

A TFT panel connected to a Raspberry Pi without the use of an HDMI decoder? What is this sorcery??? It's the DPI Kippah from Adafruit! This HAT-like* board snaps onto a Raspberry Pi B+, A+, Pi 2, Pi 3 or Zero and with a little software configuration, allows you to have what normally would go out the HDMI port come up on a nice little flat screen. * Its not technically a HAT due to the lack of an on-board EEPROM, but its the same shape as a Pi HAT and its a covering of sorts, so we call it a kippah

Compared to our lovely HDMI backpacks, you don't have the extra cost or expense of an HDMI encoder/decoder. And you get a nice ultra-fast 18-bit color display with optional touch support. We tested it and it works great with our 5" and 7" displays at 800x480. This display is 'native' so it gets all the graphics accelleration capabilities, instant refresh, etc. you would get from an HDMI display

The Kippah will also generate the backlight drive voltage (up to ~24V) from the 5V USB power on the Raspberry Pi

OK so, exciting right? But, what's the catch? The catch is this add on board uses nearly every pin available on the Raspberry Pi and those pins are hardcoded, they cannot be moved or rearranged. The pins used are GPIO 2 through 21 inclusive. That means you don't get the UART RX/TX pins (no console cable) and you don't get the standard user I2C pins, the EEPROM I2C pins, or hardware SPI pins. You do get to use pins #22, #23, #24, #25, #26 and #27, and the USB ports are fine to use too.

The other catch is that this display replaces the HDMI/NTSC output, so you can't have the DPI HAT and HDMI working at once, nor can you 'flip' between the two.

Also, there's no PWM's available so you can't have precision backlight control unless you somehow rig up an external PWM generator with a 555 or something.

Finally, we did test this setup with a straight-up Raspbian and after the software installs, it works great. However, we don't guarantee it will work with any other Raspberry Pi operating system or setup.

That said, if you dont need a bunch of GPIO, its very easy to add a high quality display. Pick and choose whether you want a touch-screen or not, then choose the size of the display - 5" or 7" is best. You can also grab an FPC extension board and extend the display away from the Pi. For power-users, this is a very nice little accessory

Comes as one fully assembled and tested DPI Kippah circuit board. You may need a soldering iron to adjust the backlight by soldering closed a PCB jumper (check the tutorial on this). TFT display, USB micro-B cable, FPC extension cable, bent wire stand, and Raspberry Pi not included (but we do carry them in the shop!)

Installation

If you just plug in the DPI Kippah, it won't work on a fresh installation of Raspbian! You must set up the special device tree overlay configuration!

However, its not too bad, check it out below!

We've only tested this device tree overlay/firmware with Raspbian. Since its a bit of a hack, it doesn't work with the native pre-boot 'NooBS' screen. However, it does come up immediately with Raspbian (e.g. you get to see the rainbow square screen)
Note these instructions are tested to work with Raspbian Stretch as of 2019/04/11

Connect Display

The DPI Kippah has a 40-pin TFT connector. This is a semi-standard connector. A majority of 3.5", 4.3", 5.0" and 7.0" dot-clock DPI displays have this 'standard 40-pin' connector.

Check the Downloads page for an example datasheet so you can check if your display is compatible. All Adafruit 40-pin TFT TTL displays work, we do not guarantee any other displays work.

In fact, if you connect a display that does not match the right pinout, you could easily fry the display if the 20V backlight pin ends up connected to a logic pin!

To connect, gently pull on the two black 'ears' on the FPC connector, and plug in the display so the gold/silver metalic pins are facing 'up' away from the PCB.

Update & Upgrade

Start by updating and upgrading your Raspberry Pi to the latest software.

sudo apt-get update
sudo apt-get upgrade

We want to get the most recent recent kernel and firmware, so run

sudo apt-get install rpi-update

and then

sudo rpi-update

Then reboot with sudo reboot

Install and Try raspi-gpio

To help us debug/make sure we have the right device tree blob, we'll use a tool called raspi-gpio

Install it with

sudo apt-get install raspi-gpio

Then you can run it with

sudo raspi-gpio get

When you run it this time, you'll see the first 'bank' of GPIO pins set to, essentially

GPIO nn: level=1 fsel=0 alt=  func=INPUT

Install Device Tree Blob

Now download and install the DPI device tree blob (tip o' the hat to aBUGsworstnightmare) from github by running:

Download: file
cd ~
wget https://raw.githubusercontent.com/adafruit/Adafruit-DPI-Kippah/master/dt-blob.bin
sudo cp dt-blob.bin /boot/

in your Pi's command line, to change directories to the home directory, download the blob, then copy it in /boot

Update configuration

Finally, we'll tell the Pi to use the attached DPI display. The following will work for our 5" and 7" 800x480 displays. Both touch and non-touch displays use the same setup here

Start by editing with

Download: file
sudo nano /boot/config.txt

and add the following lines at the bottom

Download: file
# Disable spi and i2c, we need these pins.
dtparam=spi=off
dtparam=i2c_arm=off

# Set screen size and any overscan required
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=800
framebuffer_height=480

# enable the DPI display
enable_dpi_lcd=1
display_default_lcd=1

# set up the size to 800x480
dpi_group=2
dpi_mode=87

# set up the hsync/vsync/clock polarity and format
dpi_output_format=454661

# set up the size to 800x480
hdmi_timings=800 0 40 48 88 480 0 13 3 32 0 0 0 60 0 32000000 6

For 4.3" TFT use the following:

Download: file
# Disable spi and i2c, we need these pins.
dtparam=spi=off
dtparam=i2c_arm=off

# Set screen size and any overscan required
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=480
framebuffer_height=272

# enable the DPI display
enable_dpi_lcd=1
display_default_lcd=1

# set up the size to 480x272
dpi_group=2
dpi_mode=87

# set up the hsync/vsync/clock polarity and format
dpi_output_format=520197

# set up the size to 480x272
hdmi_timings=480 0 40 48 88 272 0 13 3 32 0 0 0 60 0 32000000 3

This sets up the screen, if you ever want to temporarily 'undo the DPI Hat install' just delete these lines

enable_dpi_lcd=1
display_default_lcd=1

To finish installation, just run sudo reboot

Touch screen support

If you have a DPI HAT with touchscreen circuitry installed and a touch-screen display, you can easily use it for touch screen support

A microUSB cable is required (not included) connect it from the MicroUSB connector on the HAT into one of the Pi's USB port

No drivers are required! However, you'll likely want to calibrate the screen. We have a calibration helper python script. Start by installing python-pip and pyusb version 1.0.0b1

Download: file
sudo apt-get install python-pip
sudo pip install pyusb==1.0.0b1

Then grab the code and example gradient

Download: file
cd ~
wget http://adafru.it/ar1100py
mv ar1100py ar1100.py
wget http://adafruit-download.s3.amazonaws.com/gradient800x480.jpg

If you are running it on a 5" display, continue as is.

If you are running it on a 7" display, edit with nano ar1100.py and change this line:

writeeeprom = CALIBRATED_5IN_800x480;

to

writeeeprom = CALIBRATED_7IN_800x480;

Then run the calibrator with:

Download: file
cd ~
chmod +x ar1100.py
sudo python ar1100.py

Its normal for the first time you run it, it will complain "Couldn't find generic either" just run it again!

Just hit the up arrow on your keyboard and return, to rerun sudo python ar1100.py

This time it will continue, program the AR1100 with the calibration data, and give you a rainbow display. 

When done, hit Escape on your keyboard

Backlight

The DPI Kippah has a backlight booster that can support any 40pin TFT display we carry. However, since backlights do vary from display to display, you may need to configure the backlight to match your display. Here's the constant-current draws of our displays

  • 4.3" 480x272 - 1 strand of 7 LEDs in series, 25mA constant current
  • 5.0" 800x480 - 2 strands  6 LEDs in series, 50mA constant current
  • 7.0" 800x480 - 6 strands of 3 LEDs in series, 150mA constant current (although 100-150mA can be used)

By default, we ship the DPI Kippot with 25mA backlight. You'll still be able to see the display on a 5" or 7" display, but it will be dim! That's OK, all you have to do is configure the Kippah to match your display.

Since we dont know what display you're going to use, we leave this up to you. It's easy to do, just grab your soldering iron and heat it up, then grab some solder and melt it to short out the jumpers on the Kippah here:

The left and middle jumper each add 25mA to the default 25mA. The right jumper adds 50mA. So if you want to have a 50mA backlight, short only the left jumper. For 75mA, short the right most. For 100mA solder short the left and right and for 125mA short all three!

Downloads

Files

Schematic

The middle section with the touch screen controller is not placed on the non-touch version!

Fabication print

This PCB fits the electrical 'HAT' specification. Dimensions in mm

F.A.Q.

Can I use the DPI interface and HDMI or TV out at the same time?

Nope! The DPI/HDMI/TV outputs are all the same hardware driver so you can only have one at a time. To enable/disable the DPI display, comment out or uncomment

enable_dpi_lcd=1
display_default_lcd=1

in /boot/config.txt and reboot. It cannot be done on the 'fly'

How is that DTO blob made?

If you'd like to check out the device tree overlay and how to customize, you can read some more here: http://blog.reasonablycorrect.com/raw-dpi-raspberry-pi/

Run:

sudo apt-get install device-tree-compiler
wget https://raw.githubusercontent.com/robertely/dpi666/master/setup/dt-blob-dpi.dts
sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-dpi.dts

to create your own!

This guide was first published on Apr 10, 2015. It was last updated on Apr 10, 2015.