TFT-LCD驱动使用参考
1. 概述¶
本文为Spi 接口的 TFT-LCD驱动的使用参考。
2. Spi panel驱动配置¶
-
Kernel menuconfig中打开fbtft config,把图中标记编译成模块
-
Dts添加对应配置
编译后insomod安装,命令如下
-
移除原有的fb模块
在板子上移除
customer/demo.sh
的insmod /config/modules/4.9.84/fbdev.ko
(有zkgui的话也先移除), 重启平台。 -
重启后加载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做调试。
-
加载对应TFT驱动
insmod /config/modules/fb\_st7796s.ko
此时会生成dev/fb0的节点,直接在fb上画图即可。
-
-
针对panel的相关设定的更改
-
屏初始化
Fbtft-core.c
fbtft_probe_common() -> fbtft_register_framebuffer() -> fbtftops.init_display()
会使用如下数组的初始化参数对panel做初始化。其他设定分别在fbtftops.set_var()/fbtftops.update_display()fbtftops.set_gamma()
-
刷新
上层通过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数据需要符合屏的数据格式,
-
-
针对ZKGUI需要export ZK_GFX_ENABLE=0 关闭gfx