Thursday, June 7, 2012

BeagleBone and Adafruit 1.8" SPI LCD

Back about the time the BeagleBone was released, I spent some time on interfacing and writing a Linux framebuffer driver for the Adafruit 1.8" SPI LCD.

Some time later, I did a presentation at ELC (.us) 2012 on this project. The slides and video are available, however, there was a technical issue during the session that caused the audio feed to drop out at the 13:48 mark. Luckily, the great folks at Free Electrons were also recording their usual ELC videos and you can watch the entire session with audio.

Since then, I've been working on a Fritzing part for the BeagleBone and I decided to circle back and show a nice diagram of how one can interface the BeagleBone with the LCD.

As you can see, it's a pretty simple interface. Three SPI signals (output only to this display) and the out-of-band Reset and Data/Command signals which are driven by two GPIOs.

For the framebuffer driver, I leveraged an earlier version of the ST7735 Arduino library. The current Arduino library now supports multiple variants of the display that require different initialization. Although I haven't yet incorporated support for the other board, the current working st7735fb driver is available in my github linux repo st7735 branch. Please note that it's important to disable framebuffer console (just like in the top level directory's defconfig I commited), else the kernel will lock up on boot due to a bug.

Going forward, the driver plan is:

  • Merge PWM backlight support from Matt Ranostay
  • Add support for pdata configurable display variants (fixes other display shipping)
  • Debug the fbcon lockup issue
  • Support and test on Beagleboard xM with level shifters
  • Send upstream
In the meantime, you can see what some other folks have built on top of the st7735fb framebuffer driver with these videos of Enlightenment and Mplayer dishing out the ubiquitous Big Buck Bunny.

1 comment:

  1. Interesting project, thanks for posting. I'll have to check out Fritzing ...

    ReplyDelete