Zephyr触摸屏驱动实现
  m9kCQSVmQX0i 2023年11月02日 39 0

实战目标

  • 实现屏幕显示
  • 实现屏幕触摸

实战中使用的是聆思命令行指令和sample实例,可以参考《聆思CSK6开发工具简介》进行一键部署。

进行本文的学习前可以先进行《Zephyr设备树保姆级上手教程【下】》中编写LCD显示屏节点的实践。


CSK6 显示套件信息

  • 显示屏型号:ST7789V
  • 尺 寸:2.8寸
  • 分辨率:320*240
  • 触摸屏型号:FT5336

Zephyr触摸屏驱动实现_设备树

实现屏幕显示

相关文件

Zephyr触摸屏驱动实现_触摸屏_02

以下为配置相关的文件,文件的修改和使用详解可以点击【导读目录】获取

  • CSK6 SDK中将显示模块定义为Display。
  • LCD显示屏Kconfig文件:csk6-sdk/zephyr/drivers/display/Kconfig.st7789v
  • LCD显示屏设备树绑定文件:csk6-sdk/zephyr/dts/bindings/display/sitronix,st7789v.yaml
  • LCD显示屏设备树配置文件:lvgl_demo/boards/csk6011a_nano.overlay
  • LCD显示屏驱动文件: csk6-sdk/zephyr/drivers/display/display_st7789v.c csk6-sdk/zephyr/drivers/display/display_st7789v.h


驱动调用/配置

我们以应用层调用display_write接口写入颜色块数据到显示屏的实现过程为示例看驱动的调用流程。 显示屏的驱动中实现了display_driver_api接口,并通过Include/drivers/display.h封装调用接口供上层应用使用。

Zephyr触摸屏驱动实现_聆思CSK6_03

注意: 在csk6 sdk的drivers/display目录中可看到sdk已完成了ST7789V、ILI9844等型号屏显设备驱动的适配,开发者只需要在应用开发中完成驱动的配置即可使用显示屏功能。 

创建Sample

CSK6 SDK提供了Display的sample,在这个Display例程中,主程序对显示屏进行了初始化,并依次展示简单图形的绘制和图形的动态灰度调整功能。

  • Sample的获取方式:lisa zep create
  • Sample路径:boards → csk6 → driver → display_kscan

ST7789V 显示屏SPI引脚定义:

  1. 打开display_kscan\boards\csk6011a_nano.overlay 文件;
  2. 将&pinctrl 的配置替换为以下内容后保存。
&csk6011a_nano_pinctrl{
        pinctrl_spi0_sclk_default: spi0_sclk_default {
                pinctrls = <&pinmuxb 1 6>;
        };
        pinctrl_spi0_mosi_default: spi0_mosi_default {
                pinctrls = <&pinmuxb 10 6>;
        };
        pinctrl_spi0_miso_default: spi0_miso_default {
                pinctrls = <&pinmuxa 17 6>;
        };
        pinctrl_spi0_cs_default: spi0_cs_default {
                pinctrls = <&pinmuxb 0 6>;
        };
};

验证配置:

进入display_kscan目录,执行编译和烧录指令后可以看到如下界面,且右上角色块循环变化颜色

  • 执行编译:lisa zep build -b csk6011a_nano
  • 烧录指令:lisa zep flash

Zephyr触摸屏驱动实现_聆思CSK6_04



添加显示屏自定义驱动

在实际项目中我们可以把LCD屏的驱动放在应用项目中去维护,按以下几个步骤就可以实现。(详细讲解请见相关视频)

1.添加自定义LCD 屏的设备树绑定文件: sitronix,st7789v.yaml

2.在应用项目下增加自定义LCD 屏的驱动文件:

  • display_st7789v.c
  • display_st7789v.h

3.在应用项目下增加自定义LCD 屏的Kconfig文件:Kconfig

4.在CMakeLists.txt添加屏幕驱动的文件路径

list(APPEND ZEPHYR_EXTRA_MODULES
  ${CMAKE_CURRENT_SOURCE_DIR}/drivers/st7789v
)

5.在应用项目下boards/csk6011a_nano.overlay增加自定义LCD 屏的设备树配置。

6.添加的文件结构如下所示

Zephyr触摸屏驱动实现_lvgl_05

实现屏幕触摸

相关文件

Zephyr触摸屏驱动实现_触摸屏_06

以下为配置相关的文件,文件的修改和使用可以参考视频解说:

  • CSK6 SDK中将触摸模块定义为Kscan(keyboard scan matrix)。
  • 触摸屏Kconfig文件:csk6-sdk/zephyr/drivers/kscan/Kconfig.ft5336
  • 触摸屏设备树绑定文件:csk6-sdk/zephyr/dts/bindings/kscan/ focaltech,ft5336.yaml
  • 触摸屏设备树配置文件:lvgl_demo/boards/csk6011a_nano.overlay
  • 触摸屏驱动文件: csk6-sdk/zephyr/drivers/kscan/kscan_ft5336.c csk6-sdk/zephyr/drivers/kscan/kscan_ft5336.h


驱动调用/配置

在csk6 sdk的drivers/display目录中可看到sdk已完成了BL6XXX(kscan_bl6xxx.c) 、ft5336(kscan_ft5336.c)等型号触摸屏设备驱动的适配,开发者只需要在应用开发中完成驱动的配置即可使用触摸屏功能。 下面是应用层通过触摸回调接口获取触摸点坐标的实现过程。

Zephyr触摸屏驱动实现_触摸屏_07

创建Sample

CSK6 SDK提供了Kscan的sample,在这个Kscan例程中,主程序对触摸屏初始化,注册触摸事件的回调,通过回调结果获取触摸点的坐标并输出日志。

  • sample的获取方式:lisa zep create
  • Sample路径:boards → csk6 → driver → display_kscan


FT5336 触摸屏IIC引脚定义

overlay文件修改参考

&csk6011a_nano_pinctrl{
        pinctrl_i2c0_scl_default: i2c0_scl_default{
                pinctrls = <I2C0_SCL_GPIOB_04>;
        };
        pinctrl_i2c0_sda_default: i2c0_sda_default{
                pinctrls = <I2C0_SDA_GPIOB_03>;
        };
};

示例代码获取地址:https://cloud.listenai.com/listenai_xqqin/lvgl_demo或通过支持简介获得对应代码支持


触摸屏自定义驱动的添加

1.添加自定义触摸屏的设备树绑定文件:focaltech,ft5336c.yaml

2.在应用项目下增加自定义触摸屏的驱动文件: kscan_ft5336.c

3.在应用项目下增加自定义触摸屏的Kconfig文件:Kconfig

4.在CMakeLists.txt添加屏幕驱动的文件路径 list(APPEND ZEPHYR_EXTRA_MODULES   ${CMAKE_CURRENT_SOURCE_DIR}/drivers/ft5336 )

5.在应用项目下boards/csk6011a_nano.overlay增加自定义触摸屏的设备树配置。

6.编译烧录后连接串口,触摸屏幕后会看到串口输出的日志中会出现如下图所示的坐标信息

Zephyr触摸屏驱动实现_Zephyr RTOS_08


更多学习资源

如果需要获取本教程相关的学习资源、代码,

或者了解更多与嵌入式开发、AI芯片相关的其他课程,可以点击查看目录导航


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ff1CyeNEm5RT   2023年11月12日   21   0   0 Linux引脚设备树
m9kCQSVmQX0i
最新推荐 更多