原厂驱动开发actduino调试手册v_第1页
原厂驱动开发actduino调试手册v_第2页
原厂驱动开发actduino调试手册v_第3页
原厂驱动开发actduino调试手册v_第4页
原厂驱动开发actduino调试手册v_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ActDuino S500_TP 调试手册1 目录12录1言3目引2.12.2编写目的3术语和缩写词3总体设计4需求概述433.13.2总体. 44移植前的准备5原理图5驱动的配置64.14.24.2.14.2.24.2.3actduino_s500_defconfig文件配置ctp编译项6s500-lt705a.dts的配置6init.extra_modules.rc加载不同tp75移植步骤8代码移植分析85.15.1.15.1.25.1.35.1.4配置8硬件初始化8i2c9中断95.2添加驱动支持95.2.15.2.25.2.3编译支持9启动支持10调试驱动116789TP方向配置说明1

2、2CTP自适应功能移植15注意事项15出错处理16版本:1.0第 1 页ActDuino S500_TP 调试手册9.19.29.39.49.51010.110.2111213出错现象16开发者选项16查看input. 17查看是否有中断产生17示波器看波形17典型问题分析19集创北方的TP概率性出现休眠唤醒的时候有 2S中无法使用19某客户样机发热的问题20参考资料21版本历史22. 23版本:1.0第 2 页ActDuino S500_TP 调试手册2 引言2.1 编写目的本文主要帮助 tp 驱动开发快速上手 ActDuino S500 的 tp 驱动开发。2.2术语和缩写词版本: 1.0

3、第 3 页缩写和术语解 释tp触摸屏ctp电容触摸屏ActDuino S500_TP 调试手册3 总体设计3.1 需求概述由于 tp 驱动的代码主要是根据 tp 模组厂提供的 demo 代码修改而来,不同的模组代码各不相同,tp 调试的主要工作实际就是移植。3.2 总体ActDuino S500 目前容触摸屏,电容触摸屏通过 i2c 接口与主控通讯。完整的工作流程如下:主控上电后,按照 ctp 规格定义的上电时序给ctp 的power 和reset脚上电,当触摸 ctp 后,ctp 通过中断线产生中断,在中断处理(后半部)中,主控通过 i2c接口与 ctp 的 ic 通讯,点的坐标值,然后上报

4、 input 子系统。版本: 1.0第 4 页ActDuinoS500_TP 调试手册4 移植前的准备4.1 原理图例如 actduino_s500_lcd_1280x800 的原理图,图 6.1-1图 6.1-1从原理图上我们需要确认A 使用的是哪个 i2c,这里使用的是 TWI1 即 i2c1 B 中断,UART3 RX 即 sirq0Creset 脚,使用的是 gpioB3D 电源 power 使用的 tpvcc3v1,可知,最终使用的是 ldo5需要注意的是有些 tp ic 的上电时序中对 reset 和power 有严格的要求,这种 tp 就不能将电源与其他模组共用,否则 power

5、 的上电有可能不受 tp 驱动的或者从其他模块漏电过来。,例如被其他模组打开版本: 1.0第 5 页ActDuino S500_TP 调试手册4.2 驱动的配置为了实现驱动的可配置,在驱动中需要实现配置项的读写。以 actduino_s500_lcd_1280x800 版型为例说明,如何配置 ctp 驱动程序。4.2.1 actduino_s500_defconfig 文件配置 ctp 编译项在目录 androidkernelarcharmconfigs 下的_defconfig 文件中,通过配置如下 config项目,来选择编译某个驱动,其中 m 为编译成模块 ko,y 为编译进内核。默认编

6、译成模块, 使用 insmod 来加载。CONFIG_TOUCHSCREEN_GSLX680=m CONFIG_TOUCHSCREEN_GSL1680F=m CONFIG_TOUCHSCREEN_GSL3680=mCONFIG_TOUCHSCREEN_FT5X06=m4.2.2 s500-lt705a.dts 的配置在目录 androidowlgs705aconfigboardduino_s500_lcd_1280x800dts 中找到配置文件 s500-lt705a.dts,其中关于 ctp 的配置如下:gslX68040 compatible = "gslX680" r

7、eg = <0x40>tp_vcc = "ldo5"reset_gpios = <&gpio 35 1>/*GPIOB(3) 0: high, 1: low*/x_pixel = <1024>y_pixel = <600>x_revert_en = <0>y_revert_en = <0>xy_swap_en = <0>rotate_degree = <270>/* 0 90 180 270 */ interrupt-parent = <&sirq>i

8、nterrupts =< 0 0x4 > /*SIRQ0*/ vol_range = <3100000 3110000>其中reg表示该tp作为从机的地址为0x40, tp_vcc表示要使用的电源为ldo5, reset_gpios中的35编号表示GPIOB(3), 其中031代表GPIOA(031)、3261代表GPIOB(031),如此推算。Interrupts = <0, 0x4>,其中0表sirq0, 0x4表示触发方式,1=low-to-high edge triggered, 2= high-to-low edge triggered, 4 =

9、active high level-sensitive, 8 = active low level-sensitive.如果代版本: 1.0第 6 页ActDuino S500_TP 调试手册码里申请中断时不使用该配置项,则该配置项可以忽略。config 文件中其它项目的具体含义,请参考 owlgs705aprebuiltfwmisc 目录下的config_UserView.xml。4.2.3 init.extra_modules.rc 加载不同 tp由于不同的 board 使用不同的 tp,那么到底加载哪一款 tp 呢,这个配置是放在板级配置目录下(对于本例来讲,是 owlgs705acon

10、figboardduino_s500_lcd_1280x800)的,通过修改 initramfs/init.extra_modules.rc 文件来选择加载不同的 tp。版本: 1.0第 7 页#tpinsmod /misc/modules/ctp_gsl1680f.koActDuino S500_TP 调试手册5 移植步骤5.1 代码移植分析5.1.1配置在驱动的初始化函数中将所有的配置读出来,并保相应的位置,方便后面使用。以GSL1680F 为例,在源码中加入 tp_of_data_get()函数,获取版型.dts 中的配置项,例如:5.1.2 硬件初始化这部分代码基本上就是将 tp ic

11、 原厂的 demo 代码进行修改。主要设置将 gpio 换成我们制定的 io 口,将对应的 ldo 打开等,这部分代码不同的 tp ic 原厂的各不相同,这里不详细说明。版本: 1.0第 8 页ActDuinoS500_TP 调试手册5.1.3i2c在板型下的 dts 文件 s500-lt705a.dts 的 i2cb0174000 下配置了 gslX68040 项,kernel i2c驱动会在 i2c初始化时创建 gslX680 的 i2c,当调用 i2c_add_driver(&gsl_ts_driver)时,便会使用 gsl_ts_driver 的compatible 成员值来匹

12、配函数。名,如果匹配,则会调用 probe5.1.4中断在 probe 函数中,只要使用 request_irq 即可,后面的参数主要也是根据厂商代中断码和 datasheet 来确定。需要注意的是后面的开关中断要保证成对使用。5.2 添加驱动支持5.2.1 编译支持增加一款 TP 驱动,以 GSL2681 为例,需要在 androidkerneldriversinputtouchscreen下新建目录 GSL2681,并将代码放在 GSL2681 下。拷贝其他 TP 的 Makefile 并做修改:同时修改 androidkerneldriversinputtouchscreenMakefi

13、le 文件,参考其他 TP,增加对版本: 1.0第 9 页obj-$(CONFIG_TOUCHSCREEN_GSL2681)+= ctp_gsl2681.octp_gsl2681-objs := gsl2681.oActDuino S500_TP 调试手册GSL2681 的支持:修改androidkerneldriversinputtouchscreenKconfig 文件,参考其他TP,增加对GSL2681的支持:将新增的 TP 驱动添加到编译配置项中:在 androidkernelarcharmconfigsatm7059a_s500_defconfig 中添加:m 代表将驱动编译成内核模

14、块 ko。在 android/下执行#./autobuild.sh modules 即可编译模块。注意:以上四处修改用红色标记的字符必须一致。5.2.2 启动支持需要到板型下的 init.extra_modules.rc 中修改 TP 驱动的加载。以 actduino_s500_lcd_1280x800为例:修改androidowlgs705aconfigboardsdemoinit.extra_modules.rcactduino_s500_lcd_1280x800initramfs这样在启动时会自动加载 ctp_gsl2681.ko 驱动。同 时 也 要 修 改 androidowlgs7

15、05aconfigboardsdemoactduino_s500_lcd_1280x800recoveryramfs init.extra_modules.rc:版本: 1.0第 10 页#tpinsmod/misc/modules/ctp_gsl2681.ko#tpinsmod/misc/modules/ctp_gsl2681.koCONFIG_TOUCHSCREEN_GSL2681=mconfig TOUCHSCREEN_GSL2681tristate "GSL_2681 I2C Touchscreen" depends on I2ChelpSay Y here if

16、you have GSL_2681 series I2C touchscreen connected to your system.If unsure, say N.To compile this driver as a module, choose M here: the module will be called gsl2681.obj-$(CONFIG_TOUCHSCREEN_ GSL2681)+= GSL2681/ActDuino S500_TP 调试手册该文件是在恢复出厂设置时加载 ctp_gsl2681.ko 驱动。5.2.3 调试驱动驱动开发过程中有时需要反复调试驱动,直接做固件

17、烧写很浪费时间,可以通过 android 的adb 来 push 驱动到样机。例如当前目录编译驱动生成 ko 文件 ctp_gslX680.ko , 打开命令行 cmd,输入Adb root 来获取 root 权限Adb shell busybox mount o rw,remount /misc adb push ctp_gslX680.ko /misc/modules/adb shell syncadb shell rmmod gslX680adb shell insmod /misc/modules/ctp_gslX680.ko挂载 misc 为可写分区。push 进小机确保写到 fla

18、sh 中卸载旧驱动,名字从 lsmod 中获取加载新驱动auto.bat,这样就可以从小机上看到效果了,如果嫌麻烦可以写一个脚本,例如令拷进去,每次直接执行 auto.bat 即可。把上面版本: 1.0第 11 页ActDuino S500_TP 调试手册6 TP 方向配置说明以 actduino_s500_lcd_1280x800 为例说明,在目录 owlgs705aconfigboardduino_s500_lcd_1280x800dts中找 到配置文件 s500-lt705a.dts,其中关于 ctp gslX680 的配置如下:gslX68040 compatible = "

19、gslX680" reg = <0x40>tp_vcc = "ldo5"reset_gpios = <&gpio 35 1>/*GPIOB(3) 0: high, 1: low*/x_pixel = <1024>y_pixel = <600>x_revert_en = <0>y_revert_en = <0>xy_swap_en = <0>rotate_degree = <270>/* 0 90 180 270 */ interrupt-parent = <

20、;&sirq>interrupts =< 0 0x4 > /*SIRQ0*/ vol_range = <3100000 3110000>红色部分是与方向配置相关的,调试前需要确认驱动中 of_property_了这些配置项。_u32()函数是否标案下思立微的驱动(gsl1680/gsl3670/gsl3675/gsl3680),了以上配置项,可以直接调试以上配置项的值;标案下其他驱动,有一些没有调试步骤:以上配置项的值,需要原厂调试。(1)(2)打开<开发者选项>Æ<显示触摸操作>和<指针位置>,见 11.2根

21、据 LCD 分辨率确定 xMax 和 yMax 的值,xMax 和 yMax 的值设置正确的标准是:触摸 TP 的每一个地方都会有响应。如果 x 轴镜像或者 y 轴镜像(触摸原点响应的地方是最大值点),则修改 xRevert 和yRevert。(3)(4)如果此时 TP 方向不对(滑动的响应的方向不一致),则修改 rotate。调试:为了避免多次烧固件,可以使用串口终端,进入到/sys/class/input/event1/device 下,通过输入命令来调试如下旋转等相关的参数,参数的取值范围请参考 owlgs705aprebuiltfwmisc 目录下的 config_UserView.x

22、ml:root86v:/sys/class/input/event1/device # ls版本: 1.0第 12 页ActDuino S500_TP 调试手册tp_rotate tp_xrevert tp_xyswaptp_yrevertcat 命令查看某个值令:root86v:/sys/class/input/event1/device # cat tp_rotate270echo 命令写入旋转角度到 tp_rotate:root86v:/sys/class/input/event1/device # echo 90 > tp_rotate当 通 过 输 入 命 令 调 试 到 正

23、确 的 参 数 后 , 需 要 把 这 些 值 写 到 源 码owlgs705aconfigboard应配置项。duino_s500_lcd_1280x800dts 中的配置文件 s500-lt705a.dts 中对有两种:(a) 通过 make dtb 编译dts 为小机可执行的 dtb 文件:android/owl/gs705a$ makedtb这样生成名为 u-boot.dtb 的 dtb 文件,在androidowlgs705arootfs_ actduino_s500_lcd_1280x800fwmisc 目录下。可以通过重新做固件或者 adb push 命令推到小机里验证修改是否生

24、效。adb adb adb adb adbadbpush root shell push shellshell令步骤如下:mountorw,remount/misc u-boot.dtb/misc/syncreboot(b) 可以直接修改小机上的 dts 文件,再在小机上编译成 dtb 文件验证。dts 文件和dtb 文件机的/misc/目录下。版本: 1.0第 13 页root86v:/ # cd misc/ root86v:/misc # ls 0_charger_frame.bmp.gz 1_charger_frame.bmp.gz 2_charger_frame.bmp.gz 3_ch

25、arger_frame.bmp.gz 4_charger_frame.bmp.gz 5_charger_frame.bmp.gzActDuinoS500_TP 调试手册用 vi 命令修改 s500-lt705a.dts:修改好后保存vi,输入:生成 u-boot.dtb 文件了。重启小机即可验证。需要注意的是,以上两种直接替换 dtb 文件的无法对 uboot 阶段起作用。因为 uboot 阶段是用另外一份 dtb 文件的。只有重新编译固件才能在 uboot 中生效。当然,对于 TP 来说,以上两种都是可以生效的。版本: 1.0第 14 页dtc -R 4 -p 0x1000 -O dtb -

26、o /misc/u-boot.dtb /misc/ s500-lt705a.dtsroot86v:/misc # busybox vi s500-lt705a.dtsadfu_fill.bin s500-lt705a.dts atm7059a.dtsibattery_low.bmp.gz boot.img boot_info.xml boot_logo.bmp.gz charger_logo.bmp.gz config_UserView.xml mmc-boot.bin modulesnand-boot.bin recovery_logo.bmp.gz skeleton.dtsiu-boot.

27、dtb uImage root86v:/misc #ActDuino S500_TP 调试手册7 CTP 自适应功能移植详情见ActDuino S500_ctp 和 gsensor 自适应使用指南.doc8 注意事项A 由于我们 actduino_s500_lcd_1280x800 的tp 使用的是 260x 的ldo5 供电,所以 suspend和 resume 函数必须实现,并且需要在 suspend 时关掉 ldo5,resume 时打开,不关的话,260x 无法断电,功耗就会较大。是,ldo5B 在 suspend 和 early suspend 中都需要关中断。,一些场景,只是调用

28、suspend(例如 快速启动)和只是调用 early suspend (例如 插 usb 关屏)C linux 多点触摸协议中,有 a 类和 b 类之分,ctp 报点时,建议采用 b 类的模式,是 a 类模式的游戏兼容性不是太好。另外如果使用 a 类协议报点而在所有手指都抬起时没有多报一组空包,如下:input_mt_sync();input_sync();则会导致使用时有时会有异常,比如玩某些游戏时,单指点击和滑动时经常无效,但是多指却正常。D 建议驱动中同时使用early_suspend、late_resume 和suspend、resume,并在early_suspend中调用 flu

29、sh_workqueue()或者 cancel_work_sync()。E 注意 early_suspend 和 suspend 不能使用同一个函数,late_resume 和 resume 同样道理。版本: 1.0第 15 页ActDuino S500_TP 调试手册9 出错处理9.1 出错现象在开发和使用过程中有可能会遇到 tp 无响应的情况。开发定到底是哪里出了问题。可以通过一些步骤来确9.2 开发者选项开发者可以利用 android 自带的开发者选项的功能,如图 9.2-1,打开 setting 应用,进行开发者选项,输入中的 2 个选项。(可以先用 usb 鼠标,来打开这两项)图 9

30、.2-1这样,就可以从屏幕上看到输入点的轨迹,从而是应用本身的问题还是驱动的问题。注意:有的时候打开调试选项可以看到,tp 只有部分区域失效,这时可以尝试重启小机,看重启结果,如果 ok,之前遇到过的情况一致,我们有厂家看过,是物料问题,不用管,如果重启还不行,就是 tp 坏了,或者有通道焊接不良,导致 TP 部分区域失灵,找硬件修。版本: 1.0第 16 页ActDuino S500_TP 调试手册9.3 查看 input有些情况下问题是不可重现的,这种情况下事先或者 adb shell(usb)来查看底层驱动是否上报 event rootandroid:/ # getevent padd

31、device 1: /dev/input/event3。都没有打开开发者选项,可以通过串口。在命令行下输入 getevent可以看到 tp 所对应的 event,并且由于 gsensor 也属于 input,导致观察不方便,可以使用 ctrl+c 来终止getevent。然后输入getevnet /dev/input/event3 触摸 tp 结果如下: 0003 0039 0000000b0003 0035 000003ab0003 0036 000001890000 0000 0000000035 36 分为x 和 y,具体参考 input.h,其会不停上报 gsensor 的如果上报了,

32、而应用无反应,要看上报的坐标值是否正确,以及是否有漏报。9.4 查看是否有中断产生如没有 input产生,就要查看下驱动及硬件是否工作,首先要看触摸时 tp ic 是否有正常产生中断。查看如下:串口下键入 cat /proc/interrupts 130|rootandroid:/ # cat /proc/interrupts会看到类似如下输出86:372asoc_sirq_irqnovatek372 是中断次数,触摸后看是否中断次数有增加。如果触摸后中断没有增加,说明 tp ic 没有正常工作或者主控的中断没有开。 需要注意的是查看中断时要保持系统没有进入 suspend 状态,的标准是屏幕

33、没有关闭即没有进入 suspend。是进入 suspend 后会关中断的,9.5 示波器看波形用示波器看,主要看 tp 是否被正确的初始化。这个就是主要跟 reset 的时序相关。从 tp ic 原厂或者模组厂获取正确的上电时序,然后跟示波器采到的做对比,A 如果初始化的波形正常,但是 tp ic 还是不能产生中断,就要 tp ic 原厂或者模组厂的版本: 1.0第 17 页ActDuino S500_TP 调试手册工程师支援了。B 如果波形不正常,可以在加载驱动后,拔掉 tp(如果是 fob,就没的拔了,忽略这一步好了),再测波形,如果正常,就有可能是 tp 模组漏电的,请硬件工程师看看。C

34、 如果波形还是不正常,就把 tp 驱动卸载掉,如果对应 tp 电源线上还是有电,那就是板子设计有问题,其他模组有漏电过来。版本: 1.0第 18 页ActDuino S500_TP 调试手册10典型问题分析10.1 集创北方的 TP 概率性出现休眠唤醒的时候有 2S 中无法使用现象:7029B 18K 目前送样阶段使用集创北方的 TP 概率性出现休眠唤醒的时候有 2S 中无法使用:经过排查发现我们的 TPVCC3V1 在上电的时候是如下阶梯状波形,是 VCC 通过 TP IC漏电到 TPVCC 上,测试波形如下:的动作,具体做法是在 resume解决:修改规避后的波形,做一个放电拉低再的时候在

35、上电前将 i2c 的数据和时钟线作为 gpio 口用,延时 100ms,然后上电,接着将掉 gpio 口即可规避。版本: 1.0第 19 页ActDuino S500_TP 调试手册结论:目前我们 TPVCC 对于目前测试过的 TP 都会造成阶梯状的上电,大部分的 TP IC 此上电没有问题,只有一些个别 IC 会造成唤醒后概率没有识别,目前来说此修改会造成唤醒延迟 100ms。10.2 某客户样机发热的问题问题:某客户样机发热,发现 702C4 里面的 insmod_ctp.sh 脚本中 sleep 参数写的不对:这会导致进入这个循环的时候实际上不是每一秒循环一次,而是不停的循环,导致进程不

36、停的在用户空间和内核空间调度。从而消耗了 CPU 导致 CPU 温度过高。解决:sleep1s中的s是多余的正确的写法是 sleep1。版本: 1.0第 20 页ActDuinoS500_TP 调试手册11参考资料1 各tp 模组原厂的 demo 代码2方案配置说明&修改指南3版本:1.0第 21 页ActDuinoS500_TP 调试手册12版本历史版本:1.0第 22 页日 期版本号注释作者2015-6-121.0建立初始版本ActDuino S500 项目组ActDuino S500_TP 调试手册13DisclaimerInformation given in this doc

37、ument is provided just as a reference or example for the purpose of using Actions products, and cannot be treated as a part of any quotation or contract for sale.Actions products may contain design defects or errors known as anomalies or errata whichmay cause the products functions to deviate from p

38、ublished specifications. Designers mustnot rely on the instructions of Actions products marked “” or “undefined”. Actionsreserves these for future definition and shall have no responsibility whatsoever foror incompatibilities arising from future changes to them.sACTIONS DISCLAIMS AND EXCLUDES ANY AN

39、D ALL WARRLIMITATION ANY AND ALL EXPRESS OR IMPLIED WARRES, INCLUDING WITHOUTES OF MERCHANTABILITY,ACCURACY, SECURITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND INFRINGEMENT OF INTELLECTUAL PROPERTY AND THE LIKE TO THE INFORMATON OF THIS DOCUMENT AND ACTIONS PRODUCTS.IN NO EVENT SHALL ACTIONS BE

40、LIABLE FOR ANY DIRECT, INCIDENTAL, INDIRECT, SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES WHATSOEVER, INCLUDING, WITHOUT LIMITATION FOR LOST OF DATA, PROFITS, SAVINGS OR REVENUES OF ANY KIND ARISING FROM USING THE INFORMATON OF THIS DOCUMENT AND ACTIONS PRODUCTS. REGARDLESS OF THE FORM OF ACTION, WHE

41、THER BASED ON CONTRACT; TORT; NEGLIGENCE OF ACTIONS OR OTHERS; STRICT LIABILITY; OR OTHERWISE; WHETHER OR NOT ANY REMEDY OF BUYER IS HELD TO HAVE FAILED OF ITS ESSENTIAL PURPOSE, AND WHETHER ACTIONS HAS BEENADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR NOT. Actions products are not designed, intende

42、d, authorized or warranted for use in any lifesupport or other application where product failure could cause or contribute toalinjury or severe property damage. Any and all such uses without prior written approval of an Officer of Actions and further testing and/or modification will be fully at the

43、risk of thecustomer.Ways of obtaining informationCopies of this document and/or other Actions product literature, as well as the Terms and Conditions of Sale Agreement, may be obtained by visiting Actions website at:or from an authorized Actions representative.版本: 1.0第 23 页ActDuino S500_TP 调试手册TrademarksThe word “Actions” and the logo are the trademarks of Actions Semiconductor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论