基于msm8953调试CST226SE触摸TP

news2024/11/27 2:21:27

目录

1、事件驱动和设备挂载

2、adb调试节点

3、修改设备树地址

4、修改驱动地址

5、修改firmware固件参数


我们总是习惯不断的搜索,阅读前人总结和分享的经验,在不断尝试中进步,如果没有大家的分享经验,学习和探索的过程将是多么的痛苦和艰难,将心比心!将自己遇到的困难和解决方法分享,既可以记录和回顾,也可以帮助更多努力前行需要帮助的人~   

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主

https://blog.csdn.net/qq_40715266?type=lately

良好的环境除了制度的管理,还需要更多人自觉的遵守和维护!

1、事件驱动和设备挂载

通过在代码中添加驱动以及Kconfig和Makefile编译,还有deconfig和设备树dtsi配置

如果配置有误或者缺失,就会导致编译部分hynitron的驱动

:~out/target/product$ find | grep "hynitron" 
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/modules.order
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/built-in.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.built-in.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/modules.builtin

完成配置和编译后,可以直接在out目录查看是否生成了响应的 .o 驱动文件

out/target/product/$ find  | grep "hynitron"
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_proximity.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_i2c.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_core.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/modules.order
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_core.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_tool_debug.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_esd_check.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/built-in.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_gesture.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_proximity.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_update_firmware.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_tool_debug.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_esd_check.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.hynitron_i2c.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/.built-in.o.cmd
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_gesture.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_update_firmware.o
./obj/kernel/msm-3.18/drivers/input/touchscreen/hynitron/modules.builtin

之后将编译好的包下载到设备中,可以看到

adb shell getevent  显示 input 上报事件

C:\Users\fujy>adb shell

P322:/ # getevent

add device 1: /dev/input/event6

  name:     "msm8953-snd-card-internal Button Jack"

add device 7: /dev/input/event1

  name:     "hyn_ts"

adb shell ll /sys/bus/i2c/drivers  查看设备挂载

2、adb调试节点

虽然节点有了但是触摸屏幕并没有响应

daisy通过adb调试发现也没有反馈卡出了,adb 导出kernel日志查看问题

[    8.023803] i2c-msm-v2 78b7000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:0 tx:2) mode:FIFO slv_addr:0x1a MSTR_STS:0x0d1343c8 OPER:0x00000090
[    8.023900] i2c-msm-v2 78b7000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:0 tx:2) mode:FIFO slv_addr:0x1a MSTR_STS:0x091343c8 OPER:0x00000090
[    8.023996] i2c-msm-v2 78b7000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:7 tx:0) mode:FIFO slv_addr:0x1a MSTR_STS:0x0d1343c8 OPER:0x00000010
[    8.024087] i2c-msm-v2 78b7000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:7 tx:0) mode:FIFO slv_addr:0x1a MSTR_STS:0x0d1300c8 OPER:0x00000010
[    8.024112] [HYN][Error]  iic read touch point data failed.
[    8.024181] i2c-msm-v2 78b7000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:0 tx:3) mode:FIFO slv_addr:0x1a MSTR_STS:0x0d1343c8 OPER:0x00000090
[    8.024287] i2c-msm-v2 78b7000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:0 tx:3) mode:FIFO slv_addr:0x1a MSTR_STS:0x091343c8 OPER:0x00000090
[    8.024312] [HYN][Error]  send read touch info ending failed.

3、修改设备树地址

daisy查看kernel日志发现i2c读取寄存器值返回失败,与节点默认配置的i2c地址不匹配,询问fae后得知i2c地址是0x5a,修改msm8953-qrd.dtsi节点中的地址以及驱动中的地址

		hynitron@1a{ 
            compatible = "hynitron,hyn_ts"; 
            reg = <0x1a>;   
            interrupt-parent = <&tlmm>;
            interrupts = <65 0x02>;    
            hynitron,reset-gpio = <&tlmm 64 0x01>; 
            hynitron,irq-gpio = <&tlmm 65 0x02>;  
            hynitron,max-touch-number = <5>;   
            hynitron,display-coords =  <240 320>; 
            hynitron,have-key;
            hynitron,key-number = <3>; 
            hynitron,key-code = <139 172 158>;  
            hyn_cst3xx,key-y-coord = <2000 2000 2000>; 
            hyn_cst3xx,key-x-coord = <200 600 800>;
            status = "okay";
         };

4、修改驱动地址

kernel/msm-3.18/drivers/input/touchscreen/hynitron/hynitron_core.h

#define HYN_CHIP_TYPE_CONFIG				  CST226SE  //芯片型号
#define HYN_IRQ_TRIGGER_RISING_CONFIG	  0x01 
#define HYN_MAIN_IIC_ADDR_CONFIG		     0x5a    //i2c地址

#define HYN_X_DISPLAY_DEFAULT             240  //屏幕横向分辨率
#define HYN_Y_DISPLAY_DEFAULT             320  //屏幕纵向分辨率

5、修改firmware固件参数

daisy修改i2c地址后,发现固件更新失败,查看报错位置是由于没有找到匹配的project_id

[HYN][Error]not find matched TP firmware,please check chip type and chip project id. !
[HYN]hyn_find_fw_idx: Enter
[HYN][Info]hyn_find_fw_idx check_project_id:0,chip_ic_type :0xa8,chip_ic_project_id:0x4416,config_chip_type :0xa8.

 文件路径\hynitron\hynitron_update_firmware.c

int hyn_boot_update_fw(struct i2c_client * client)
{……
check_proj_id=1;
			proj_id=hyn_find_fw_idx(check_proj_id);
			HYN_INFO("hyn_find_fw_idx: proj_id:%d.\r\n",proj_id);	
			if(proj_id<0){
				HYN_ERROR("not find matched TP firmware,please check chip type and chip project id. !\n"); 
				proj_id=hyn_find_fw_idx(0);
				if(proj_id>0){
					hyn_ts_data->fw_name					   =hynitron_fw_grp[proj_id].name;
					hyn_ts_data->p_hynitron_upgrade_firmware   =hynitron_fw_grp[proj_id].fw;
					hyn_ts_data->fw_length				       =hynitron_fw_grp[proj_id].fw_length;
					HYN_INFO("update default TP firmware data for apk update.(%s)!\n", hynitron_fw_grp[proj_id].name);
				}else{
					HYN_INFO("please chekc hynitron_fw_grp fw config!\n");
					return 0;
				}
			}
……}

daisy查找报错代码,发现是有由于在匹配列表过程hynitron_fw_grp[10]没有匹配上

前面daisy修改驱动地址的位置,配置过芯片型号是CST226SE,这边依旧取CST2xxSE,把原有的 project_id; module_id改成刚才日志中打印的参数,重新完成编译

#define HYN_CHIP_TYPE_CONFIG				  CST226SE  //芯片型号
//please config the chip series before using.
struct hynitron_fw_array hynitron_fw_grp[10] = {
	//0-name; 1-fw; 2-project_id; 3-module_id; 4-chip_type; 5-fw_length;
	{ "capacitive_hynitron_cst0xx_update",   cst0xx_fw,   0x2843,0x01, CST016, (sizeof(cst0xx_fw))},	
	{ "capacitive_hynitron_cst1xx_update",   cst1xx_fw,   0x0501,0x01, CST128, (sizeof(cst1xx_fw))},
	//daisy 2023-05-05
   //{ "capacitive_hynitron_cst2xxse_update", cst2xxse_fw, 0x0501,0x01, CST226SE, (sizeof(cst2xxse_fw))},
	{ "capacitive_hynitron_cst2xxse_update", cst2xxse_fw, 0x4416,0xa8, CST226SE, (sizeof(cst2xxse_fw))},	
    { "capacitive_hynitron_cst3xx_update",   cst3xx_fw,   0x2117,0x11, CST328, (sizeof(cst3xx_fw))},
	{ "capacitive_hynitron_cst6xx_update",   cst6xx_fw,   0x2117,0x11, CST6928S, (sizeof(cst6xx_fw))},
	{ "capacitive_hynitron_cst3xxse_update", cst3xxse_fw, 0x0501,0x01, CST328SE, (sizeof(cst3xxse_fw))},
	{ "capacitive_hynitron_cst8xx_update",   cst8xx_fw,   0x0501,0x01, CST836, (sizeof(cst8xx_fw))},
  	{ "capacitive_hynitron_cst9xx_update",   cst9xx_fw,   0x2208,0x01, CST918, (sizeof(cst9xx_fw))},
};

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主

https://blog.csdn.net/qq_40715266?type=lately

良好的环境除了制度的管理,还需要更多人自觉的遵守和维护!

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

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

相关文章

基于Flask+Bootstrap+机器学习的世界杯比赛预测系统

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

云原生安全 - 构建强大的安全基石保障现代化应用

导言&#xff1a; 随着云原生技术的兴起和广泛应用&#xff0c;越来越多的企业将其应用于现代化应用开发和部署。然而&#xff0c;随之而来的安全威胁也随之增加。在这篇文章中&#xff0c;我们将探讨云原生安全的重要性&#xff0c;以及如何构建强大的安全基石来保障现代化应…

hdfs的透明加密记录

1、背景 我们知道&#xff0c;在hdfs中&#xff0c;我们的数据是以block块存储在我们的磁盘上的&#xff0c;那么默认情况下&#xff0c;它是以密文存储的&#xff0c;还是以明文存储的呢&#xff1f;如果是明文存储的&#xff0c;那么是否就不安全呢&#xff1f;那么在hdfs中…

python3 爬虫相关学习10:RE 库/ regex /regular experssion正则表达式学习

目录 1 关于&#xff1a;re / regex / regular expression 1.1 什么是正则表达式 1.2 在python中安装正则模块 1.2.1 python里一般都默认安装了 re正则模块&#xff0c;可以先查看确认下 1.2.2 如果没有安装&#xff0c;可以按照正则库regex, pip install regex 1.3 …

基于PHP的学生管理系统

前言 基于PHP的学生管理系统&#xff1b; 实现 登录、注册、学生信息、修改学生、删除学生、查询学生、添加学生等功能 &#xff1b; 环境准备 开发平台&#xff1a;PhpStrom2022.1.2 、Phpstudy_pro 数据库&#xff1a;MySQL5.7.26 技术架构 Bootstrap PHP7.3.4html5css3 项目…

SpringBoot中配置Https入门

一、生成一个https证书 我们使用Java自带的JDK管理工具keytool来生成一个免费的https证书&#xff0c;在我们的Java安装目录下&#xff0c;在bin目录下我们使用cmd启动命令行窗口,执行如下命令生成一个https证书。 keytool -genkey -alias myhttps -keyalg RSA -keysize 2048…

计算机网络 01 IP协议

01.IP协议&#xff0c;也就是IP报文。 宏观&#xff1a; 首部长度&#xff1a;由于固定部分是20B&#xff0c;所以数值最小是5。 02.IP报文&#xff0c;中的IP地址&#xff0c;常见的是IPV4&#xff0c;也就是四个字节&#xff0c;32位。 常见的IP地址有三种&#xff1a; 第一…

在 Python 中使用requests模块发布表单数据

文章目录 使用 requests 模块在 Python 中发布表单数据POST请求方式介绍在 Python 中安装 requests 模块post() 方法的应用 本篇文章介绍了 Python requests 模块&#xff0c;并说明了我们如何使用该模块在 Python 中发布表单数据。 使用 requests 模块在 Python 中发布表单数据…

由浅入深,详解ViewModel那些事

前言&#xff1a;今年的龙舟雨来了&#xff0c;一场接一场&#xff0c;雨量很大。 前言 以往如果需要在 Activity 或者 Fragment 中保存数据状态则需要重写onSaveInstanceState &#xff0c;使用bundle去存储相应的数据和状态&#xff0c;但是这也只能保存轻量简单的序列化数据…

【STM32】软件I2C

【STM32】软件I2C I2C简介 I2C总线是一种串行、半双工的总线&#xff0c;主要用于近距离、低速的芯片之间的通信。I2C总线有两根双向的信号线&#xff0c;一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟的同步。 在一个i2c通讯总线中&#xff0c;可连接…

怎么显示文件后缀名?查看文件后缀名可以这样做!

案例&#xff1a;在我的电脑上&#xff0c;看不到文件的后缀名&#xff0c;这会导致命名时出现重复文件后缀的情况&#xff0c;给我带来了不好的体验。怎么才能看到文件的后缀名呢&#xff1f;如何操作&#xff1f; 在日常使用电脑的过程中&#xff0c;我们经常需要查看文件的…

实习记录(二)Java常用工具库

一.Lombok 1.背景概述 Lombok是一个非常高效的专用于Java的自动构建插件库&#xff0c;其简化了 JavaBean 的编写&#xff0c;避免了冗余和样板式代码的出现&#xff0c;让编写的类更加简洁明了&#xff0c;可以帮助大家节省很多重复低效的代码编写。比如重复性的Setter、Gett…

【c语言】五道经典练习题④

目录 ①、年月日经过n天后的日期 ②、坐标排序 ③、统计文件中出现某个单词的次数 ④、输出含for的行 ⑤、比较两个文本是否相等 ①、年月日经过n天后的日期 题述&#xff1a;定义包含年月日表示的日期的结构体&#xff0c;写程序实现计算某年某月某日过n天后的日期是哪年…

肠道细菌阻碍阿卡波糖的降血糖作用

我们知道&#xff0c;口服抗糖尿病药是治疗糖尿病的有效方式之一。然而&#xff0c;患者对抗糖尿病药的反应程度各不相同&#xff0c;例如&#xff0c;有些患者在长期使用阿卡波糖后会产生耐药性。 阿卡波糖通常在饭前口服。它抑制人α-葡萄糖苷酶达到降血糖作用&#xff0c;包…

GWO-VMD-近似熵-极限学习机的轴承故障诊断软件,以西储大学轴承数据为例,采用MATLABAPP开发

采用灰狼算法优化VMD两个参数&#xff0c;以包络熵为最小适应度值&#xff0c;在最佳参数下提取采用近似熵指标提取西储大学轴承数据的特征向量&#xff0c;最后选用极限学习机ELM进行故障诊断。将以上程序集成在MATLABAPP进行开发。 首先是这个软件的各个界面展示。 软件启动…

云安全技术(四)之云计算安全的设计原则

计算安全的设计原则 Understand Design Principles of Secure Cloud Computing 1.1 云安全数据生命周期 Cloud secure data lifecycle 数据始终是安全保护的首要问题。必须深刻了解数据生命周期&#xff0c;以便正确制定和遵守安全策略&#xff0c;把握正确的步骤顺序&#xf…

万博智云与品高股份完成产品兼容性互认证,持续助力国产化生态建设

近日&#xff0c;万博智云的HyperBDR云容灾软件与广州市品高股份有限公司&#xff08;简称&#xff1a;品高股份&#xff09;旗下产品品高基础架构云资源管理软件V9.0完成了产品兼容性认证。 经万博智云和品高云双方人员的共同测试&#xff0c;得出结论&#xff1a; HyperBDR…

【C/C++数据结构与算法】C语言链表

目录 一、单链表 二、双向循环链表 三、判断链表是否带环 四、链表的回文结构判断 五、复制带随机指针的链表 一、单链表 优点&#xff1a;头部增删效率高&#xff0c;动态存储无空间浪费 缺点&#xff1a;尾部增删、遍历效率低&#xff0c;不支持随机访问节点 头结点&…

【夜深人静学习数据结构与算法 | 第六篇】贪心算法

目录 前言&#xff1a; 引入: 贪心算法&#xff1a; 455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 376. 摆动序列 - 力扣&#xff08;LeetCode&#xff09; 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 122. 买卖股票的最佳时机 II - 力扣&a…

【Python 随练】统计字符类型个数

题目&#xff1a; 输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个字符统计问题&#xff1a;输入一行字符&#xff0c;统计其中英文字母、空格、数字和其他字符的个数。我们将提供…