SSD_TFT-LCD驱动使用参考


1. 概述

本文为Spi 接口的 TFT-LCD驱动的使用参考。


2. Spi panel驱动配置

2.1. Kernel menuconfig

Kernel menuconfig中打开fbtft config,把红框中的编译成模块

注意: Support for small TFT LCD display这个需要设置为 *


2.2. Dts添加对应配置

编译后insomod安装,命令如下

  1. 移除原有的fb模块

    在板子上移除customer/demo.shinsmod /config/modules/4.9.84/fbdev.ko(有zkgui的话也先移除)。

    也可以在project\release\dispcam\p3\common\glibc\9.1.0\modules\4.9.84\ misc_mod_list_late内移除fbdev.ko

    重启平台。

  2. 重启后加载fbtft模块

    insmod /config/modules/4.9.84/fbtft_device.ko busnum=1 name=admatec_c-berry28 cs=0 gpios="reset:21,dc:20" custom=1 speed=40000000 width=240 height=320 buswidth=8 mode=0 debug=7 dma=0
    

    name=admatec_b-berry28 要和驱动内fbtft_device_display displays[]的name一致

    注意:Speed参数如果过高可能会出现spi timeout, 可以尝试降低speed做调试。

  3. 加载对应TFT驱动

    insmod /config/modules/4.9.84/fb_st7796s.ko
    

    此时会生成dev/fb0的节点,直接在fb上画图即可。

以上的步骤2 / 3,也可以在project\kbuild\customize\4.9.84\p3\dispcam \kernel_mod_list_late这个文件内添加如下两行,这样ko会自动打包到image并且开机自动加载:

fbtft_device.ko busnum=1 name=admatec_c-berry28 cs=0 gpios="reset:17,dc:42" custom=1 speed=40000000 width=240 height=320 buswidth=8 mode=0 debug=7 dma=0

fb_st7789v.ko

2.3. panel配置

针对panel的相关设定的更改:

  1. 屏初始化

    Fbtft-core.c

    fbtft_probe_common() -> fbtft_register_framebuffer() -> fbtftops.init_display() 会使用如下数组的初始化参数对panel做初始化。

    其他设定分别在fbtftops.set_var()/fbtftops.update_display()fbtftops.set_gamma()

  2. 刷新

    上层通过ioctl(g_fbFd, FBIOPAN_DISPLAY, &vinfo)来刷新fb,对应底层fbtft_update_display() -> fbtftops.write_vmem() -> fbtft_write_vmem16_bus8() -> fbtftops.write -> fbtft_write_spi()

    注意: 因为是spi直接送数据给panel,RGB565或 RGB888送的数据不一样,所以上层给驱动的data数据需要符合屏的数据格式。


2.4. ZKGUI配置

针对ZKGUI需要export ZK_GFX_ENABLE=0 关闭gfx。