Watterott Display on Raspberry Pi

I really like my Raspberry Pi, but what I am missing is a tiny display matching the size of the board that can be used as primary display, the boot console or some graphics later on.

A very nice and cheap TFT display is the MI0283QT-Adapter (note: I got the -2 version not the newer -9 version that has another display driver chip!) sold by Watterott. Its mainly focused to be an add on for the Arduinos, but it should work on every embedded system providing SPI access.

For the Linux running on the Raspberry Pi a framebuffer driver for the display would be the best solution, as it allows you to use it as a boot console and then you can run everything that runs on a framebuffer device (e.g. X11, SDL, mplayer, …).

First I thought about writing a fresh driver from scratch but some google-fu showed me that there already exists a nice solution: user notro has written fbtft, a driver framework that allows to simplify writing an own driver for those tiny TFTs.

For the R61505u display chip found on my display board, there was no driver available, but thanks to notro’s powerful framework and Watterott’s example code (Thanks to Markus for porting the code to the Raspi), I was able to derive a new driver for this chip in a few hours: See my cloned fbtft Git Hub repository for the source.

It works really nice: with 32 MHz SPI clock I can run 25 frames per second and even watch movies with smooth display:

Playing Big Bug Bunny with MPlayer's fbdev output

If you compile the driver directly in your kernel (i.e. no modules) then you can use the display directly as the boot console of your board:

Linux Boot Console running on display

If you want to build this setup yourself then read on…

Build this yourself

The following notes should guide you through the task of setting up the display yourself. Its not a step by step manual but rather a collection of hints and tips. It is assumed you are familiar with low-level stuff like building and setting up a new kernel for the Raspi, so you have been warned 🙂

Hardware

  • I used Adafruit’s Raspberry Pi Proto Plate as a prototyping board for setting up the required connections between the Raspi and the display
  • Its a very simple setup: only wires required 🙂
  • The following connections are required:
Name       Raspi        Display Board
+5V        2+4          3+4   
GND        6            1+2
CS_DISP    26 (CE1)     7 
RST_DISP   16 (GPIO23)  6
LED_DISP   18 (GPIO24)  5
MOSI       19           8
MISO       21           9
SCLK       23           10

Software

  • First have a look at notro’s wiki pages: There you find details on how to clone the Linux kernel source and set up everything on your system.
  • I prefer cross-compiling the kernel on a Ubuntu host system for speed reasons. Have a look at elinux.org’s Kernel Compilation Page for details.
  • Remember to replace notro’s GitHub source tree with mine:
git clone https://github.com/cnvogelg/fbtft.git
  • For a first test use the following commands:
# modprobe spi-bcm2708
# modprobe spidevices name=r61505ufb fps=25
# modprobe r61505ufb
  • This will initialize the display and clear the garbled initial display to a black screen that is lit with the backlight. You’ll find the framebuffer device /dev/fb1 in your filesystem
  • Install mplayer and get a movie file. I used Big Bug Bunny and the 320×180 IPhone version. As root you can try:
# mplayer -vo fbdev:/dev/fb1 BigBuckBunny_320x180.mp4
  • Enjoy the smooth playback!

This setup works great if you want to use the display after boot up as a second screen. However for a first screen you have to compile all drivers into the kernel itself:

  • Again follow notro’s guide
  • For the platform specific setup I prepared a r61505ufb patch that you can apply to your source
  • Build a fresh new kernel and if everything worked out ok then your Raspi will boot into your new console display…

Have fun with your new tiny but shiny Raspi display!

9 thoughts on “Watterott Display on Raspberry Pi

  1. Hi there,

    Today I have received the touchsreen MI0283QT-9A and I am very excited abou it.

    I would appreciate if someone could help me out with this technical issue. I am not too sure how to connect the display adaptor to my my Raspberry PI with the jumper wires.

    Would you please be so kind as to explain to me the meaning of the following connections:

    Name Raspi Display Board
    +5V 2+4 3+4
    GND 6 1+2

    Does it mean that for example I have to connect the pin 2 (Raspi) with the pin 3 (Display board) and pin 4 (Raspi) with the pin 4 (Display board) ? And in the second example the pin 6 (Raspi) with a ‘combined’ wire connected to the pin 1 and 2 (Display board)?

    Many thanks in advance for your kind help!!!

  2. Thanks for this post. This is something I am trying with an Adafruit 1.8 inch TFT LCD but I keep running into problems with the setup. Unfortunately, I am learning Linux at the moment so I am a bit of a newbie.

    Firstly, when running the command
    /usr/src/linux/drivers/video/fbtft# modprobe spidevices name=adafruit18fbI get the following error
    FATAL: Module spidevices not found.

    Secondly, when I make the menuconfig and I go to set the “Support for small TFT LCD Devices”, nothing is listed and I can’t set anything before compiling.

    I have tried with both Notro and yours fbtft git files and followed his wiki to a tee but to no avail. I am using 3.6.11+ (latest image downloaded today from Raspberry Pi with updates and upgrades). I have been at this for two days now and I think it’s time I ask for help. Please could you point me in the right direction? Any help you can give me would be greatly appreciated.

  3. Great work. Thanks for sharing this awesome project.
    I am currently trying to replicate this. The kernel compiles fine, but when I boot my RPi, it stops at the “rainbow square of death”, telling me something must be wrong with the kernel. Since your patch file did not work for me I tried manually patching it. Could you be so kind and share the patched file too? (/arch/arm/mach-bcm2708/bcm2708.c)
    That would be very kind of you.

  4. @martin: I haven’t measured the power consumption, yet. I use a 2A 5V USB power supply and it works flawlessly.

    @albertone74: the pins e.g. 2+4 both provide the same signal, so you can pick either one or even both ones. Yes connect Raspi Pin 2 to Display Board 3 and so on…

    @craig: It seems to me that you just forgot to add the new tft drivers in your ‘linux/drivers/video/Kconfig’ file. Make sure it contains the line
    source "drivers/video/fbtft/Kconfig" right before the last line endmenu. Also make sure that the ‘tft’ driver directory resides directly in this directory. Then menuconfig should show you the new entries.

    @amaasbier: I uploaded the original source file I used here: bcm2708.c.org. With this the file the patch should apply cleanly…

  5. Sorry, but I am still unable to correctly apply the patch:
    patch -p1 < bcm2708-r61505ufb.patch
    patching file arch/arm/mach-bcm2708/bcm2708.c
    Hunk #1 succeeded at 64 with fuzz 1.
    Hunk #2 FAILED at 595.
    1 out of 2 hunks FAILED -- saving rejects to file arch/arm/mach-bcm2708/bcm2708.c.rej

    I don’t know if I did something wrong, since this is the first time using patch for me.
    I would still appreciate a patched file just to make sure everything looks as it should.

  6. I got it. The “rainbow square of death” appeared, because I had a comment having # not as the very first character. Seems like the Pi was not amused about this.
    But everything works nice and clean now. Thanks again for doing this project.

  7. Pingback: Wiring up a ILI9341 TFT Screen + Touch | DL-UAT

Leave a Reply