TFT-LCD驱动使用参考


1. 概述

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


2. Spi panel驱动配置

  1. Kernel menuconfig中打开fbtft config,把图中标记编译成模块

  2. Dts添加对应配置

    编译后insomod安装,命令如下

    1. 移除原有的fb模块

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

    2. 重启后加载fbtft模块

      insmod /config/modules/4.9.84/fbtft_device.ko busnum=1 name=admatec_b-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/fb\_st7796s.ko
      

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

  3. 针对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数据需要符合屏的数据格式,

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