FAE疑难问题总结
疑难问题总结
一、传统互容1(06、16系列)
1、06系列项目,在下边缘画线,容易画出超出AA区的折线(尤其在分辨率特别大时)
此时需修改flowwork.c中void FlowWork(void)函数中参数:
3220行:
#ifdef TOUCHKEY_EN
structFrameInfoVar.ucFrameRow += 1;
if (structTouchKeyStatus.ucTouchKeyFlg == 1)
{for(i = 0; i {structTouchStatusVar.structPointStatusArrayOriginal[structTouchStatusVar.ucCurrentPo intNum + i].usPosX = \ structTouchKeyStatus.ucTouchKeyIndex[i]; structTouchStatusVar.structPointStatusArrayOriginal[structTouchStatusVar.ucCurrentP ointNum + i].usPosY= \2100;(修改为按键Y坐标值) } 3359行: #ifdef TOUCHKEY_EN //for(i = 0; i for(i = 0; i {if (structAppTouchStatusVar.structPointStatusArray[i].usPosY ==2100)(修改为按键Y坐标值) {j = structAppTouchStatusVar.structPointStatusArray[i].usPosX; structAppTouchStatusVar.structPointStatusArray[i].usPosX= \ structTouchKeyStatus.aucTouchKeyOutput[j][0]; structAppTouchStatusVar.structPointStatusArray[i].usPosY= \ structTouchKeyStatus.aucTouchKeyOutput[j][1]; //break; } #endif //TOUCHKEY_EN 2、电源干扰调试步骤; (1)、增大CAP值;一般调试到最大,即160/80; (2)、选择最佳频率;可通过频谱仪选择干扰最小的频率; (3)、ID滤针算法;针对偶尔出现的干扰跳点问题,改善较明显; (4)、前级针滤波算法;可很大程度上改善严重跳点问题,但会影响整体体验; 3、ESD跳点调试步骤; (1)、打开ESD宏定义; (2)、滤针;参见以下代码; DateProcessPost.c中PointFilterProcess函数: 230行: voidPointFilterProcess(STRUCTAPPTOUCHSTATUS *pstructTouchStatus) { if (pstructTouchStatus->ucLastPointNum> 0) {return; } if (pstructTouchStatus->ucCurrentPointNum>pstructTouchStatus->ucLastPointNum) {if (G_ucTouchedCnter<2)(滤除的针数) {G_ucTouchedCnter ++; pstructTouchStatus->ucCurrentPointNum = pstructTouchStatus->ucLastPointNum; else {G_ucTouchedCnter = 0; } if (pstructTouchStatus->ucCurrentPointNum == 0) {pstructTouchStatus->bTouchStatus = 0; } } 4、按键几率性无功能调试; (1)、TP整体rowdate值调试至相差不超过300且TP需校准并保存; (2)、打开按键宏定义,未使用的通道需挖空处理; (3)、关闭防水宏; 5、手指分离算法; 详见说明文档(PeakMergeProcess); 6、电源干扰(表现为快速点击时乱跳点) 修改代码如下: voidPointFilterProcess(STRUCTAPPTOUCHSTATUS *pstructTouchStatus) { if (pstructTouchStatus->ucLastPointNum> 0) {return; } if (pstructTouchStatus->ucCurrentPointNum>pstructTouchStatus->ucLastPointNum) { //if (G_ucTouchedCnter<= pstructTouchStatus->ucFilterPointCnt) if (G_ucTouchedCnter< 2)//pstructTouchStatus->ucFilterPointCnt) {//G_ucTouchedCnter ++; G_ucTouchedCnter = G_ucTouchedCnter -1; pstructTouchStatus->ucCurrentPointNum = pstructTouchStatus->ucLastPointNum; }} 7、大尺寸整机(5506、5606),在应用中出现边缘区域问题处理; 最新FW“config.h”中: #define TRACE_STABLE_OFFSET 210//180 //a bit smaller than biggest touch diff-data //differ的一致性的差值不要超过的阈值 二、传统互容2(02系列) 三、单层多点(i系列) 1、5436I划线飞点处理; 修改AppTouchKeyProcess.c函数,可之间改善此问题,参考代码见附件; 四、自容(6x06系列) 1、TP视窗与按键中间黑色丝印上报按键坐标问题调试; 按键上方的黑色区域一般客户要求触摸无功能,但在实际调试时,因为手指触摸面积较大,会让按键通道产生较大differ变化量从而上报按键坐标;如果将按键的触发阀值调高可改善此问题,但会使按键悬空时无功能,所以一般解决此问题时,我们加入AA区的最后两个通道做判断,即当按键通道的differ的变化量超出阀值,但AA区的最后两个通道differ大于一定数值时,我们认为触摸在黑色丝印区域,此时不上报坐标; 参考代码如下: if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM-1]+pstructTraceVar->sCapDiff[TP_CHA NNEL_NUM-2] { if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM]> VIRTUAL_KEY_THRESHOLD) {上报第一个按键坐标;} if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM+1]> VIRTUAL_KEY_THRESHOLD) {上报第二个按键坐标;} if(pstructTraceVar->sCapDiff[TP_CHANNEL_NUM+2]> VIRTUAL_KEY_THRESHOLD) {上报第三个按键坐标;} } 有的项目在调试时遇到AA区Y方向坐标无法调到最大时,即开了拉边函数依然与最大像素差10个像素左右,则有可能是因为按键范围过大造成,同样可以采用此方法限制按键范围,改善此问题; 2、ESD跳点问题调试; (1)、打开ESD宏定义; (2)、调试大面积宏定义; 3、同侧画线不同甩尾效果调试; 此时需针对不同的甩尾效果,采用不同的甩尾修正参数; 参考代码如下:Margin_process.c中BorderShiftManualHandle函数; 以4列竖三角分辨率为800的项目为例 ShiftVal = (cLeftManualCoeff[(MARGIN_LX1 - Xnow) - 1])//定义修正甩尾的数组if (Ynew<=20) //当Y坐标小于20时,不修正 {ShiftVal = 0} else if ( (Ynew>380)&&(Ynew<420) ) //坐标在380~420之间,按数组参数修正{ShiftVal = ShiftVal; } else //其余情况,按数组的4/5来进行修正 {ShiftVal = ShiftVal * 4 /5; } Ynew += ShiftVal; 4、6x06系列3个通道实现3个按键划线飞线问题处理办法; 6x06系列的IC,在用3个通道实现3个按键的项目中,当从AA区往处划线时,当手指划到按键上会触发功能造成折线,针对此问题需修改flowwork.c中ResetGlobleVars 函数: static void ResetGlobleVars(void) {if (0 == G_structTouchStatusVar.ucCurrentPointNum) {#if (0 < TP_KEY_NUM) if((G_structTraceVar.sCapDiff[TP_CHANNEL_NUM]+G_structTraceVar.sCapDiff[TP_CHAN NEL_NUM + 1]) < VIRTUAL_KEY_THRESHOLD) (在此处多添加一个通道即:G_structTraceVar.sCapDiff[TP_CHANNEL_NUM + 2]) #endif {G_bVirInvalidClearOnce = 1; G_bVirKeyDisable = 0;} }} 5、增强抗LCD Noise处理办法; 在sys_config.h中,修改如下: /* * AFE Scan data mode * 0: Raw data (Only for testing, do NOT use for release code) * 1: Filter 3 data * 2: Filter 5 data * 3: ACC data */ #define AFE_DATA_MODE 2 #if ((1 == AFE_DATA_MODE) || (2 == AFE_DATA_MODE)) /* * AFE filter (Filter 3 or Filter 5) scan mode threshold * Range 0~1023 * The smaller the value is, the more efficient for the filter function */ #define AFE_FILTER_MODE_THRES 5 五、驱动 1、APK升级的注意事项; APK功能需根据“4_Focaltech Android平台Driver介绍_v1.0.pdf”增加驱动后, 打开FTS_CTL_IIC, SYSFS_DEBUG这两个宏。驱动中打开 FTS_CTL_IIC宏后,在/dev 目录下创建一个ft_rw_iic_drv的结点,通过adb shell chmod 777 /dev/ft_rw_iic_drv打开读写权限。 如果是高通,三星的平台,可以不加此驱动,在编译系统时选中i2c interface, 这样在/dev目录就会有i2c-*的读写结点。用adb shell chmod 777 /dev/i2c-*打 开读写权限来使用工具。 APK是通过ft_rw_iic_drv节点与芯片通信,如无节点或节点无读写权限都会导致 APK升级失败。 APK不能升级的情况有: (1)、驱动只添加t5x0x_ts.c、ft5x0x_ts.h两个文件,完成电容屏的基 本功能,无APK升级功能,需添加其他四个文件。 (2)、未打开FTS_CTL_IIC, SYSFS_DEBUG这两个宏。 (3)、ft_rw_iic_drv节点未打开读写权限。 (4)、系统IIC驱动有问题导致升级失败,通过打印信息可以看到IIC读 写出错的信息,修改系统软件。 注1:以上的APK是指敦泰提供的APK。 注2:有部分APK是客户自己开发的,使用的I升级模式,不需通过节点ft_rw_iic_drv 与芯片通信,驱动可不加FTS_CTL_IIC, SYSFS_DEBUG宏。案例:华兴达40107,鼎智开发了一个APK升级工具,该工具使用I升级模式,将I文件打包到APK中,运行APK就自动升级,需升级程序时需将新的I文件交给鼎智的工程师从新生成APK。 6x06系列同时需打开sys.config中的FLASH_UPGRADE_WRITE_EN宏; 2、I文件升级失败常见原因; I升级功能出错最多是因为无法进入升级模式,即第三步读ID的值为0。可对update 函数进行如下修改尝试。 for (i=0; i<50i++) //增加循环进入升级模式 { /*********Step 1:Reset C TPM *****/ Reset();//软复位修改为硬件复位,需检测复位脚是否有动作。 delay_qt_ms(10+i);//时间为10~60ms,复位到进入升级模式的延时。 /*********Step 2:Enter upgrade mode *****/ auc_i2c_write_buf[0] = 0x55; auc_i2c_write_buf[1] = 0xaa; do { i ++; i_ret = ft5x02_i2c_Write(client, auc_i2c_write_buf, 2); delay_qt_ms(5); }while(i< 5 );//去掉i_ret<0的条件,该条件表示通信失败,去掉是因为有IIC通信成功后//没进入升级模式的情况。 /*********Step 3:check READ-ID***********************/ delay_qt_ms(1); ft5x02_upgrade_send_head(client); auc_i2c_write_buf[0] = 0x90; auc_i2c_write_buf[1] = auc_i2c_write_buf[2] = auc_i2c_write_buf[3] = 0x00; ft5x02_i2c_Read(client, auc_i2c_write_buf, 4, reg_val, 2); if (reg_val[0] == 0x79&®_val[1] == 0x06) { pr_info("[FTS] Step 3: CTPM ID,ID1 = 0x%x,ID2 = 0x%x\n",reg_val[0],reg_val[1]); break; } else { dev_err(&client->dev,"[FTS]Step3:CTPMID,ID1=0x%x,ID2= %x\n",reg_val[0],reg_val[1]); } } 3、TP初始化后无法正常操作问题; (1)、RK平台初始化reset后需delay 200ms 才能进行IIC操作; (2)、全智平台初始化reset后需delay 100ms 才能进行IIC操作; 4、COB方案校准验证; intfts_ctpm_auto_clb(struct i2c_client *client) {unsigned char uc_temp = 0x00; unsigned char i = 0; unsigned char j = 0; /*start auto CLB */ msleep(200); ft5x0x_write_reg(client, 0, FTS_FACTORYMODE_VALUE); 添加读0寄存器是否0x40看是否进入工厂模式, /*make sure already enter factory mode */ msleep(100); /*write command to start calibration */ ft5x0x_write_reg(client, 2, 0x4); msleep(300); for (i = 0; i< 100; i++) { ft5x0x_read_reg(client, 0, &uc_temp); /*return to normal mode, calibration finish */ if (0x0 == ((uc_temp& 0x70) >> 4)) {j = 1; break;} } 查看j是否为1,看是否返回normal mode,为0时msleep(300);改长 //msleep(200); /*calibration OK */ msleep(300); ft5x0x_write_reg(client, 0, FTS_FACTORYMODE_VALUE); /*goto factory mode for store */ msleep(100); /*make sure already enter factory mode */ ft5x0x_write_reg(client, 2, 0x5); /*store CLB result */ msleep(300); ft5x0x_write_reg(client, 0, FTS_WORKMODE_VALUE); /*return to normal mode */ msleep(300); /*store CLB result OK */ return 0;} 六、硬件设计 1、竖三角设计时避免回勾及甩尾问题需特别注意事项; (1)、坚持宽窄边比例>5:1; (2)、按键ITO走线设计; 两个按键:加长左边(右边)连接按键部分ITO至右边(左边)按键处; 三个按键:a、两条通道形成三个按键,将形成中间按键的两条通道尽量靠近 AA区走线;b、三个通道形成三个按键,将形成中间按键的通道延长至左边(右 边)按键处。 四个按键:同三个按键处理方式处理。 (3)、将按键和AA区中间的悬浮块多切割几次。 2、自容量产时提高良率需注意事项; (1)、外围GND线与按键通道走线的距离需至少大于0.1mm,建议越大越好(尤其激光工艺),如距离小于标准值时,当bongding区的ACF因为压合原因产生溢胶时,容易将这两条通断短路,造成按键不良; 七、量产问题 1、自容系列产线常见不良分析; 因为自容的图形为三角形设计,确认坐标的方法即为计算一组相对三角形的电容比例,所以比较好判断不良现象; 判断时我们一般延着垂直与三角形的方向画直线(即TP垂直放置,横三角画竖线,竖三角画横线,4列的图形需在上下半屏分别作判断),画线的位置取1/4或3/4处; 如果画出的线往三角形的外侧弯,则表明TP存在通道开路或超阻(此时可降低扫描频率,如果现象改善,则为超阻,反之为开路,开路的通道为与画线弯折反方向的通道); 如果画出的线往三角形的内侧弯,则表明TP存在短路; 如果画线直接断开,则表明一对通道同时开路; 2、传统互容TX、RX微短路测试方法; 采用3.3以上版本量产工具,同时需增加以下几项,参数设置范围需采样: 3、5336 通道短路的测试方法; 采用3.3以上版本工具,同时需增加以下几项: 一个是测试RX相邻通道短路、一个是测试TX相邻通道短路;使用默认值就可以。 原理:通道测试RX、TX通道在关闭防水功能下,检测其相邻通道自容Rawdata的参数,小于1000以下,就是短路现象。