linux系统TP-ti,tsc2046外设调试
一、整体调试思路
tp外设属于比较常见且比较简单的外设,今天以ti,tsc2046这款为例简述下tp外设的调试。
 整体思路
 1、配置设备树----驱动调试的device部分
 2、tp驱动编译及匹配—driver部分
 3、驱动整体调试
二、配置设备树
对于ti,tsc2046我们可以参考内核Documentation/devicetree/bindings/input/ads7846.txt
 内核文档还是讲的比较详细,必选参数可选参数以及各个参数的含义都有讲到,可以参考。
Device tree bindings for TI's ADS7843, ADS7845, ADS7846, ADS7873, TSC2046
SPI driven touch screen controllers.The node for this driver must be a child node of a SPI controller, hence
all mandatory properties described inDocumentation/devicetree/bindings/spi/spi-bus.txtmust be specified.Additional required properties:compatible		Must be one of the following, depending on themodel:"ti,tsc2046""ti,ads7843""ti,ads7845""ti,ads7846""ti,ads7873"interrupt-parentinterrupts		An interrupt node describing the IRQ line the chip's!PENIRQ pin is connected to.vcc-supply		A regulator node for the supply voltage.Optional properties:ti,vref-delay-usecs		vref supply delay in usecs, 0 forexternal vref (u16).ti,vref-mv			The VREF voltage, in millivolts (u16).Set to 0 to use internal references(ADS7846).ti,keep-vref-on			set to keep vref on for differentialmeasurements as wellti,swap-xy			swap x and y axisti,settle-delay-usec		Settling time of the analog signals;a function of Vcc and the capacitanceon the X/Y drivers.  If set to non-zero,two samples are taken with settle_delayus apart, and the second one is used.~150 uSec with 0.01uF caps (u16).ti,penirq-recheck-delay-usecs	If set to non-zero, after samples aretaken this delay is applied and penirqis rechecked, to help avoid falseevents.  This value is affected by thematerial used to build the touch layer(u16).ti,x-plate-ohms			Resistance of the X-plate,in Ohms (u16).ti,y-plate-ohms			Resistance of the Y-plate,in Ohms (u16).ti,x-min			Minimum value on the X axis (u16).ti,y-min			Minimum value on the Y axis (u16).ti,x-max			Maximum value on the X axis (u16).ti,y-max			Minimum value on the Y axis (u16).ti,pressure-min			Minimum reported pressure value(threshold) - u16.ti,pressure-max			Maximum reported pressure value (u16).ti,debounce-max			Max number of additional readings persample (u16).ti,debounce-tol			Tolerance used for filtering (u16).ti,debounce-rep			Additional consecutive good readingsrequired after the first two (u16).ti,pendown-gpio-debounce	Platform specific debounce time for thependown-gpio (u32).pendown-gpio			GPIO handle describing the pin the !PENIRQline is connected to.wakeup-source			use any event on touchscreen as wakeup event.(Legacy property support: "linux,wakeup")Example for a TSC2046 chip connected to an McSPI controller of an OMAP SoC::spi_controller {tsc2046@0 {reg = <0>;	/* CS0 */compatible = "ti,tsc2046";interrupt-parent = <&gpio1>;interrupts = <8 0>;	/* BOOT6 / GPIO 8 */spi-max-frequency = <1000000>;pendown-gpio = <&gpio1 8 0>;vcc-supply = <®_vcc3>;ti,x-min = /bits/ 16 <0>;ti,x-max = /bits/ 16 <8000>;ti,y-min = /bits/ 16 <0>;ti,y-max = /bits/ 16 <4800>;ti,x-plate-ohms = /bits/ 16 <40>;ti,pressure-max = /bits/ 16 <255>;wakeup-source;};};这里需要注意的是,这是一款SPI总线的TP,所以对应设备树节点必选在SPI设备树目录下,如下图:
	spi_1: spi@78b5000 { compatible = "qcom,spi-qup-v2";#address-cells = <1>;#size-cells = <0>;reg-names = "spi_physical", "spi_bam_physical";reg = <0x78b5000 0x600>,<0x7884000 0x2b000>;interrupt-names = "spi_irq", "spi_bam_irq";interrupts = <0 95 0>, <0 238 0>;spi-max-frequency = <19200000>;pinctrl-names = "spi_default", "spi_sleep";pinctrl-0 = <&spi1_default &spi1_cs0_active>;pinctrl-1 = <&spi1_sleep &spi1_cs0_sleep>;clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,<&clock_gcc clk_gcc_blsp1_qup1_spi_apps_clk>;clock-names = "iface_clk", "core_clk";qcom,infinite-mode = <0>;qcom,use-bam;qcom,use-pinctrl;qcom,ver-reg-exists;qcom,bam-consumer-pipe-index = <12>;qcom,bam-producer-pipe-index = <13>;qcom,master-id = <86>;tsc2046@0 {reg = <0>;	/* CS0 */compatible = "ti,tsc2046";interrupt-parent = <&tlmm_pinmux>;interrupts = <29 0x2>;	/* GPIO 29 */spi-max-frequency = <2000000>;pendown-gpio = <&tlmm_pinmux 29 0x02>;//vcc-supply = <®_vcc3>;ti,x-min = /bits/ 16 <0>;ti,x-max = /bits/ 16 <8000>;ti,y-min = /bits/ 16 <0>;ti,y-max = /bits/ 16 <4800>;ti,x-plate-ohms = /bits/ 16 <40>;ti,pressure-max = /bits/ 16 <255>;wakeup-source;};};
三、tp驱动编译及匹配
我们使用的驱动为内核原生驱动drivers/input/touchscreen/ads7846.c。
 关于编译的问题我们需要从ads7846.c所在目录一层一层往上去看Makefile文件,保证ads7846.c参与到编译中来,我们注意到需要打开2个宏才可以,如下图:
CONFIG_TOUCHSCREEN_ADS7846=y
CONFIG_INPUT_TOUCHSCREEN=y
不同平台内核宏配置文件位置不一样,但是编译之后顶层会生成.config文件,我们可以查看对应的宏是否有修改,另外可以看编译目录有没有ads7846.o这些都是一些辅助判断技巧。
 另外关于匹配问题我们可以看到驱动文件与设备树都函数compatible = “ti,tsc2046”,所以理论上只要SPI没有问题(SPI是基础),就会正常匹配,我们也可以在驱动文件probe函数中添加打印以辅助判断或者阅读代码通过驱动文件所建立的节点以及对应打印进行判断。
四、驱动整体调试
经过上面几步,如果一帆风顺的话可以看到/dev/input下面会产生新的event节点,使用手指点击TP,然后查看有无数值变化,如下图我们点击发现event可以正常上报且有变化产生,证明驱动整体是ok。
 
 驱动我们使用原生的,很多参数可能需要根据实际tp厂商的进行调整及优化,另外刚才也说了一帆风顺的时候可以走到第4步,大概率第一步是走不到第4步的,我们需要排查的重点有以下几点:
 1、tp硬件是否ok
 2、平台的spi是否ok,使用示波器配合spi测试程序验证总线是否有clk
 3、tp的中断是否可以正常收到
 4、软件层面节点是否出来,驱动probe是否正常完整的处理完
 5、有节点但是上报不对,说明驱动匹配基本没有问题大概率还是1~3的问题,继续重点排查。
相关文章:
 
linux系统TP-ti,tsc2046外设调试
一、整体调试思路 tp外设属于比较常见且比较简单的外设,今天以ti,tsc2046这款为例简述下tp外设的调试。 整体思路 1、配置设备树----驱动调试的device部分 2、tp驱动编译及匹配—driver部分 3、驱动整体调试 二、配置设备树 对于ti,tsc2046我们可以参考内核Docum…...
ChatGPT指令大全
1. 写报告:我现在正在 [报告的情境与目的]。我的简报主题是 [主题],请提供 [数字] 种开头方式,要简单到 [目标族群] 能听懂,同时要足够能吸引人,让他们愿意专心听下去。 2. 研究报告:写出一篇有关 [知识] …...
 
【Vue面试题】Vue2.x生命周期?
文章目录 1.有哪些生命周期(系统自带)?beforeCreate( 创建前 )created ( 创建后)beforeMount (挂载前)mount (挂载后)beforeUpdate (更新前)updated (更新后)beforeDestroy(销毁前)destroy(销毁后…...
 
运算放大器 - 笔记 02 -恒流源
恒流源 / 电流源 一、方案一二、方案二三、方案三四、方案四 前言:最近在学习运放,三极管,二极管,场效应管等器件的组合电路。捡起了以前的模电知识,写下笔记,以防再度忘记。 本文使用Multisim仿真软件进行…...
 
Python:Python进阶:Python字符串驻留技术
Python字符串驻留技术 1.什么是字符串驻留2. 为什么要驻留字符串3. Python的字符串驻留4. Python 字符驻留原理4.1 如何驻留字符串4.2 如何清理驻留的字符串 5. 字符串驻留的实现5.1. 变量、常量与函数名5.2 字典的键5.3 任何对象的属性5.4 显式地驻留 6 字符串驻留的其他发现 …...
 
2022年 全国职业院校技能大赛(中职组)网络安全赛项 正式赛卷 A模块 做题记录
评分标准文件及环境 评分标准:ZZ-2022029 网络安全赛项正式赛卷.zip 自己做的Linux靶机: 自己做的Windows靶机: 文章目录 评分标准文件及环境A-1 任务一 登录安全加固1. 密码策略(Windows,Linux)a. 最小密…...
华为OD机试 - 优选核酸检测点(Python)
题目描述 张三要去外地出差,需要做核酸,需要在指定时间点前做完核酸,请帮他找到满足条件的核酸检测点。 给出一组核酸检测点的距离和每个核酸检测点当前的人数给出张三要去做核酸的出发时间 出发时间是10分钟的倍数,同时给出张三做核酸的最晚结束时间题目中给出的距离是整…...
 
windows怎么把包含某个关键词的文件移动到一个文件夹中
文章目录 windows怎么把包含某个关键词的文件移动到一个文件夹中问题来源省流版本操作过程具体问题方法一:使用cmd终端解决方法二:使用python脚本 总结 windows怎么把包含某个关键词的文件移动到一个文件夹中 问题来源 今天想移动window文件࿰…...
 
Unity 后处理(Post-Processing) -- (2)创建后处理配置文件
通过前面一小节,我们初步认识了后处理是什么,在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件(post-processing profile)。 一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配…...
 
BI 商业智能和报表,傻傻分不清楚?一文给你讲透
我们经常所听到的大数据、商业智能BI、数据分析、数据挖掘等我们都统称为数据信息化。数据信息化可以帮助企业全面的了解企业的经营管理,从经验驱动到数据驱动,降低情绪、心理等主观影响,形成以数据为基础的业务决策支撑,提高决策…...
CSS布局基础(传统布局小结)
传统布局小结 传统布局方式标准流浮动流定位伪类元素CSS应用对象应用到自身应用到其他元素 传统布局方式 传统布局采用 标准流 浮动流 定位的方式实现布局效果,也就是通常所说的 DIV CSS 布局。 标准流 标准流中的元素在 页面默认的 维度,块级元素…...
 
【五一创作】Qt quick基础1(包含基本元素Text Image Rectangle的使用)
Qt quick基础1(包含基本元素Text Image Rectangle的使用) 目录 Qt quick基础1(包含基本元素Text Image Rectangle的使用)前言qt中有直接设计ui的拖拽式的widget,为什么还需要Qtquick?QML语言Qt 版本创建一个Qt quick项…...
 
LVS+Keepalived 高可用群集部署
一、LVSKeepalived 高可用群集 在这个高度信息化的 IT 时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的…...
 
小黑子—Java从入门到入土过程:第八章
Java零基础入门8.0 Java系列第八章1. 双列集合 Map1.1 Map 集合中常见的API1.2 Map 集合的遍历方式1.2 - I 第一种遍历方式:键找值KeySet 方法1.2 - II 第二种遍历方式:键值对 entrySet 方法1.2 - III 第三种遍历方式:lambda表达式 1.3 HashM…...
innodb_flush_log_at_trx_commit 和 sync_binlog 参数解析
这两个参数和MySQL的一致性以及性能相关,默认配置大多数情况下不是最优的。一般来说,互联网线上系统的配置: innodb_flush_log_at_trx_commit —— 0 sync_binlog —— 1000 一、innodb_flush_log_at_trx_commit 事务提交刷盘时机 如果我…...
 
hd debug - DAPLink的资料
文章目录 DAPLink的资料概述笔记库迁出的技巧END DAPLink的资料 概述 查资料时, 看到有DAPLink的资料, 记录一下. 笔记 DAPLink项目分为软件和硬件2部分, 不在一个库中. 总览 : https://daplink.io/ 这个页面上说了软件和硬件项目的库地址. 软件库地址 : https://github.…...
Android adb常用50条命令
1. adb devices - 列出所有连接的 Android 设备及模拟器 2. adb shell - 启动 Android 设备或模拟器的 shell 终端 3. adb install - 安装 APK 文件 4. adb uninstall - 卸载 APK 文件 5. adb logcat - 查看日志输出信息,用于调试应用 6. adb push - 将文件推送到 Andro…...
 
【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Visual Studio高效调试手段与调试技巧总结
目录 1、对0xCCCCCCCC、0xCDCDCDCD和0xFEEEFEEE等常见异常值的辨识度 2、在Debug下遇到报错弹框,点击重试,查看函数调用堆栈...
Day37 Map集合
Map集合 Map集合是接口,interface Map <K , V> K:键的类型; V:值的类型 将键映射到值得对象;不能包含重复的键;每个键可以映射到最多一个值。例如:001 令狐冲 ; 002 岳不群 ; …...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
 
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
 
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
 
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
 
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
 
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
 
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
