1. 程式人生 > >樹莓派開發系列教程10——樹莓派spi液晶屏支援(fbtft)

樹莓派開發系列教程10——樹莓派spi液晶屏支援(fbtft)

    樹莓派官方支援av及HDMI輸出,板子上預留了一個csi介面的液晶顯示屏,但是一直沒有相應的模組出現。在很多應用場合我們需要一些小型的液晶屏顯示一些基本的資訊,所以小屏驅動很是必要。

    在github上有一個開源工程:notro/fbtft,完整的實現了framebuffer驅動,讓樹莓派完美支援tft液晶,下面對移植過程進行一個簡單說明


一、官網地址

工程首頁:https://github.com/notro

fbtft原始碼:https://github.com/notro/fbtft

編譯好的韌體(基於3.12.25+):https://github.com/notro/rpi-firmware

使用說明(wiki):https://github.com/notro/fbtft/wiki


二、使用編譯好的韌體(3.12.25+)

環境:樹莓派

https://github.com/notro/rpi-firmware

1、開啟SPI

樹莓派預設spi是關掉的,我們需要開啟

sudo vi /etc/modprobe.d/raspi-blacklist.conf

把下面這句話前面的#號刪掉

blacklist spi-bcm2708

2、下載:

1)以模組的形式編譯進核心(需要手動或指令碼載入模組)3.12.25+(試驗成功
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
2)直接編譯進核心(筆者沒有試驗
sudo REPO_URI=https://github.com/notro/rpi-firmware BRANCH=builtin rpi-update

3)以模組的形式編譯進核心(需要手動或指令碼載入模組,最新版本,筆者試過啟動不起來,不知道哪出問題


sudo REPO_URI=https://github.com/notro/rpi-firmware BRANCH=latest rpi-update

4)直接下載壓縮包,手動安裝(適合樹莓派不能聯網的時候

http://tronnes.org/downloads/2014-06-20-wheezy-raspbian-2014-07-25-fbtft-master-firmware.zip

3、配置

1)手動載入模組:

sudo modprobe fbtft_device name=adafruit22

    name後面的名字,要跟相應的液晶驅動晶片移植

    筆者使用的液晶晶片為:fb_ra8875,所以這裡寫的是:er_tftm050_2

    其它晶片請查閱:https://github.com/notro/fbtft/blob/master/fbtft_device.c 檔案

正常會提示以下資訊

fbtft_device:  SPI devices registered:
   fbtft_device:      spidev spi0.0 500kHz 8 bits mode=0x00
   fbtft_device:      spidev spi0.1 500kHz 8 bits mode=0x00
   fbtft_device:  'fb' Platform devices registered:
   fbtft_device:      bcm2708_fb id=-1 pdata? no
   fbtft_device: Deleting spi0.0
   fbtft_device:  GPIOS used by 'adafruit22':
   fbtft_device:    'reset' = GPIO25
   fbtft_device:    'led' = GPIO23
   fbtft_device:  SPI devices registered:
   fbtft_device:      spidev spi0.1 500kHz 8 bits mode=0x00
   fbtft_device:      fb_hx8340bn spi0.0 32000kHz 8 bits mode=0x00

   graphics fb1: fb_hx8340bn frame buffer, 176x220, 75 KiB video memory, 16 KiB buffer memory, fps=20, spi0.0 at 32 MHz

在/dev/目錄下出現: /dev/fb1裝置

2)自動載入模組

sudo vi  /etc/modules

加入以下語句,既可以在啟動時自動載入模組

spi-bcm2708

fbtft_device name=er_tftm050_2  speed=28000000 fps=25 verbose=0

紅色部分根據實際情況調整,可能出現花屏現象


4、使用(官方給出的方法,筆者測試不成功)

1)手動啟動x11和控制檯到新的液晶屏
X Windows顯示在fb1上:
$FRAMEBUFFER=/dev/fb1 startx

Console顯示在fb1上:  
$con2fbmap 1 1

2)自動登陸x11

sudo vi /etc/inittab
    #1:2345:respawn:/sbin/getty --noclear 38400 tty1
    1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1

sudo vi /etc/rc.local

    su -l pi -c "env FRAMEBUFFER=/dev/fb1 startx &"

5、使用(筆者使用這個測試通過)


1)將fb0上的內容直接拷貝到fb1上,fb0和fb1同步

https://github.com/notro/fbtft/wiki/Framebuffer-use#framebuffer-mirroring

$git clone https://github.com/tasanakorn/rpi-fbcp

$cd rpi-fbcp/
$mkdir build
$cd build/
$cmake ..
$make
$sudo install fbcp /usr/local/bin/fbcp

啟動:fbcp &

關閉fbcp:killall fbcp

2)啟動時使用fb1

$sudo apt-get install xserver-xorg-video-fbdev

$sudo vi /usr/share/X11/xorg.conf.d/99-fbdev.conf

加入以下語句:

Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb1"
EndSection

啟動:startx

測試:

apt-get -y install fbi

fbi -d /dev/fb1 -T 1 -noverbose -a test.jpg

三、由核心及原始碼編譯

1、下載、編譯核心原始碼:

2、下載、編譯fbtft原始碼

$cd linux(進入下載好的核心原始碼目錄)

$cd drivers/video

$git clone https://github.com/notro/fbtft.git(下載fbtft原始碼,也可以在別的地方下載好,拷貝過來)

   修改核心原始碼的Kconfig及Makefine

  Add to drivers/video/Kconfig:   source "drivers/video/fbtft/Kconfig"

  Add to drivers/video/Makefile:  obj-y += fbtft/

$make menuconfig(在配置介面加入所選用液晶的驅動支援)

  1.  Device Drivers  --->   
  2.  Graphics support  --->   
  3. <M> Support for small TFT LCD display modules  --->  
  4. <M>   FB driver for the HX8353D LCD Controller  
  5. <M>   FB driver for the ILI9320 LCD Controller                                                 
  6. <M>   FB driver for the ILI9325 LCD Controller                                   
  7. <M>   FB driver for the ILI9340 LCD Controller                                     
  8. <M>   FB driver for the ILI9341 LCD Controller                              
  9. < >     FB driver for the ILI9481 LCD Controller                                             
  10. <M>   FB driver for the ILI9486 LCD Controller                                         
  11. <M>   FB driver for the PCD8544 LCD Controller                                       
  12. <M>   FB driver for the RA8875 LCD Controller  

$make