kevin知识库
首页 / MTK 平台 / /mtk/emr-tp-interference/
整理中 创建 2026/06/06 更新 2026/06/06

在 KP1202 Android 平板项目中,EMR 电磁笔与电容式触摸屏(TP)存在严重的电磁干扰问题,导致用户在使用电磁笔时触摸屏出现失灵、误触、延迟响应等异常现象,严重影响产品的用户体验。

#mtk #emr #tp

[MTK]EMR(电磁笔)干扰触摸屏(TP)的问题与解决方案

📋 问题概述

在 KP1202 Android 平板项目中,EMR 电磁笔与电容式触摸屏(TP)存在严重的电磁干扰问题,导致用户在使用电磁笔时触摸屏出现失灵、误触、延迟响应等异常现象,严重影响产品的用户体验。

问题现象

主要表现:

  • 触摸屏无响应或长时间不上报触摸事件(TP 不产生正常的 up/down 事件)
  • 触控数据被 EMR 干扰,导致并发状态错误
  • 出现触控错位、错按或连续重复点击
  • EMR 笔工作时,手指触摸操作被屏蔽或延迟 复现步骤:

打开平板,进入待机或应用界面

让 EMR 电磁笔靠近屏幕或在屏幕上书写

同时或随后使用手指触摸屏幕

通过 adb logcatevtest 观察触摸事件异常或丢失


🔍 原因分析

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_BUSYPEN_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 添加状态定义