Tina 提供了2种 SPI TFT 显示屏的驱动方式。第一种是官方推荐的 fbdev 方式,使用 Framebuffer implementaion without display hardware of AW 进行 SPI屏幕的驱动。另外一种是使用 fbtft 进行 SPI 屏幕驱动。 fbdev 方式由于 pinctrl 在新内核中调用方式出现修改,所以暂时无法使用。修改难度较大。fbtft 虽然官方wiki表明不建议在 Linux 5.4 中使用,但是其实也是可以使用的,只需要修改一下 GPIO 的注册方式就行。
先驱动 SPI 屏幕
这里驱动的屏幕所选择的是 ST7789V SPI
修改 FBTFT 驱动
进入 tina-d1-open/lichee/linux-5.4/drivers/staging/fbtft 找到 fbtft-core.c
首先加入将要使用到的头文件
|
然后找到 static int fbtft_request_one_gpio() 函数,将已经弃用的端口绑定方法改为以下内容
|
找到 static void fbtft_reset() 函数,将 RST 信号最后拉高
|
找到 static void fbtft_set_addr_win() 函数,添加地址偏移。否则会出现下图部分雪花屏现象。

|
找到 fb_st7789v.c,参照STM32的初始化函数对初始化部分进行修改。
|
将屏幕大小配置为屏幕实际大小
|
设备树修改
首先打开电路图,找到 SPI 屏幕的电路。

根据电路,找到 pio 节点,添加 SPI0 所用引脚,spi0_pins_a 作为数据时钟绑定,spi0_pins_b 作为 CS 的绑定,并上拉。RST,DC,背光在这里不做声明。
|
然后找到 SPI0 节点,添加屏幕使用的设备树。使用 pinctrl-0 将 pio 中定义的 SPI 引脚进行注册。RST,DC,背光在这里进行绑定,并设置其工作电平。
|
最后,将不需要的屏幕关闭,方便调试
|
内核配置
进入 kernel_menuconfig ,开启 FBTFT,关闭 RGB,MIPI 所使用的 DISP Driver Support(sunxi-disp2) 输出。
|
由于上面配置关闭了 DISP Driver Support(sunxi-disp2) ,所用需要在 menuconfig 里将内核模块关闭,否则会出现找不到驱动的错误。
|
编译,打包,使用 fbviewer 进行测试
|

修改为双屏驱动
修改双屏也很简单,SPI 屏幕调试完成之后,将刚才关闭的各类驱动打开即可。
配置设备树
找到 SPI0 节点,将背光 led 注释掉,查看电路图可知 RGB 屏幕和 SPI 屏幕使用的背光是同一个,这里不需要分开注册。
|
把之前关闭的显示输出重新打开
|
配置内核
进入 kernel_menuconfig ,开启 DISP Driver Support(sunxi-disp2) 输出,并选择面板驱动。
|
在 menuconfig 里将内核模块重新打开。
|
编译,打包,测试。这里使用 ffmpeg 进行双屏播放 badapple.mp4

附录:部分设备树完整参考(配置双屏后,HDMI禁用了)
|
微信
支付宝