当前位置: 首页 > article >正文

RK3588 android12 适配 ilitek i2c接口TP

一,Ilitek 触摸屏简介

Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。
这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。

Ilitek 的触摸屏控制器监测屏幕上的触摸事件。
当触摸发生时,控制器将触摸坐标(通常是 x 和 y 坐标)通过 I2C 总线发送给主机。


二,驱动移植

1. 设备树配置

查看原理图TP是挂在i2c5节点下:

&i2c5 {ilitek: ilitek@41 {compatible = "tchip,ilitek";reg = <0x41>;          //I2C设备地址pinctrl-names = "default";pinctrl-0 = <&ilitek_touch_gpio>;ilitek,irq-gpio = <&gpio3 RK_PC0 IRQ_TYPE_LEVEL_LOW>;   //使能引脚ilitek,reset-gpio = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;   //中断引脚status = "okay";};
};&pinctrl {ilitek-touch {ilitek_touch_gpio: ilitek-touch-gpio {rockchip,pins =<3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>,<3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_up>;};};
};

注:一定要对应的I2C bus节点(硬件原理图上会有标注)。

2. 驱动文件配置

a. 拷贝驱动文件


各个文件说明如下:

ilitek_ts.h:驱动头文件,包含驱动中要用到的一些头文件以及宏和函数的声明等。
ilitek_platform_init.c:平台加载初始化需要的文件。
ilitek_main.c:驱动主文件,完成probe的具体实现,GPIO注册、读取TP信息、注册输入设备信息,报点,休眠唤醒处理等。
ilitek_update.c:驱动升级IC固件功能的具体实现。
ilitek_tool.c:用于支持TouchUtility apk 以及创建用命令升级固件、sensor test、查看固件版本的设备节点,以及一些调试命令的使用等等。
ilitek_protocol.c:共用的函数与ilitek protocol等。
ilitek_mp.c:用于sensor test功能。

驱动下载链接:https://download.csdn.net/download/weixin_45639314/90592022

将以上驱动文件( ilitek)拷贝到如下目录:

kernel-5.10/drivers/input/touchscreen/
b. 修改Makefile以及Kconfig
kernel-5.10/drivers/input/touchscreen/Makefile中添加:
obj-$(CONFIG_TOUCHSCREEN_ILITEK)     += ilitek/-------------------------------------------------------
kernel-5.10/drivers/input/touchscreen/Kconfig中添加:
config TOUCHSCREEN_ILITEKtristate "ILITEK touchscreens matched with screen support for rockchip platform"depends on I2C && ARCH_ROCKCHIPhelpSay Y here if you have a touchscreen interface using the ILITEKtouchscreen chip on Rockchip platform, and your board-specificinitialization code includes that in its table of IIC devices.If unsure, say N.
c. 内核中加载驱动
kernel-5.10/arch/arm64/configs/rockchip_defconfig中添加:
CONFIG_TOUCHSCREEN_ILITEK=y

添加结束后单编内核即可。


三,部分驱动代码解析

int ilitek_power_on(bool status)
当定义了 ILITEK_ENABLE_REGULATOR_POWER_ON 宏时才有具体实现,对应的 ilitek_data->vdd ilitek_data->vdd_i2c 需在平台初始化代码中实现。若采用其他供电方式,需根据具体方式修改。

int ilitek_get_gpio_num(void)
用于获取 reset 和 irq GPIO 编号。若无需动态获取,需直接定义ILITEK_RESET_GPIOILITEK_IRQ_GPIO 为固定值。

int ilitek_request_gpio(void)
申请 GPIO 资源。若申请失败,会先释放再重试一次。成功后会将 reset 设置为输出高电平,irq 设置为输入模式。GPIO 操作需以具体平台接口为准。

复位函数(reset)
参数 delay 表示从拉低到拉高后的延时时间,需大于 IC 的初始化时间。

void ilitek_reset(int delay) {tp_log_info("delay = %d\n", delay);if (ilitek_data->reset_gpio > 0) {#if ILITEK_PLAT != ILITEK_PLAT_MTKgpio_direction_output(ilitek_data->reset_gpio, 1);mdelay(10);gpio_direction_output(ilitek_data->reset_gpio, 0);mdelay(10);gpio_direction_output(ilitek_data->reset_gpio, 1);mdelay(delay);#elsetpd_gpio_output(ilitek_data->reset_gpio, 1);mdelay(10);tpd_gpio_output(ilitek_data->reset_gpio, 0);mdelay(10);tpd_gpio_output(ilitek_data->reset_gpio, 1);mdelay(delay);#endif} else {tp_log_err("reset pin is invalid\n");}return;
}

int ilitek_read_tp_info(void)

  1. 检测到 IC 型号为 ILI2511 时,会将 ilitek_repeat_start 置为 false。

  2. 对于大尺寸 IC,若通过 0xC0 命令读到数据 0x55(即 Bootloader 模式),会强制设置升级标志 ilitek_data->force_update

  3. 按键信息数组 keyinfo 默认大小为 10,若按键数超过 10,需在struct ilitek_ts_data中修改 keyinfo 的容量。

static int ilitek_request_irq(void)

#if ILITEK_PLAT != ILITEK_PLAT_MTKilitek_data->client->irq = gpio_to_irq(ilitek_data->irq_gpio);
#elsenode = of_find_matching_node(NULL, touch_of_match);if (node) {ilitek_data->client->irq = irq_of_parse_and_map(node, 0);}
#endif

注意:中断号(IRQ)的获取方式需适配平台。若平台对 IRQ 有特殊配置,需修改此处以确保获取正确的中断号。


四,调试

a. 驱动无法进入 probe 函数

  1. 使用 board file 方式注册

检查 ILITEK_TS_NAME 与注册的 I2C 设备名称是否完全一致,必须匹配才能正确加载驱动。

  1. 使用 DTS(Device Tree)方式注册

检查 .of_match_table = ilitek_touch_match_table 中的 compatible 字符串是否与 DTS 中定义的 compatible 完全匹配,否则驱动无法正确绑定设备。

b. 通信不通

  1. 软件问题

确保 I2C 总线号和设备地址配置正确,这两项直接影响通信。
本文使用到的I2C总线号(I2C5)和设备地址(0x41),具体以实际硬件为主。

  1. 硬件问题

检查 IC **供电(VDD/VDD_I2C)**是否正常,确保电源稳定。
抓取 I2C 波形,确认是否符合通信协议(如 START/STOP 信号、ACK/NACK 响应)。
尝试移除同一 I2C 总线上的其他设备,排除总线冲突。

c. 报点问题

  1. 有触摸效果,但坐标映射错误

X、Y 轴需要交换
修改 ILITEK_ROTATE_FLAG 的值(0 ↔ 1)。

X/Y 轴需要镜像翻转(最大值变最小值)
调整 ILITEK_REVERT_X 或 ILITEK_REVERT_Y 的值(0 ↔ 1)。

使用显示屏分辨率
启用宏 #define ILITEK_USE_LCM_RESOLUTION,并正确设置 TOUCH_SCREEN_X_MAX 和 TOUCH_SCREEN_Y_MAX。

  1. 触摸无反应

中断问题

确认中断是否注册成功,检查 中断号 是否正确。

数据解析问题

通过日志确认触摸时是否有中断触发:
若有中断但无坐标,检查 ilitek_read_data_and_report_2120 或 ilitek_read_data_and_report_3XX 函数,打印原始数据确认是否有效。

硬件信号问题

抓取 INT 引脚波形,确认触摸时是否有正常的拉高/拉低动作。

相关文章:

RK3588 android12 适配 ilitek i2c接口TP

一&#xff0c;Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器&#xff0c;如 ILI6480、ILI9341 等&#xff0c;采用 I2C 接口。 这些控制器能够支持多点触控&#xff0c;并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&a…...

安装vllm

ubuntu 22.04, RTX3080, cuda 12.1, cudnn 8.9.7&#xff0c;cuda和cudnn的安装参考&#xff1a;https://blog.csdn.net/m0_52111823/article/details/147154526?spm1001.2014.3001.5501。 查看版本对应关系&#xff0c;下载12.1对应的whl包&#xff0c;https://github.com/vl…...

利用安固软件实现电脑屏幕录像:四种实用方法分享

在日常工作中&#xff0c;有时我们需要录制电脑屏幕以进行教学演示、软件操作记录或重要会议的存档。安固软件终端安全管理系统提供了强大的屏幕录像功能&#xff0c;可以满足这些需求。 接下来&#xff0c;本文将介绍如何使用安固软件设置电脑实时画面录像&#xff0c;并分享…...

[Effective C++]条款30:透彻了解inlining的里里外外

. 1、内联函数 inline内联函数的设计是为了消除函数调用的开销&#xff0c;在编译期间由编译器将函数体插入到每个调用点&#xff0c;来避免常规函数调用时的压栈、跳转和返回等操作&#xff0c;减少函数调用的时间开销。 1.1、内联函数作用 减少函数调用开销&#xff1a; 消…...

CExercise_10_2动态内存分配_1从键盘输入输入中读取一个整数n,动态分配一个长度为n的整型数组。

题目&#xff1a; 编写程序&#xff0c;从键盘输入输入中读取一个整数n&#xff0c;动态分配一个长度为n的整型数组。 将数组元素初始化为1, 2, 3, …, n&#xff0c;并输出打印数组内容&#xff0c;最后释放内存。 注意: 初始化内存块时可以直接使用下标来操作内存块。 遍历打…...

这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件

这种情况是应为VScode的版本太新了&#xff0c;更新到1.86版本后要求远程连接服务器的内核版本不符合条件 解决方法 vscode降级&#xff0c;使用1.86以前的版本。亲测这种方法成功解决 首先关闭VSCode自动更新 Windows下载1.85版本链接&#xff1a;https://update.code.visua…...

文件IO7(中文字库的原理与应用/目录检索原理与应用/并发编程的原理与应用)

中文字库的原理与应用 ⦁ 基本概念 一般在项目中都会显示汉字&#xff0c;都采用中文简体字符集&#xff0c;计算机早期只有ANSI组织设计的ANSII码&#xff0c;其实也属于字符集&#xff0c;这套字符集并未收录中文&#xff0c;只收录256个字符。 所以后期中国国家标准总局设…...

基于SpringBoot的智慧社区管理系统(源码+数据库)

499基于SpringBoot的智慧社区管理系统&#xff0c;系统包含三种角色&#xff1a;管理员、用户主要功能如下。 【用户功能】 1. 首页&#xff1a;查看系统。 2. 超市商品&#xff1a;浏览超市中各类商品信息。 3. 动物信息&#xff1a;了解社区内的动物种类和相关信息。 4. 车位…...

OpenCV 伪彩色处理

伪彩色处理是将灰度图像通过颜色映射转换为彩色图像的技术&#xff0c;常用于增强可视化效果或突出显示特定灰度范围。OpenCV 提供了多种方法实现伪彩色处理。 1. 使用 applyColorMap 函数 OpenCV 提供了 cv::applyColorMap() 函数&#xff0c;支持多种预定义的色彩映射&…...

ADI 算法,ADAU1452算法

MCU控制DSP的公式...

低代码控件开发平台:飞帆中粘贴富文本的控件

效果&#xff1a; 链接&#xff1a; https://fvi.cn/729...

ICRA-2025 | 视觉预测助力机器人自主导航!NavigateDiff:视觉引导的零样本导航助理

论文&#xff1a;Yiran Qin 1 , 2 ^{1,2} 1,2, Ao Sun 2 ^{2} 2, Yuze Hong 2 ^{2} 2, Benyou Wang 2 ^{2} 2, Ruimao Zhang 1 ^{1} 1单位&#xff1a; 1 ^{1} 1中山大学&#xff0c; 2 ^{2} 2香港中文大学深圳校区论文标题&#xff1a;NavigateDiff: Visual Predictors are Ze…...

[问题帖] vscode 重启远程终端

原理 有的时候&#xff0c;在vscode 远程ssh连接到服务器的时候&#xff0c;可能遇到需要重启终端才能生效的配置&#xff0c;比如add group的时候&#xff0c;而此时无论你是关闭vscode终端重启&#xff0c;还是reload窗口都是没用的。 因为不管你本地是否连接了远程的vscode服…...

2025年前端框架全景解析:React、Vue、Angular的生态与未来之争

一、市场格局:全球与国内的双重差异12 全球市场React:凭借Facebook的支持和庞大的社区,全球使用率超40%,尤其在数据密集型应用(如金融、社交平台)中占据主导。其跨平台能力(React Native)和灵活生态(Next.js、Redux)是核心竞争力。Vue:亚洲市场占比显著,中国开发者…...

【Linux】Orin NX编译 linux 内核及内核模块

1、下载交叉编译工具:gcc 1)下载地址:https://developer.nvidia.com/embedded/jetson-linux 选择TOOLS中的交叉编译工具:gcc 11.3 2)解压 将gcc编译器解压到指定目录中,如:/home/laoer/nvidia/gcc 3)配置环境变量 创建: ~/nvidia/gcc/env.sh添加: #!/bin/bash e…...

Java 读取 csv 文件

1、引入 maven 依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.9.0</version> </dependency>2、java 代码 /*** csv 内容解析** param filePath 文件路径* para…...

蓝桥杯考前复盘

明天就是考试了&#xff0c;适当的停下刷题的步伐。 静静回望、思考、总结一下&#xff0c;我走过的步伐。 考试不是结束&#xff0c;他只是检测这一段时间学习成果的工具。 该继续走的路&#xff0c;还是要继续走的。 只是最近&#xff0c;我偶尔会感到迷惘&#xff0c;看…...

【C++经典例题】字符串转整数(atoi)的实现与解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;C经典例题 期待您的关注 目录 一、问题描述 二、解题思路 三、代码实现 四、代码逻辑详解 1. 变量初始化 2. 忽略前导空格 …...

Java面试黄金宝典44

1. 查看进程的运行堆栈信息命令 gstack gstack 是 Linux 系统下用于查看指定进程运行时堆栈信息的工具。当程序出现崩溃、死锁或者性能瓶颈等问题时,借助 gstack 可以查看进程中各个线程的调用栈,从而辅助开发人员定位问题。 定义 gstack 本质上是一个封装了底层 ptrace 系统…...

批量统一图像色彩

图嗯&#xff0c;用户之前问过如何批量统一多张图片的色调&#xff0c;我给出了几种方法&#xff0c;包括Photoshop、Lightroom、GIMP、在线工具和AI工具。现在用户进一步说明&#xff0c;他有一张红蓝色的图&#xff0c;其他几张是各种颜色&#xff0c;想用代码或AI批量将它们…...

数据库数据恢复——sql server数据库被加密怎么恢复数据?

SQL server数据库数据故障&#xff1a; SQL server数据库被加密&#xff0c;无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密&#xff0c;文件名字被篡改。 SQL server数据库数据恢复过程&#xff1a; 1、将所有数据库做完整只读备份。后续所有数据恢…...

蓝桥杯C++组部分填空题

P1508 - [蓝桥杯2020初赛] 门牌制作 - New Online Judge #include<bits/stdc.h> using namespace std;int main() {int res 0;for(int i 1; i < 2020; i){int num i;while(num){if(num % 10 2) res;num/10;}}cout<<res;return 0; } 624 P1509 - [蓝桥杯20…...

C# 组件的使用方法

类 Stopwatch 计算时间 Stopwatch sw new Stopwatch(); sw.Start(); // 要执行的代码块 Thread.Sleep(2000);sw.ElapsedMilliseconds // 消耗时间 Console.WriteLine(sw.ElapsedMilliseconds);组件 ListView 属性设置 外观 - View - Details 行为 - Columns -&#xff08;…...

Python 装饰器(Decorator)

文章目录 代码解析1. 装饰器定义 timer(func)2. 应用装饰器 timer **执行流程****关键点****实际应用场景****改进版本&#xff08;带 functools.wraps&#xff09;** 这是一个 Python 装饰器&#xff08;Decorator&#xff09; 的示例&#xff0c;用于测量函数的执行时间。下…...

QCustomPlot频谱图

使用QCutomPlot做的读取txt文件显示频谱图的demo,帮助大家了解QCustomPlot的基本使用 1.运行结果 demo比较简单,用于文件读取,鼠标放大缩小,右键截图等基础功能. 2.绘图详解 绘图核心是将类提升为QCustomPlot之后进行重绘,重绘之前设计图表曲线,图标标题,坐标轴,坐标轴范围,背…...

高并发的业务场景下,如何防止数据库事务死锁

一、 一致的锁定顺序 定义: 死锁的常见原因之一是不同的事务以不同的顺序获取锁。当多个事务获取了不同资源的锁,并且这些资源之间发生了互相依赖,就会形成死锁。 解决方法: 确保所有的事务在获取多个锁时,按照相同的顺序请求锁。例如,如果事务A需要锁定表A和表B,事务…...

【Grok 大模型深度解析】第二期:架构探秘与训练哲学

在上一期的内容中,我们对 Grok 大模型从技术溯源的角度,了解了它从 Transformer 架构局限性出发,迈向混合架构创新的历程,同时也梳理了从 Grok - 1 到 Grok - 3 的版本迭代所带来的技术跃迁以及其独特的差异化优势。这一期,我们将深入到 Grok 大模型的架构内部,探究其精妙…...

Spring Boot(九十):集成SSE (Server-Sent Events) 服务器实时推送

1 SSE简介 Server-sent Events(SSE) 是一种基于 HTTP 协议的服务器推送技术,它允许服务器主动向客户端发送数据。与 WebSocket 不同,SSE 是单向通信,即服务器可以主动向客户端推送数据,而客户端只能接收数据。 2 SSE特点 单向通信:SSE 是服务器向客户端的单向推送,客户…...

2025第四届大学生算法挑战赛(进阶训练1) A-E 题解报告

前言 这是第四届大学生算法挑战赛的练习赛系列&#xff0c;这个比赛是国家一级协会的。 这章是进阶训练1的A-E题&#xff0c;感觉还是蛮基础的。 题解 第四届大学生算法挑战赛 进阶训练1 A. 小理养鱼 思路: 博弈 斐波那契数组 省流描述: 经典的羊狼博弈&#xff0c;即1只…...

P8668 [蓝桥杯 2018 省 B] 螺旋折线

题目 思路 一眼找规律题&#xff0c;都 1 0 9 10^9 109说明枚举必然超时&#xff0c;找规律&#xff0c;每个点找好像没有什么规律&#xff0c;尝试找一下特殊点&#xff0c;比如&#xff1a;对角线上的点 4 16 36(右上角&#xff09; 4k^2&#xff0c;看在第几层&#xff08;…...