樹莓派研究筆記(9)-- 樹莓派SPI連接TFT屏幕


HDMI連接和樹莓派專用連接的接口的屏幕都太貴了,為了節約成本,現在國內大多數還是TFT屏幕。 樹莓派可以激活SPI接口,通過代碼驅動TFT屏幕的顯示。這樣利用樹莓派zero 打造小型的游戲平台可以大大節約成本。淘寶網上的TFT屏幕很便宜,但是一定要記得別買錯了,一定要看說明需要支持SPI接口的才行。各種屏幕的驅動也不一樣,國內多半是fb_ili9431的驅動。購買之前先看仔細各種參數。https://github.com/notro/fbtft/wiki/fbtft_device https://github.com/notro/fbtft/wiki/LCD-Modules FBTFT驅動支持列表

比如這種:

1.按照如下圖的連接線連接。

2. 先激活樹莓派配置

sudo raspi-config

找到Interfacing Options

然后找到P4 SPI然后 enable SPI interface

3. 更新后重啟,一定要看到更新成功,如果出現文件錯誤,可以嘗試參考我前面的文章更換鏡像地址后重新嘗試。

sudo rpi-update
sudo reboot

4.執行以下命令就可以發現TFT屏幕可以顯示了:

執行命令 sudo modprobe fbtft_device name=rpi-display gpios=reset:25,dc:24,led:18 rotate=90 fps=50 speed=65000000

或者執行  sudo modprobe fbtft_device custom name=fb_ili9431 buswidth=8 gpios=reset:25,dc:24,led:18 rotate=90 fps=50 speed=65000000

參考文獻:https://www.raspberrypi.org/forums/viewtopic.php?t=157618

執行完畢后,可以查看日志,日志不能有錯誤:
dmesg

$ dmesg
...
...
[  703.864352] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  703.870840] spidev spi0.1: spidev spi0.1 500kHz 8 bits mode=0x00
[  703.870917] bcm2708_fb soc:fb: soc:fb id=-1 pdata? no
[  704.184479] graphics fb1: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB DMA buffer memory, fps=20, spi0.0 at 32 MHz
[  704.184566] fbtft_device: GPIOS used by 'rpi-display':
[  704.184581] fbtft_device: 'reset' = GPIO25
[  704.184591] fbtft_device: 'dc' = GPIO24
[  704.184599] fbtft_device: 'led' = GPIO18
[  704.184618] spidev spi0.1: spidev spi0.1 500kHz 8 bits mode=0x00
[  704.184633] fb_ili9341 spi0.0: fb_ili9341 spi0.0 32000kHz 8 bits mode=0x00

 通過檢查背景燈光是否亮了,如果亮了,說明就成功了。

5. 不知道什么原因,執行強制使用以下命令的時候總是報Policykit Authentication Agent的錯誤,即使在windows session中關閉也不行。

FRAMEBUFFER=/dev/fb1 startx

經過長時間的研究發現可以直接修改下面這個文件。 然后再sudo raspi-config 設置boot options 啟動選項為Console 項目,不啟動桌面。重啟后,使用startx命令就可以看到tft屏幕顯示了。

Create file: /usr/share/X11/xorg.conf.d/99-fbdev.conf

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

6. 調試命令/工具

sudo modprobe fbtft_device -r 刪除設備

查看設備 ls /dev/fb* -l

好用的工具:wiringPi
可查看當前所有GPIO的電壓以及使用情況。

git clone git://git.drogon.net/wiringPi
cd wiringPi
sudo ./build

gpio readall

7. Orange Pi  相關

好用的工具:wiringOP

一定要注意,使用orange pi有一個大坑,網上找到的圖和實際的GPIO不符合。一定要使用wiringOP這個工具查看當前的端口。這個問題導致我卡了N天,花費了N個小時。

BCM列就是gpio 端口號。而wPi是指實際的標准端口,如果用wiringop的時候需要操作wPi的標准端口號。而在一般使用情況下則使用BCM端口號。

比如,在orangepi 下,我們可以執行命令 

sudo modprobe fbtft_device custom name=fb_ili9431 buswidth=8 gpios=reset:8,dc:9,led:7 rotate=90 speed=48000000 busnum=0 fps=50 (如果是orangepi zero的 spi0 會被占用。不成功就嘗試修改busnum等於1)

然而,大部分系統會提示 cannot find fbtft_device module,或者fbtft_device 參數錯誤之類。因為大部分orangepi的系統都沒有自帶fbtft_device module啊。或者是應為SPI service 沒有開通啊。全都是坑。最終我找到一個可以直接執行上述命令的操作系統:

Armbian
例如:orangelite版本: (不能保證未來的新版本會去掉驅動,本文寫於2018-02-18,可以下載這個時間點附近的release的版本)
https://www.armbian.com/orange-pi-lite/ 

Armbian Ubuntu desktop – legacy kernel

屏幕轉移功能依然不好使,可以參考下面文獻設置為自啟動
con2fbmap 1 8(Armbian安裝好后,發現新增的驅動為fb8,所以這里是8的映射)

參考文獻
https://www.mysensors.org/build/orange
http://www.instructables.com/id/Orange-Pi-Zero-Connect-TFT-SPI-ST7735/
https://kaspars.net/blog/linux/spi-display-orange-pi-zero


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM