Zephyr触摸屏驱动实现教程
在Zephyr RTOS中有设备驱动模型这个概念,触摸屏也是智能硬件中常见的一个交互硬件,为了让大家可以结合实例进一步了解Zephyr RTOS中设备驱动的使用,我们推出了《Zephyr触摸屏驱动实现教程》。
本次课程由聆思科技资深解决方案专家覃晓庆讲解,通过本课程我们将会了解:
- CSK6 + 触摸屏的基础使用
- Zephyr RTOS 下屏显与触摸驱动的原理
- 如何适配触摸屏驱动
通过这节课,大家在掌握嵌入式触摸屏驱动原理的同时,如果你手头恰好有触摸屏以及支持Zephyr RTOS的开发板,可以尝试将屏幕在开发板上适配运行起来。
实战中使用的是聆思命令行指令和sample实例,可以参考《聆思CSK6开发工具简介》进行一键部署。进行本文的学习前可以先进行《Zephyr设备树保姆级上手教程【下】》中编写LCD显示屏节点的实践。
CSK6 显示套件信息
显示屏型号:ST7789V
尺 寸:2.8寸
分辨率:320*240
触摸屏型号:FT5336

实现屏幕显示
相关文件

以下为配置相关的文件,文件的修改和使用可以参考视频解说
- 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封装调用接口供上层应用使用。

注意:
在csk6 sdk的drivers/display目录中可看到sdk已完成了ST7789V、ILI9844等型号屏显设备驱动的适配,开发者只需要在应用开发中完成驱动的配置即可使用显示屏功能。
实战创建Sample
CSK6 SDK提供了Display的sample,在这个Display例程中,主程序对显示屏进行了初始化,并依次展示简单图形的绘制和图形的动态灰度调整功能。
实战中使用的是聆思命令行指令,可以参考《聆思CSK6开发工具简介》进行一键部署
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

添加显示屏自定义驱动
在实际项目中我们可以把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.添加的文件结构如下所示

示例代码获取地址:项目 · 覃晓庆 / LVGL_demo · GitLab
或通过支持简介获得对应代码支持
实现屏幕触摸
相关文件

以下为配置相关的文件,文件的修改和使用可以参考视频解说:
- 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)等型号触摸屏设备驱动的适配,开发者只需要在应用开发中完成驱动的配置即可使用触摸屏功能。
下面是应用层通过触摸回调接口获取触摸点坐标的实现过程。

创建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 = ;};pinctrl_i2c0_sda_default: i2c0_sda_default{pinctrls = ;};
};
Copy
示例代码获取地址:LVGL_demo · GitLab
或通过支持简介获得对应代码支持
触摸屏自定义驱动的添加
以下为配置相关的文件,具体操作可以参考视频解说:
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系列相关分享 | CSDN
环境搭建 | 聆思文档中心
芯片介绍 | 聆思文档中心
支持简介 | 聆思文档中心
更多视频课程
关于聆思
聆思科技是一家专注提供智能终端系统级(SoC)芯片的高科技企业,目前推出的CSK6系AI芯片已适配Zephyr RTOS。
如果你在学习、开发过程中有疑问或难题,希望与专家和更多的开发者交流,欢迎+V:listenai-csk
欢迎各位同学联系我们进行技术相关的探讨,也可以在评论区进行提问,大家一起进步吧!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
