Difference between revisions of "EBC Exercise 12a 2.4 TFT LCD display via SPI"
m (Added path) |
m (→tinyDRM) |
||
(22 intermediate revisions by 2 users not shown) | |||
Line 35: | Line 35: | ||
|} | |} | ||
− | |||
− | + | This table shows how to wire the LCD display for SPI 1. | |
− | |||
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | ! LCD !! Bone | |
+ | |- | ||
+ | | MISO || P9_29 | ||
+ | |- | ||
+ | | LED || P9_16 | ||
+ | |- | ||
+ | | SCK || P9_31 | ||
+ | |- | ||
+ | | MOSI || P9_30 | ||
+ | |- | ||
+ | | D/C || P9_27 | ||
+ | |- | ||
+ | | RESET || P9_25 | ||
+ | |- | ||
+ | | CS || P9_28 | ||
+ | |- | ||
+ | | GND || P9_2 | ||
+ | |- | ||
+ | | VCC || P9_4 | ||
+ | |} | ||
− | + | == tinyDRM == | |
− | + | The tinyDRM driver requires a 4.19 kernel or newer. Run '''uname -a''' to see which kernel is being run. | |
+ | If it isn't new enough update it. | ||
− | + | Add uboot_overlay_addr4=BB-LCD-ADAFRUIT-24-SPI'''1'''-00A0.dtbo to /boot/uEnv.txt if you are using SPI1. | |
− | + | Edit '''/boot/uEnv.txt''' and find the line starting with | |
− | + | #uboot_overlay_addr4= | |
− | + | Uncomment it and change it to: | |
− | bone$ '''ls''' | + | uboot_overlay_addr4=/lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo |
− | BB-LCD-ADAFRUIT-24-SPI1-00A0. | + | Next, verify the file is there. |
+ | bone$ '''ls -ls /lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo''' | ||
+ | 4 -rw-r--r-- 1 root root 3606 Aug 21 2021 /lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo | ||
+ | If the file is not there, follow the instructions in the next section. If the file is there, | ||
+ | skip to the '''Using the LCD display''' section. | ||
− | + | === Compiling and installing BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo === | |
+ | Do this if BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo isn't there. | ||
+ | bone$ '''cd /opt/source/dtb-5.10-ti''' | ||
+ | bone$ '''make''' | ||
+ | This will take a while, then: | ||
+ | bone$ '''cp src/arm/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtb0 /lib/firmware''' | ||
+ | Now you should be ready to use the display. | ||
− | + | === Using the LCD display === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Reboot and check for '''/dev/fb0''' | |
− | |||
− | |||
− | |||
− | |||
bone$ '''sudo reboot''' | bone$ '''sudo reboot''' | ||
After rebooting... | After rebooting... | ||
bone$ ls -ls /dev/fb0 | bone$ ls -ls /dev/fb0 | ||
0 crw-rw---- 1 root video 29, 0 Oct 3 10:07 /dev/fb0 | 0 crw-rw---- 1 root video 29, 0 Oct 3 10:07 /dev/fb0 | ||
+ | |||
+ | The LCD should be showing some text. | ||
You can control the backlight with: | You can control the backlight with: | ||
− | bone$ '''cd /sys/ | + | bone$ '''cd /sys/class/backlight/backlight_pwm''' |
− | + | Turn the display off, then on with: (Yup, it's backwards.) | |
− | |||
− | Turn the display off, then on with: | ||
bone$ '''echo 1 > bl_power''' | bone$ '''echo 1 > bl_power''' | ||
bone$ '''echo 0 > bl_power''' | bone$ '''echo 0 > bl_power''' | ||
Line 86: | Line 104: | ||
bone$ '''echo 25 > brightness''' | bone$ '''echo 25 > brightness''' | ||
− | Now jump to the | + | Now jump to the Using the Frame Buffer section to see how to display images, etc.. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Using the framebuffer == | == Using the framebuffer == | ||
Line 110: | Line 113: | ||
bone$ '''sudo apt install fbi''' | bone$ '''sudo apt install fbi''' | ||
Display them with: | Display them with: | ||
− | bone$ '''fbi -noverbose -T 1 -a boris.png''' | + | bone$ '''sudo fbi -noverbose -T 1 -a boris.png''' |
You should now see Boris the Beagle on your display. | You should now see Boris the Beagle on your display. | ||
Line 116: | Line 119: | ||
Install '''mplayer''' and load a movie on the Bone (see install.sh). | Install '''mplayer''' and load a movie on the Bone (see install.sh). | ||
bone$ '''sudo apt install mplayer''' | bone$ '''sudo apt install mplayer''' | ||
+ | Get something to play | ||
+ | bone$ '''wget http://hubblesource.stsci.edu/sources/video/clips/details/images/hst_1.mpg''' | ||
+ | And play it | ||
+ | bone$ '''mplayer -vo fbdev2 -nolirc -framedrop hst_1.mpg''' | ||
+ | |||
+ | If you get an error you might need: | ||
+ | bone$ '''export SDL_VIDEODRIVER=fbcon''' | ||
+ | bone$ '''export SDL_FBDEV=/dev/fb0''' | ||
Play the movie. Rotate the movie. | Play the movie. Rotate the movie. | ||
Line 140: | Line 151: | ||
sudo fbi -noverbose -T 1 $TMP_FILE | sudo fbi -noverbose -T 1 $TMP_FILE | ||
+ | |||
+ | === pygame === | ||
+ | It's not hard to get pygame to display on the LCD. | ||
+ | |||
+ | bone$ '''sudo apt install python3-pygame''' | ||
+ | bone$ '''cd exercises/displays/ili9341/pygame''' | ||
+ | bone$ '''sudo ./clock.py''' | ||
+ | |||
+ | Look in '''clock.py''' to see how to direct the graphics to the LCD. | ||
+ | |||
+ | == fbtft == | ||
+ | |||
+ | fbtft is no longer supported after the 5.4 kernel. | ||
+ | (https://github.com/notro/fbtft/wiki#fbtft_device-and-flexfb-are-gone-in-54) | ||
+ | |||
+ | Clone the course repo. | ||
+ | |||
+ | bone$ '''git clone https://github.com/MarkAYoder/BeagleBoard-exercises.git exercises''' | ||
+ | |||
+ | and then | ||
+ | |||
+ | bone$ '''cd exercises/display/ili9341/fb''' | ||
+ | bone$ '''git pull''' | ||
+ | bone$ '''./on.sh''' | ||
+ | |||
+ | After a moment the display should turn dark. Look in '''on.sh''' to see what it did. | ||
+ | If the display doesn't turn on, look in '''on.sh''' and make sure it's set for the correct SPI bus. | ||
{{YoderFoot}} | {{YoderFoot}} |
Latest revision as of 08:59, 9 January 2024
Embedded Linux Class by Mark A. Yoder
This is an exercise in interfacing the 2.4" TFT LCD display (ili9341) via a SPI bus. The newer using the tinyDRM driver and the older uses fbtft.
Contents
The Hardware
This table shows how to wire the LCD display for SPI 0.
LCD | Bone |
---|---|
MISO | P9_21 |
LED | P9_16 |
SCK | P9_22 |
MOSI | P9_18 |
D/C | P9_19 |
RESET | P9_20 |
CS | P9_17 |
GND | P9_2 |
VCC | P9_4 |
This table shows how to wire the LCD display for SPI 1.
LCD | Bone |
---|---|
MISO | P9_29 |
LED | P9_16 |
SCK | P9_31 |
MOSI | P9_30 |
D/C | P9_27 |
RESET | P9_25 |
CS | P9_28 |
GND | P9_2 |
VCC | P9_4 |
tinyDRM
The tinyDRM driver requires a 4.19 kernel or newer. Run uname -a to see which kernel is being run. If it isn't new enough update it.
Add uboot_overlay_addr4=BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo to /boot/uEnv.txt if you are using SPI1.
Edit /boot/uEnv.txt and find the line starting with
#uboot_overlay_addr4=
Uncomment it and change it to:
uboot_overlay_addr4=/lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo
Next, verify the file is there.
bone$ ls -ls /lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo 4 -rw-r--r-- 1 root root 3606 Aug 21 2021 /lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo
If the file is not there, follow the instructions in the next section. If the file is there, skip to the Using the LCD display section.
Compiling and installing BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo
Do this if BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo isn't there.
bone$ cd /opt/source/dtb-5.10-ti bone$ make
This will take a while, then:
bone$ cp src/arm/overlays/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtb0 /lib/firmware
Now you should be ready to use the display.
Using the LCD display
Reboot and check for /dev/fb0
bone$ sudo reboot
After rebooting...
bone$ ls -ls /dev/fb0 0 crw-rw---- 1 root video 29, 0 Oct 3 10:07 /dev/fb0
The LCD should be showing some text.
You can control the backlight with:
bone$ cd /sys/class/backlight/backlight_pwm
Turn the display off, then on with: (Yup, it's backwards.)
bone$ echo 1 > bl_power bone$ echo 0 > bl_power
Change the brightness to 25% with:
bone$ echo 25 > brightness
Now jump to the Using the Frame Buffer section to see how to display images, etc..
Using the framebuffer
Displaying Images
Follow the instructions in install.sh to download fbi and some images.
bone$ sudo apt update bone$ sudo apt install fbi
Display them with:
bone$ sudo fbi -noverbose -T 1 -a boris.png
You should now see Boris the Beagle on your display.
Playing Movies
Install mplayer and load a movie on the Bone (see install.sh).
bone$ sudo apt install mplayer
Get something to play
bone$ wget http://hubblesource.stsci.edu/sources/video/clips/details/images/hst_1.mpg
And play it
bone$ mplayer -vo fbdev2 -nolirc -framedrop hst_1.mpg
If you get an error you might need:
bone$ export SDL_VIDEODRIVER=fbcon bone$ export SDL_FBDEV=/dev/fb0
Play the movie. Rotate the movie.
Generate Text
Install imagemagick.
bone$ sudo apt install imagemagick
See text.sh for an example of using imagemagick to write text to the LCD display. Write your name on the LCD. Display an image and write some text on it.
# Here's how to use imagemagick to display text # Make a blank image SIZE=320x240 TMP_FILE=/tmp/frame.png # From: http://www.imagemagick.org/Usage/text/ convert -background lightblue -fill blue -font Times-Roman -pointsize 24 \ -size $SIZE \ label:'ImageMagick\nExamples\nby Anthony' \ -draw "text 0,200 'Bottom of Display'" \ $TMP_FILE sudo fbi -noverbose -T 1 $TMP_FILE
pygame
It's not hard to get pygame to display on the LCD.
bone$ sudo apt install python3-pygame bone$ cd exercises/displays/ili9341/pygame bone$ sudo ./clock.py
Look in clock.py to see how to direct the graphics to the LCD.
fbtft
fbtft is no longer supported after the 5.4 kernel. (https://github.com/notro/fbtft/wiki#fbtft_device-and-flexfb-are-gone-in-54)
Clone the course repo.
bone$ git clone https://github.com/MarkAYoder/BeagleBoard-exercises.git exercises
and then
bone$ cd exercises/display/ili9341/fb bone$ git pull bone$ ./on.sh
After a moment the display should turn dark. Look in on.sh to see what it did. If the display doesn't turn on, look in on.sh and make sure it's set for the correct SPI bus.
Embedded Linux Class by Mark A. Yoder