百问网全志D1h开发板MIPI屏幕触摸功能适配

news2024/11/23 8:01:55

硬件了解

首先,还是从官方提供的资料,可以了解MIPI LCD对应的接口信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

触摸功能涉及到DSI_SCL、DSI_SDA、TP_INT、TP_RESET。

从芯片的引脚图里面,可以了解到:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中:

  • DSI_SCL、DSI_SDA使用的是PB0、PB1
  • TP_INT和TP_RESET使用的是:PB6、PB4

设备树修改

设备树文件:

tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4/board.dts
  1. 检查设备树中的twi2_pins_a、twi2_pins_b的配置:
twi2_pins_a: twi2@0 {
		pins = "PB0", "PB1";
		function = "twi2";
		drive-strength = <10>;
	};

	twi2_pins_b: twi2@1 {
		pins = "PB0", "PB1";
		function = "gpio_in";
	};

确保其中引脚与前面硬件了解中的一致。

  1. 修改触摸屏的配置:
&twi2 {
	clock-frequency = <400000>;
	pinctrl-0 = <&twi2_pins_a>;
	pinctrl-1 = <&twi2_pins_b>;
	pinctrl-names = "default", "sleep";
	dmas = <&dma 45>, <&dma 45>;
	dma-names = "tx", "rx";
	status = "okay";

	ctp@38 {
		compatible = "focaltech,fts";
		reg = <0x00000038>;
		status = "okay";
		interrupt-parent = <&pio>;
		interrupts = <PB 6 IRQ_TYPE_LEVEL_LOW>;
		focaltech,reset-gpio = <&pio PB 4 GPIO_ACTIVE_HIGH>;
		focaltech,irq-gpio = <&pio PB 6 IRQ_TYPE_LEVEL_LOW>;
		focaltech,max-touch-number = <5>;
		focaltech,display-coords = <0 0 800 480>;
		focaltech,reg_vdd = <0x0000001f>;
		focaltech,reg_avdd = <0x0000001f>;
		#touchscreen-inverted-x = <0x00000001>;
		#touchscreen-inverted-y = <0x00000001>;
	};
};

确保其中引脚与前面硬件了解中的一致。

驱动程序

如果不修改驱动程序,触摸功能也能使用上,但是x轴是左右反向的,y轴也是如此,在设备树中不能定义处理,需要修改驱动程序。
具体如下。

驱动文件:

lichee/linux-5.4/drivers/input/touchscreen/focaltech_touch/focaltech_core.c

修改xy坐标返回值:

# 默认:
			input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x[i]);
			input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y[i]);

# 修改为:
			input_report_abs(data->input_dev, ABS_MT_POSITION_X, 480-event->au16_x[i]);
			input_report_abs(data->input_dev, ABS_MT_POSITION_Y, 800-event->au16_y[i]);

因为屏幕是480x800的,所以直接用对应的宽高减去获得的值即可。

配置修改

  1. 通用配置修改:
make menuconfig

选择:Kernel modules > Input modules -> kmod-input-core[*]
选择:Kernel modules > Input modules -> kmod-touchscreen-focaltech[*] # 其他触屏不选

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 内核配置修改:
make kernel_menuconfig

选择:Device Drivers > Input device support > Touchscreens -> Focaltech Touchscreen [*] # 其他不选

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编译烧录

修改完成后,就可以进行编译打包make -j16 && pack,最终结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后使用烧录工具进行烧录即可。

MIPI LCD测试

将 MIPI LCD和板子连接好,注意连接正确:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后用adb shell或者串口连接进行操作。

  1. 查看系统连接的触摸设备:
cat /dev/input/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从上面的输出可以看到event2,表示识别到了。

再看看系统启动输出信息中,对应的适配信息:

dmesg | grep -A4 -B4 fts

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到,已经成功适配,没有出错信息。

  1. 直接查看设备返回信息检查触摸是否有效:
cat /dev/input/event2  | hexdump -x

执行后,点击屏幕任一位置,有返回,说明能够接收到触摸数据了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 屏幕校准
    初次使用屏幕时,需要进行屏幕校准,确保点击位置准确,以免发生偏差。
## 触屏校准
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event2
ts_calibrate

执行后,输出如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此时屏幕显示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击左上角的那个 + ,又会出现下一个,依次点击:左上、右上、右下、左下、中间,最后黑屏。

输出信息如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击的时候,如果点左上角,发现X值是400+,Y值是700+,那铁定是前面的驱动文件没有修改或者修改不对,或者修改了没有重新编译烧录。

校准完成后,重启生效:

sudo reboot -d 0
  1. 使用lvgl测试用例
    在使用lv_examples之前,需要做一些修改,使得触摸使用/dev/input/event2
    文件:
~/tina-d1-h/package/gui/littlevgl-8lv_examples/src/lv_drv_conf.h

修改:

define EVDEV_NAME   "/dev/input/event2"

修改完成后,重新编译烧录即可。

然后,使用 lv_examples进行测试:

lv_examples 9999

会输出如下结果,表示有5个测试用例可用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大家可以依次测试看看效果如何。

这里就展示lv_examples 0,结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

屏幕显示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左右滑动,上下滑动,或者点击屏幕上的输入位置,就能够进行操作了。
触摸操作的时候,如果发现上面点了下面动,下面点了上面动,或者滑动刚好和实际方向相反,那铁定是前面的驱动文件没有修改或者修改不对,或者修改了没有重新编译烧录。

现在,屏幕适配好了,触摸也适配好了,后面就可以学学LVGL,来进行界面和互动设计开发了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1860211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1954springboot VUE 天然气系统隐患管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE天然气系统隐患管理系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC 模式开发&#xff09;&#xff0c;系统具有完整的…

JNI详解

JNI简介 Java是跨平台的语言,但在有的时候仍需要调用本地代码(这些代码通常由C/C++编写的)。 Sun公司提供的JNI是Java平台的一个功能强大的接口,JNI接口提供了Java与操作系统本地代码互相调用的功能。 Java调C++ 1)使用javah命令生成native的头文件 javah com.studio.j…

优化|PyOptInterface:高效且灵活的Python优化建模语言

优化建模语言作为优化求解器与终端用户之间的桥梁&#xff0c;是构建、求解和分析优化模型的重要工具。建模语言的效率直接影响优化模型的构建和求解时间。PyOptInterface是一种基于Python编程语言的优化建模语言&#xff0c;相比现有建模语言兼具高效率和灵活性&#xff0c;在…

Kotlin设计模式:深入理解桥接模式

Kotlin设计模式&#xff1a;深入理解桥接模式 在软件开发中&#xff0c;随着系统需求的不断增长和变化&#xff0c;类的职责可能会变得越来越复杂&#xff0c;导致代码难以维护和扩展。桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过…

【MySQL】如果表被锁可以尝试看一下事务

今天在MySQL中删除表的时候&#xff0c;发现无法删除&#xff0c;一执行drop&#xff0c;navicat就卡死。 通过 SHOW PROCESSLIST显示被锁了 kill掉被锁的进程后依旧被锁 最后发现是由于存在为执行完的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; kill掉这些事务以…

九泰智库 | 医械周刊- Vol.36

⚖️ 法规动态 广东药监局 | 8家医疗器械公司体系不合规被停产 6月17日&#xff0c;广东省药品监督管理局组织开展医疗器械生产企业监督检查&#xff0c;发现8家企业质量管理体系存在严重缺陷&#xff0c;不符合《医疗器械生产质量管理规范》相关规定&#xff0c;广东省药品监督…

美食解压视频素材无水印无字幕的在哪找?海外美食解压网站分享

在如今快节奏的生活中&#xff0c;观看美食视频已成为许多人缓解压力的一种方式。这些视频不仅唤醒人们的味觉记忆&#xff0c;还能在繁忙中带来片刻的放松。然而&#xff0c;对于视频创作者来说&#xff0c;寻找高品质的美食视频素材&#xff0c;特别是那些无水印、无字幕、可…

HALCON-从入门到入门-提取小票上的斑点

测试效果 在一张超市小票上提取点阵数字 处理步骤解析 首先读取两张图&#xff0c;一张是小票的图片&#xff0c;一张是静脉的图片 为了让点阵数字提取更加困难&#xff0c;我们将两张图片合成到一起 read_image (ImageNoise, angio-part) crop_part (ImageNoise, ImagePart…

面试-java多线程与并发

1.如何实现处理线程的返回值 (1)主线程等待法 主线程等待法&#xff1a;程序执行时&#xff0c;没有等到value值赋予完成&#xff0c;就直接在主函数 中执行打印value的值。 缺点&#xff1a;需要自己去实现循环等待的逻辑。若需要等待的变量变多&#xff0c;需要等待的时间可能…

Python22 Pandas库

Pandas 是一个Python数据分析库&#xff0c;它提供了高性能、易于使用的数据结构和数据分析工具。这个库适用于处理和分析输入数据&#xff0c;常见于统计分析、金融分析、社会科学研究等领域。 1.Pandas的核心功能 Pandas 库的核心功能包括&#xff1a; 1.数据结构&#xff…

python flask使用flask_migrate管理数据库迁移

&#x1f308;所属专栏&#xff1a;【Flask】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

openfeign的原理 ????

1、我们使用openfeign调用远程接口就像调用本地方法一样简单。 2、支持spring mvc 注解 3、整合了更多的扩展 &#xff08;请求重试策略、超时控制、请求拦截器&#xff09; 4、open Feign是基于aop的原理&#xff0c;他会通过所加FeignClient的接口&#xff0c;自动拼接接口…

使用gradle上传maven工件到新版maven central仓库central.sonatype.com

本文主要用到的插件是sonatype-uploader, 该插件主要功能是上传依赖文件夹到中央仓库。 该文件夹的生成也十分简单&#xff0c;不用担心。 前言 最近在研究maven插件的时候发现发布的网站发生了变化&#xff0c;使用之前的一些插件没能满足我发布依赖的需求&#xff0c;也可…

公司加密软件的主要功能(五款优秀公司加密软件)

在当今数字化和信息化的时代&#xff0c;企业面对的最大挑战之一就是如何保护其敏感数据不被泄露或篡改。无论是内部员工的操作失误还是外部黑客的恶意攻击&#xff0c;都可能导致严重的数据泄露事件。公司加密软件作为一种强有力的安全工具&#xff0c;能够有效地保护企业的敏…

解析分子筛自动填充高原制氧机的工作原理及优势

在高原地区&#xff0c;由于空气稀薄&#xff0c;氧气含量相对较低&#xff0c;这给人们的生活、工作和学习带来了诸多不便。为了解决这个问题&#xff0c;高原制氧机应运而生&#xff0c;其中分子筛自动填充高原制氧机以其高效、稳定、安全的特点受到了广泛的关注和应用。 一、…

PointCloudLib RANSAC算法实现点云粗配准 C++版本

0.实现效果 原始点云 粗配准后的点云 1.算法原理 RANSAC(Random Sample Consensus)算法,更常见的是RANSAC的变种RANSAC-ICP(Iterative Closest Point)或RANSAC结合其他点云配准技术,用于实现两个点云或3D模型之间的粗配准。在这里,我将简要描述一个使用RANSAC算法进行…

【SQL Server数据库】关系模式与关系代数

目录 一、请用关系代数完成下列查询 1. 求 供应工程J1 零件P1的供应商号码SNO&#xff1b; 2. 求 供应工程J1 零件&#xff08;P&#xff09;为红色 的供应商号码SNO&#xff1b; 3. 求 没有使用 天津供应商&#xff08;P&#xff09;生产的红色零件&#xff08;S&#xff0…

Win11 docker build拉取镜像失败(无法访问镜像仓库)

目录 遇到的问题&#xff1a; 修改docker配置 写了一个dockerfile(基于python的镜像)文件&#xff0c;在生成时&#xff0c;一直报错&#xff0c;换了好几个仓库&#xff0c;都是不行(包括阿里、南大、官网、网易、Azure中国镜像等都不行) 遇到的问题&#xff1a; 连接超时…

梅雨季,祛湿不健脾,湿气易反复!4个方法助您健脾胃,祛湿气!

进入梅雨季以来&#xff0c;苏州连续降雨&#xff0c;空气湿度增加&#xff0c;我们身体内的湿气也愈加严重&#xff1a;身上胖嘟嘟、脸上油乎乎、身体困重、乏力&#xff0c;极易疲劳&#xff0c;食欲减退&#xff0c;头昏昏沉沉的&#xff0c;大便也十分黏腻…… 关于祛湿&am…

【软件下载】Camtasia Studio 2024详细安装教程视频

习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件&#xff0c;拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件&#xff0c;教授课程&#xff0c;培训他…