在 KP1202 Android 平板项目中,EMR 电磁笔与电容式触摸屏(TP)存在严重的电磁干扰问题,导致用户在使用电磁笔时触摸屏出现失灵、误触、延迟响应等异常现象,严重影响产品的用户体验。
[MTK]EMR(电磁笔)干扰触摸屏(TP)的问题与解决方案
📋 问题概述
在 KP1202 Android 平板项目中,EMR 电磁笔与电容式触摸屏(TP)存在严重的电磁干扰问题,导致用户在使用电磁笔时触摸屏出现失灵、误触、延迟响应等异常现象,严重影响产品的用户体验。
问题现象
主要表现:
- 触摸屏无响应或长时间不上报触摸事件(TP 不产生正常的 up/down 事件)
- 触控数据被 EMR 干扰,导致并发状态错误
- 出现触控错位、错按或连续重复点击
- EMR 笔工作时,手指触摸操作被屏蔽或延迟 复现步骤:
打开平板,进入待机或应用界面
让 EMR 电磁笔靠近屏幕或在屏幕上书写
同时或随后使用手指触摸屏幕
通过 adb logcat 或 evtest 观察触摸事件异常或丢失
🔍 原因分析
1. EMR 与电容式 TP 的工作机制冲突
EMR 电磁笔工作原理:
-
通过感应笔尖处的电磁场产生信号
-
由笔端或绑定的感应电路与触摸控制器交互
-
EMR 模式下,笔会产生高频/近场电磁信号 电容式触摸屏工作原理:
-
通过电容变化检测接触与接近
-
当 EMR 产生高强度近场电磁干扰时,会在触摸控制器的采样/滤波电路中引入伪信号
-
占用触控资源,导致误判或使触控采样失效
2. 干扰机制详解
信号层面:
-
EMR 使 TP 输出的触摸帧内出现异常数据
-
触控固件未能及时释放(
up)或产生连锁冲突 -
导致上层驱动继续认为触摸仍在发生,从而屏蔽或忽略后续正常触摸 软件层面:
-
EMR 状态与 TP 的互斥/优先级机制未实现或不完善
-
两者同时上报时,触控驱动没有强制释放/同步机制
-
造成并发冲突,触控事件处理混乱
3. 关键影响因素
硬件/固件层面:
- 滤波/灵敏度: TP 固件的灵敏度、滤波阈值、Debounce、Palm/Glove 策略影响对 EMR 的容忍度
- 互斥协议: EMR 驱动与 TP 驱动之间缺少共享状态(mutex/pen_state)与强制
touch up能力 - 显示时序: LCM 时序(VFP、PLL 等)会改变显示驱动与触控扫描时序的相对位置,可能影响 EMI
✅ 解决方案
本方案采用软硬件结合的多层次解决策略,通过显示时序优化、软件互斥机制和固件参数调整三个方面综合解决 EMR 与 TP 的干扰问题。
方案一:显示时序优化(硬件层面)
目标: 调整 DSI 显示时序,减少电磁干扰对触控扫描的影响
调整参数:
- VFP(Vertical Front Porch): 从 270 调整到 100
- PLL_CLOCK: 从 480 调整到 450
- 刷新率: 保持 90Hz 不变 实施位置: LCM 驱动参数配置
原理说明:
- 通过调整 VFP 和 PLL 时钟,改变显示驱动与触控扫描的时序关系
- 减少显示信号对触控采样窗口的干扰
- 降低 EMI(电磁干扰)强度,提升触控抗干扰能力
方案二:EMR 与 TP 软件互斥机制(驱动层面)
目标: 实现 EMR 电磁笔优先级控制,当笔处于工作状态时自动屏蔽触控输入
核心机制:
2.1 状态管理
-
定义
PEN_BUSY和PEN_NOT_BUSY状态标志 -
通过全局变量
himax_pen_state在 EMR 和 TP 驱动间共享笔状态 -
EMR 驱动负责更新笔状态,TP 驱动负责检查并响应 2.2 笔状态检测与触控强制释放
-
在 EMR 驱动中检测笔的 hover 状态(悬停/接触)
-
当笔从 hover up(悬停结束)切换到 hover down(悬停开始)时:
- 设置
himax_pen_state = PEN_BUSY - 调用
himax_force_touch_up()强制释放所有触控点
- 设置
-
当笔离开屏幕(hover up)时:
- 设置
himax_pen_state = PEN_NOT_BUSY - 允许触控恢复正常工作 2.3 触控上报屏蔽
- 设置
-
在 TP 驱动的
himax_report_data()函数入口处检查笔状态 -
如果
get_pen_state() == PEN_BUSY,直接跳过触控数据上报 -
避免 EMR 与 TP 数据并发导致的冲突 优势:
-
确保 EMR 笔输入的优先级和准确性
-
防止笔触与手指触控的误识别
-
避免触控驱动因干扰数据进入错误状态
方案三:TP 固件参数调整(固件层面)
目标: 通过调整触控固件参数,降低对 EMR 干扰的敏感度
关键调整:
3.1 关闭 Palm Detection(掌托检测)
-
EMR 产生的干扰信号可能被误识别为掌托
-
关闭该功能可减少误判,提升触控稳定性 3.2 降低触控灵敏度
-
适当降低 TP 的触控灵敏度阈值
-
减少对弱信号(包括 EMR 干扰信号)的响应
-
这是解决 EMR 影响 TP 的关键措施 3.3 优化滤波参数
-
调整触控固件的滤波算法和阈值
-
增强对异常信号的过滤能力 实施方式:
-
联系 TP 固件厂商获取调试工具
-
通过固件配置文件或调试接口调整参数
-
需要在调试模式下测试并烧录新固件
💻 代码实现
1. 显示时序调整
文件: LCM 驱动参数配置文件
params->dsi.vertical_sync_active = 8;
params->dsi.vertical_backporch = 38;
-params->dsi.vertical_frontporch = 270; // 原始值
+params->dsi.vertical_frontporch = 100; // 调整后
params->dsi.vertical_active_line = FRAME_HEIGHT;
params->dsi.horizontal_sync_active = 20;
// ... 其他参数保持不变
params->dsi.ssc_disable = 1;
-params->dsi.PLL_CLOCK = 480; // 原始值
+params->dsi.PLL_CLOCK = 450; // 调整后
说明:
- VFP 从 270 降低到 100,减少垂直前肩时间
- PLL 时钟从 480 降低到 450,调整显示时钟频率
- 保持屏幕 90Hz 刷新率不变
2. EMR 驱动修改(Huion)
文件: kernel_device_modules-6.1/drivers/input/touchscreen/huion_ts/huiontablet.c
2.1 添加状态定义