先附录上TP的内部checklist,所有在列内容都为常见问题切比较严重问题,如下:
上下电时序
Operating Voltage
TP ic and manufacturer ID(Module ID)
Check I2C SCL设置频率
工厂测试项目(RAW data/短路/划线测试)
TP 中断频率
TP报点率
tp精准度
tp灵敏度
重力测试
悬空测试(比如将设备放在抱枕或者手拿着选用,用手机触碰)
不会出现误报点
充电器干扰测试
Double Tap,功耗增量
FW升级流程确认(double confirm)
1)不会反复升级
2)不同模组版本号不能被包含在一个区间
3)错烧FW,不能强制升级,使用默认的
4)push低版本后不会升级
fw升级修复:升级过程,强制断电,开机后要能正常升级OK
快速点击TP,大面积触摸测试
back、home、menu键多次快速点击测试
两指横向/纵向划动(鬼点),
断线测试
手势支持
boot the phone with no TP(取下TP测试手机是否能开机)
boot in META mode
日常防水测试
各需要观察硬件图等方面内容这里皆不具体描述。
TP的IC和运营商ID确认是有必要的,尤其是存在多供应商和共基线开发情况。TP的IC ID和模组ID都是作为Firmware升级等功能的必备条件,该功能都是通过判断IC和模组ID来确定具体的手机,以便做正确driver的加载和Firmware的升级
该项个人认为从HW方面check会更快捷容易,正常情况下该项已经工作电压、上下电时序都由HW去检测。
该项主要用于工厂检测用,rawdata是工厂检测TP的原始数据,从第一次检测分辨出屏体硬件方面是否有异常(详情请参考《产线检测CTP单体异常需求分析及实现》)。Rawdata都会有open\short测试,整体测试完成后会保存一个数据(一般存在sdcard/下,具体从driver中可以查到)。同样,driver会注册一个节点提供给上层的MMITest做接口,可供上层读取数据(工厂会从MMI中去读取,如果该项出现问题,会影响工厂生产)。同样,MMI也需要上层Rawdata.java配合工作,同时也需要FAE提供ini卡控文件来配合测试,至此,该项才能PASS。同理,在MMI中Firmware选择同样需要提供Firmware信息的接口给上层,具体是在MMI中的Firmware.java和SysClass.java中修改。
主观测试项目需要和VAL,SPM分析,并等待客户验证反馈,决定将修改到什么层度,这两项修改都在Firmware中。需要FAE处理。
例如,在拨号界面长按一个数字,拨号界面中不会出现“该数字一直被反复点击”的情况,该项修改同样在firmware中。水雾测试的话是防汗方水雾测试,具体要根据TP本身的质量情况相关,高端TP可以接触大面积水而不会有异常影响,低端TP比如pixi4-4.5 VF的msg,只能做到水雾和汗,大块水滴都会造成乱报点等问题。
需要打开报点功能后测试全部屏幕,确定各部分屏幕都能正常报点,该问题同样block在firmware中。触摸屏(TP)乱跳原因总结
导致触摸屏乱跳的原因大概分为5类:
(1) 触摸屏硬件通道损坏
(2)触摸屏固件版本太低
(3) 触摸屏工作电压异常
(4) 射频干扰
(5)触摸屏校准异常
1.现象:
点击TP的某块区域,无反应,但是该区域周围被感应到,产生了触摸事件
2.问题分析:
TP的感应区域是由一条条的感应通道组成的,若某几条感应通道坏了,那么点击该区域时,TP无法感应到电场
发生了变化,因此点击该区域时无反应,但是周围相邻的正常通道会感应到电场的变化,因此那块区域就会出现
触摸事件。给人的感觉就是,触摸了这块区域,但是另外一块区域响应了
3.根本原因:
Tp硬件通道损坏
4.改进措施:
更换硬件
1.现象:
TP可以正常使用,但是按下区域和响应区域成镜像反,例如按左边区域右边响应,按右边区域左边响应
2.问题分析:
TP局部区域可以使用只是按下去不准确,但是但是中断正常,报点位置镜像反,引起此现象可能是TP固件太老,
与当前驱动不匹配引起的
3.根本原因:
TP固件不匹配
4.改进措施:
升级TP固件
1.现象:
TP无规律的乱跳
2.问题分析:
TP无规律的乱跳,说明TP自身工作不正常,当TP的供电小于其正常工作电压时,会引起此现象
3.根本原因:
TP供电异常
4.改进措施:
修改TP供电电压,使其正常,可能需要修改LDO供电,硬件有可能需要改板
1.现象:
拨号打电话时,号码拨出去之后,屏幕出现按键乱跳现象
2.问题分析:
打电话时才出现乱跳现象,说明是打电话时有干扰,经测量Tp的工作电压,发现TP的工作电压在上下波动
3.根本原因:
打电话引起TP电压上下波动
4.改善措施:
调整TP工作电压,使其在正常的工作范围内
1.现象:
大面积按压TP后,来电接听,触屏失效,需按两次power键才能解锁
2.问题分析:
大面积按压TP后,TP可能发生了校准,此时TP的触摸响应的阈值发生改变,为手指按下时的阈值,当来电去接
听时,手指按上去后TP参照之前的阈值判断没有touch事件,因此就没有响应;当按power键休眠和唤醒后,TP
会进行校准,此时恢复正常状态,所以就可以使用了
3.根本原因:
大面积触摸TP后,产生了不需要的校准,使得TP参考环境发生变化,导致正常触摸时TP产生了不正确的判断
4.改善措施:
优化TP校准算法,避免发生不必要的校准,或者隔断时间按照正常的参考值进行校准一次
工模干扰等情况,都很有可能是频段的问题,我司一般会对特定厂家的充电器或者市场占有率较高的充电器做匹配,某些低端的充电器是没有匹配的,所以有可能会出现一些干扰情况是无法避免的,具体情况具体分析。如果需要修改该方面内容,具体情况要和HW及FAE确定修改方式。
VDF高端机会有此需求,同样需要做到双击之后产生中断,sensor上报距离过近等事件,由上层关闭掉屏幕,此时TP需要重新进入手势等待模式。处理该需求的时候同时也要注意该功能带来的负面影响,比如已经出现过的,打开double tap后无法进入睡眠模式,或者是双击唤醒后会短时间TP失灵等问题。
这是比较严重的一块逻辑,正常情况下该逻辑是由屛厂修改好后提供给我司,但不排除粗版本上会存在遗漏,尤其是新项目开发阶段,所以这是必须检查问题。确定固件判断流程是否正常,首先需要检查现有的firmware是否完整,再判断依据为TP的IC和模组ID,此ID是否是符合项目的需求,一般不介意自己独立优化修改该流程,如有修改,请double check。
firmware升级保护机制,在firmware升级过程中断电,要保证开机的时候能继续上次升级。以上情况,在断电的时候,firmwarwe所有寄存器都会全部清零,所以开机的时候无法再读到手机中的firmware version以及各类ID信息,此时需要从boot中读取上次的数据,重新得到ID和version,然后继续完成升级功能。该块逻辑比较复杂且重要,需要多加熟悉。
确定三个虚拟键不存在问题,三个虚拟键除了在driver中报点外,上报的是事件还是坐标同样有区别,同时,上层也会有映射文件来具体控制每个按键的作用。映射值和driver中上报的值需要匹配。
在check该项的时候,首先需要了解屏幕是自容屏还是互容屏,目前市面高端机都用的是互容屏体,支持报点数等方面具体有很大优势,而自容屏体,受限于硬件设计和成本,只能支持假两点的方式,并且在限制区域会出现报鬼点等现象,且无法优化。详情可以参考msg给出的自容屏设计概述中的缺陷。
对于TP相关,还有两个需要注意点,一个是GPIO在reset的时候,延时是必备的,但最小延时需要和FAE确定,比如reset后拉低后再拉高,是需要在低电平上200ms等待稳定后才能继续操作的。二是需要注意GPIO口输入还是输出,如果硬件量下来有问题的话,该方面是需要更正的,GPIO Reset一般都是默认是拉高的,要做一次reset,是需要拉低后再拉高,这中间的延时需要20ms,而reset完成后,需要有200ms延时,因为拉高之后,GPIO脚还不稳定,该状态下操作会造成上报错误的数据之类的问题,200ms的时间是给GPIO状态稳定下来,20ms则是则是要等待地电平有效时间,如果不加,那么整个reset失效。
对于TP方面GPIO reset的方向(output/input),都是output。gpio_set_value()是设置拉高或者拉低电平,但不修改方向(方向在最早处设定),gpio_dirction_output/input()可以在设置拉高或者拉低的情况下设置方向。
“接触”一词用于描述直接接触表面的工具,手指、笔或者橡皮,都可以归类为接触。TP的报点方式,正常情况下driver是上报的坐标而非事件(可能会单独定义三个虚拟键为事件)。上报的input方式有两种,一种是不记名报点方式,另一种为带参数(slot)的报点方式(BTN是上报必须有的,至少第一种方式是必须上报该点的).
ABS_MT_TOUCH_MAJOR
接触主轴的长度,长度应该以表面的单位给出。如果表面有X倍Y分辨率,
ABS_MT_TOUCH_MAJOR最大的可能值是sqrt(X^2+Y^2),即对角线。
ABS_MT_TOUCH_MINOR
接触面短轴长度,单位是表面单位。如果接触面是圆形的,此事件可以被忽略。
ABS_MT_WIDTH_MAJOR
接触工具的长轴长度,单位是表面单位。这应该被理解为工具自身的尺寸。接触面的方向和相应工具假设是相同的。
ABS_MT_WIDTH_MINOR
接触工具的短轴长度,单位是表面单位。如果是圆形,则忽略。
以上四个值可以被用于派生关于接触的附加信息。ABS_MT_TOUCH_MAJOR/ABS_MT_WIDTH_MAJOR接近压力的概念。手指和手掌有不同的特性宽度。
ABS_MT_PRESSURE
压力,可以是任意单位,在接触区域。可能被用于相应的TOUCH和WIDTH,对于基于压力的设备或者任何空间信号密度分布设备。
ABS_MT_ORIENTATION
椭圆形的方向。这个值应该描述一个有符号的围绕触点中心的顺时针方向的旋转度。这个有符号值的范围是任意的,但是对于手指沿着表面Y轴应该返回0,负值当手指转向左边,
正值当手指转向右边。当完全沿着X轴方向时,返回值的最大值。如果接触物体是圆形的,或者内核驱动不提供这些信息,方向可以被忽略。如果设备可以区分两个维度,但是不能
保证任意值,那么可能是部分支持方向。这时,ABS_MT_ORIENTATION的值域应该是在[0,1] [4].
ABS_MT_POSITION_X
接触椭圆中心的X表面坐标。
ABS_MT_POSITION_Y
接触椭圆中心的Y表面坐标。
ABS_MT_TOOL_TYPE
接触工具的类型。很多内核驱动不区分不同工具类型,例如手指和笔。在这种情况下,事件应该被忽略。协议当前支持MT_TOOL_FINGER和MT_TOOL_PEN。[2].
ABS_MT_BLOB_ID
BLOB_ID将多个数据包编成到一组任意形状的接触。这是一个低级的匿名组,并且不应该和高级跟踪ID混淆。 [5].多数内核驱动没有blob能力,可以安全的忽略此事件。
ABS_MT_TRACKING_ID
TRACKING_ID标识了一个初始的接触,贯穿整个生命周期。[5].现在只有很少的设备支持,所以此事件通常被忽略。
这是VDF在Android L上的一个特殊需求,是用来锁定屏幕无法使用home 和back虚拟键直接退出程序的,相当于儿童锁。该功能在TP底层的要求是需要同时上报back和menu键,如果不加处理的话,每一个虚拟键都会在不停的报DOWN/UP事件,相当于两手指都在快速点击按钮,实际上这样是不达标的,该功能需要back和menu同时且稳定的上报DOWN,不能有UP事件才能解锁。该功能处理同时需要注意是否会被USB接口所影响。针对该功能,如果在driver中修改的话,是需要修改报点逻辑的(比如msg)。也有方案说firmware中处理,比如FT。
在有些低端项目上,由于成本等原因不会配置sensor,但为了达到在通话等过程中避免误触等操作,会用TP来模拟P-sensor。整体思维如下,整体TP牺牲灵敏度调高,在通话过程中,如果TP在有触碰的情况下接收到中断,并且触摸区域属于屏幕上半部分,那么则灭屏进去睡眠状态,在离开时TP没有受到触摸时,判断远离,屏幕点亮。该功能会设计到通话的流程以及TP中断流程和suspend以及resume,对于该功能同样会引起别的一些问题需要处理,比如在通话过程中如果接着耳机,或者本身因为造假限制,TP档次偏低,在重压等情况也会出现异常情况。
正常Touchpanel的升级是在probe函数里面进行的,一般会在升级函数中新建一个工作队列,让它独立于主进程,成为一个专门用于firmware升级的子进程。然后会根据升级的逻辑来进行升级前的判断和甄别。
主要判断手机中的FW和从.h/bin文件读取出来的FW是否是同一个IC/模组厂商。然后再判断对应版FW的版本号是否达到要求,满足上述一系列要求后才会进行升级。升级的过程大概持续10s左右,中途不会有log吐出。针对升级的逻辑,上海site的特殊要求是,在MMI版本不需要判断版本号强制进行升级。这样会验证在多次升级的过程是否会出现异常。
由于FW升级的时间较长,所以得保证它在出现异常时能够自我修复。
对于在升级过程中被断电等情况中断,会导致手机中FW的版本号和IC厂商号都为0x00(因为断电会导致相应的寄存器全部为0x00).来开机流程读取到这样的版本号是会走断电保护机制,从boot中去读取之前的版本号进行升级。
正常的升级时对寄存器的操作都是边擦出边写入,所以不会出现从boot中完全无法读到信息的情况。但有两种特殊的升级方式:
1.使用apk进行升级;
2.通过节点直接写入.bin文件升级(FT保留该功能)
这两种方式都是先将手机中寄存器信息全部擦除后再写入。所以如果升级的过程被打断,很有可能造成直接变砖,无法重新回复的异常。