全志V3S嵌入式驱动开发(触摸屏驱动)

news2024/11/27 9:37:18

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        所谓的触摸屏,其实就是在普通的lcd屏幕之上,再加一层屏而已。这个屏是透明的,这样客户就可以看到下面lcd屏幕的内容,另外一方面,通过触摸信号,还可以实现人和机器的自然交互,这是一种非常好的体验形式。像早期的按键手机,大家用着其实还行,只不过后来转成智能手机,只剩下一个屏幕之后,就一股脑全转成触摸屏手机了。

1、查看lcd电路图

         之前我们说过这个lcd 40 pin的原理图。上次分析的时候,卖了一个关子。就是这个TPX1、TPY1、TPX2、TPY2,四根信号线。这四根线并没有直接连接到soc上面,而是先连接到ns2009,然后再通过i2c的形式连接到soc上面。

         简单浏览下,发现TP信号连接到了2、3、4、5号pin上面,soc需要获取触摸信息的话,通过SCK & SDA就可以,当然这里还有一个PENIRQ,理论上是可以通过中断的形式获取触摸信息的。但是,实际看linux驱动代码的话,发现还是定时轮询的形式。

        此外选择lcd屏幕的时候,一定要选择带有触摸屏的那种,千万要和商家沟通清楚。不然白白浪费了自己的时间。

2、设备树

        上面分析电路得出结论,soc是通过i2c获取按键信息的,那么可以直接查找sun8i-v3s-licheepi-zero.dts,

&i2c0 {
	status = "okay";

	ns2009: ns2009@48 {
		compatible = "nsiway,ns2009";
		reg = <0x48>;
	};
};

        引脚信息可以在sun8i-v3s.dtsi查找到,菲苾是PB6、PB7

			i2c0_pins: i2c0 {
				pins = "PB6", "PB7";
				function = "i2c0";
			};

        更详细的寄存器、中断、时钟信息也可以在这个文件的后半部分找到,

		i2c0: i2c@01c2ac00 {
			compatible = "allwinner,sun6i-a31-i2c";
			reg = <0x01c2ac00 0x400>;
			interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_I2C0>;
			resets = <&ccu RST_BUS_I2C0>;
			pinctrl-names = "default";
			pinctrl-0 = <&i2c0_pins>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

        上面说的这些内容都是默认配置好的,只要是linux 4.14.y内核,就不需要自己再动手配置一遍了。

3、查看驱动代码

        因为这里使用到了i2c协议,也使用到了ns2009芯片,所以只需要在drivers/input/touchscreen下面查找下,有没有类似于ns2009的驱动就好。观察发现,果然有一个ns2009.c文件,里面内容也和我们想的差不多,

static const struct i2c_device_id ns2009_ts_id[] = {
	{ "ns2009", 0 },
	{ }
};
MODULE_DEVICE_TABLE(i2c, ns2009_ts_id);

static struct i2c_driver ns2009_ts_driver = {
	.probe = ns2009_ts_probe,
	.id_table = ns2009_ts_id,
	.driver = {
		.name = NS2009_TS_NAME,
	},
};
module_i2c_driver(ns2009_ts_driver);

        这部分代码因为是包含在zImage里面的,因此也就不需要重新编译、重新烧入了。和其他驱动相比较,这算是很方便的一种情形。

4、下载、安装tslib库

        tslib基本就是触摸屏调试的一个标配。它不仅仅可以帮助我们对触摸屏做出一些参数标定,还可以用它做接口,做一些测试或者定制应用开发。首先,我们需要下载一个tslib代码,

https://github.com/libts/tslib/releases

        选择好版本之后,就可以拷贝到ubuntu虚拟机,准备用交叉编译工具开始编译,

mkdir __install
./configure -host=arm-linux-gnueabihf -prefix=$PWD/__install
make
make install

        编译安装好之后,所有的文件都被安装到__install目录下面。接下来要做的,就是把这些文件拷贝到sd卡的ext4系统上面去,

cp bin/* /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/bin/
cp lib/*.so* /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/lib/ -rfdv
cp lib/ts/ /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/lib/ -rfdv
cp etc/ts.conf /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/etc/

        自此,tslib就安装好了,可以准备测试了。

5、测试验证tslib

        测试验证之前,需要先配置一下环境变量,有几个参数需要设置下,

export set TSLIB_TSDEVICE=/dev/input/event0
export set TSLIB_CONFFILE=/etc/ts.conf 
export set TSLIB_PLUGINDIR=/lib/ts 
export set TSLIB_CALIBFILE=/etc/pointercal  
export set TSLIB_CONSOLEDEVICE=none
export set TSLIB_FBDEVICE=/dev/fb0 

        第一个参数表示event设备节点的位置。如果ns2009驱动正常安装,肯定会有这个节点的。第二个参数表示配置文件的位置。第三个参数表示插件的位置。第四个参数表示标定参数保存的位置。第五个参数可以不设置,直接写成none。第六个参数表示屏幕节点的位置。

        当然测试的时候,别忘记点亮屏幕,屏幕不点亮啥也做不了,

echo 34 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio34/direction
echo 1 > /sys/class/gpio/gpio34/value

        首先,先用ts_calibrate做一下触摸屏的标定,

# ts_calibrate 
xres = 480, yres = 272

        不出意外,屏幕上可以看到这样的情形,

         有一个十字箭头的东西会依次出现在四个角落和中间位置,每点击依次,它就会跳到新的位置。五次都结束以后,标定就结束了,

# ts_calibrate 
xres = 480, yres = 272
[  113.404260] random: crng init done
Took 1 samples...
Top left : X =  534 Y = 1156
Took 3 samples...
Top right : X = 3496 Y = 1334
Took 2 samples...
Bot right : X = 3510 Y = 3270
Took 2 samples...
Bot left : X =  453 Y = 3075
Took 1 samples...
Center : X = 1963 Y = 2066
-15.522461 0.126093 0.002039
-46.474915 -0.005545 0.088761
Calibration constants: -1017280 8263 133 -3045780 -363 5817 65536 

        接下里就可以用ts_test开始测试了,

        测试有两种方式,一种是拖着十字到处移动,还有一种就是画图。如上图所示,这就是画图的测试方法,只不过我们写了两个汉字。不管是那种方式,需要先到对应的按钮选中一下。因为电阻屏反应没那么灵敏,等按下去的时候,时间多停留一会,直到按钮颜色变化之后,再开始测试。如果能写出自己想要的内容,基本表明驱动移植成功。

        串口方面,也可以看到这些打印信息,

# ts_test
1178.709275:    265     77    255
1178.748307:    265     77      0
1178.789301:    265     42    255
1178.829277:    508    283    255
1178.868270:    508    283      0
1179.549275:    268     15    255
1179.589293:    284     25    255
1179.629289:    297     38    255

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

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

相关文章

想要提高办公效率,可以采用表单自定义工具

当前&#xff0c;随着社会的进步和科技的发展&#xff0c;表单自定义工具逐渐在现代化办公场所中得到重用和喜爱。因为它的灵活、简便、易操作等优势特性&#xff0c;使得其突破了传统表单制作工具的局限&#xff0c;成为广大中大型企业实现流程化管理和数字化进程的得力助手。…

UnityVR--组件5--Animation动画

目录 新建动画Animation Animation组件解释 应用举例1&#xff1a;制作动画片段 应用举例2&#xff1a;添加动画事件 Animator动画控制器 应用举例3&#xff1a;在Animator中设置动画片段间的跳转 本篇使用的API&#xff1a;Animation、Animator以及Animator类中的SetFlo…

程序语言排行榜有哪些

程序语言排名 程序语言排行NO.1Java Java是基于类的面向对象的编程语言&#xff0c;拥有跨平台、面向对象、泛型编程的特性&#xff0c;广泛应用于企业级Web应用开发和移动应用开发。任职于Sun Microsystems的詹姆斯高斯林等人于1990年代初开发Java语言的雏形&#xff0c;最初被…

超低功耗待机血压计语音IC方案,智能提示NV080C-S8

随着我国步入21世纪的步伐和改革开放的不断深入&#xff0c;我国医疗水平和人民的生活水平不断提高&#xff0c;致使我国已经成为了全球老龄化为严重的国家&#xff0c;老年人占据的比重越来越大&#xff0c;一些常见的却不容易治愈的老年性疾病的预防工作已成为现今确保老年人…

LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路

Lvm常见的故障主要是pv出现异常&#xff0c;有以下几种情况 一个是pv所在的磁盘发生了lvm的元数据损坏一个是系统无法识别到pv所在的磁盘一个是系统异常&#xff0c;断电等导致重启后盘符发生变化&#xff0c;也就是系统识别的磁盘uuid发生变化&#xff0c;但是wwid还是可以对应…

4.6 Monitor概念

目录 1、对象头2、原理Monitor3、原理之Synchronized4、原理之Synchronized进阶1&#xff09;轻量级锁2&#xff09;锁膨胀3&#xff09;自旋优化4&#xff09;偏向锁5&#xff09;锁消除 1、对象头 64 位虚拟机 在加锁的过程中&#xff0c;Mark Word中的62位将会指向操作系统…

外包呆了5年终上岸,劝各位别去了...

有些测试员朋友找工作过程中问我&#xff0c;或者网上问有外包公司的offer&#xff0c;要不要去外包公司?在这里我结合我自己的经历和身边一些朋友的情况来谈谈这个问题。首先我呆过两家外包公司&#xff0c;并且身边有不少朋友是在外包公司工作。所以我只是尽量客观的分析这个…

Python 接口自动化测试导入接口无法上传文件有什么原因? 详细教程

在Python接口自动化测试中&#xff0c;上传文件通常需要使用requests库来发送HTTP请求。以下是一个示例代码来实现上传文件的功能&#xff1a; 如果你想学习自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站百万播放全网第一的自动化测试教程&am…

畅聊趣坊项目测试报告

文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 在浏览网站时&#xff0c;发现好多网站开放出聊天的窗口&#xff0c;我们一发送消息就会收到一条消息&#xff0c;好奇这个功能是怎么实现的&#xff0c;最后查阅资…

七日杀EOS错误,开服出现房间无法被搜索的问题

如题&#xff0c;本问题建立在你的服务器已经正常启动的情况下。 如果你的服务器根本做不到正常启动&#xff0c;那么这个方案可能并不适合你。 这里只提供windows端的配套过程&#xff0c;如果你的os是linux&#xff0c;那么需要自行bing一下证书导入方法。 本文默认你的serve…

Numpy---类型修改、去重、级联、拆分、拷贝复制

1. 类型修改 ndarray.astype(type) 返回修改了类型之后的数组 stock_change np.random.normal(0, 1, (4, 5)) stock_change.astype(np.int32)ndarray.tostring([order]) ndarray.tobytes([order]) 构造包含数组中原始数据字节的Python字节 arr np.array([[[1, 2, 3], […

【C++学习】特殊类设计 | 类型转换

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 特殊类设计 | 类型转换 一、特殊类设计1.1 不能被拷贝的类1.2 只能在堆上创建的类1.3 只能在栈上创建…

SpringBoot整合ShardingSphere5.x实现数据加解密功能

环境&#xff1a;Springboot2.6.14 ShardingSphere5.3.0 准备环境 添加依赖 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>${shardingsphere.version}</ve…

【数据分享】1929-2022年全球站点的逐日最低气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

【资料分享】过压保护自锁控制电路

概述(电路类别、实现主要功能描述)&#xff1a; 在电源系统中&#xff0c;当反馈回路失效时&#xff0c;输出电压不受控&#xff0c;电压升高超出规定范围&#xff0c;此时过高的输出电压有可能造成后续电器设备的损坏。为解决这问题&#xff0c;通常在电源中增加过压保护电路…

神经网络学习率指数衰减ExponentialDecay策略的参数含义与使用方法详解

本文介绍在tensorflow库中&#xff0c;用于动态调整神经网络的学习率的一种方法——指数衰减ExponentialDecay()策略的参数含义及其具体用法。 在进行神经网络训练时&#xff0c;我们经常需要用到动态变化的学习率&#xff0c;其中指数衰减ExponentialDecay()策略是我们常用的一…

【鲁棒优化】具有可再生能源和储能的区域微电网的最优运行:针对不确定性的鲁棒性和非预测性解决方案(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python 类方法和静态方法】零基础也能轻松掌握的学习路线与参考资料

一、Python类方法和静态方法的概念 在Python中&#xff0c;类方法和静态方法是常见的两种方法。两者都是Python中的函数&#xff0c;可以在类和实例上调用。但是&#xff0c;它们的作用和用法有所不同。 类方法是绑定到类而不是实例的方法&#xff0c;它们可以在实例和类上运…

高性能软件负载OpenResty常用命令

目录 1 案例介绍2 中小公司的详情页方案2.1 缺点 3 大型公司的商品详情页的核心思想3.1 生成静态页3.2 推送到文件服务器3.3 布隆过滤器过滤请求3.4 lua直连Redis读取数据3.5 OpenResty 渲染数据 4 环境准备4.1 配置文件服务器4.2 配置资源反向代理4.3 访问测试 1 案例介绍 商品…

【Unity100个实用小技巧】Git报错:error: some local refs could not be updated;

☀️博客主页&#xff1a;CSDN博客主页 &#x1f4a8;本文由 我是小狼君 原创&#xff0c;首发于 CSDN&#x1f4a2; &#x1f525;学习专栏推荐&#xff1a;面试汇总 ❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏 ⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&…