• 树莓派研究笔记(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

  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/chengchen/p/8413038.html
Copyright © 2020-2023  润新知