BSP调试#12:TP(全志T527)# BSP调试#12:TP(全志T527)
调试前
触摸调试前需要了解 Linux Input 子系统的基本框架以及数据上报流程。Linux Input 子系统分为 3 层 ,从底层硬件到上层应用链路如下:
驱动层(Driver): 直接操作硬件(如 GPIO 中断、读取电平),将硬件信号转换为 “标准化输入事件”;
核心层(Core): 管理所有输入设备,提供驱动注册 / 注销接口,转发 驱动层 事件到合适的 事件层 ;
事件层(Handler): 接收核心层转发的事件,为上层应用提供访问接口(如 /dev/input/eventX 设备节点)。
用户空间获取数据的两种方法:
(1)直接访问设备节点(比如/dev/input/event0,1,2,…);
(2)通过 tslib、libinput 这类库来间接访问设备节点,这些库简化了对数据的处理。
硬件设计
触摸控制引脚PD22,PD23挂载在TWI0总线上。
中断引脚为PD20,复位引脚为PD21。
软件配置
调试过程
功能验证
数据上报测试
查看触摸对应的具体输入事件
cat /proc/bus/input/devices执行命令,触摸屏幕有数据上报说明触摸功能正常。
hexdump /dev/input/event6经过以上步骤,触摸功能正常。
但是无法判断是否校准,Linux系统一般使用tslib库进行测试验证,Android系统直接开启“开发者模式”测试验证。
坐标校准测试
vim /etc/profileexport TSLIB_TSDEVICE=/dev/input/event6 指定触屏设备 export TSLIB_CALIBFILE=/etc/pointercal 指定触摸屏校准文件 pintercal 的存放位置 export TSLIB_CONFFILE=/etc/ts.conf 指定 TSLIB 配置文件的位置 export TSLIB_PLUGINDIR=/usr/lib/ts 指定触摸屏插件所在路径 export TSLIB_FBDEVICE=/dev/fb0 指定帧缓冲设备 export TSLIB_CONSOLEDEVICE=none 设定控制台设备为 none ,否则默认为 /dev/tty ,这样可以避免出现“open consoledevice: No such file or directory KDSETMODE: Bad file descriptor ” 的错误调试流程
(1)首先需要保证触摸芯片正常工作,芯片正常工作时,触摸屏幕,中断引脚会有变化。如果中断引脚没有变化,说明触摸芯片没有正常工作,这时要确认硬件设计,必要时需要触摸芯片原厂得FAE介入。
(2)配置和确认好driver(驱动)与device(dts),连接好硬件启动系统,使用i2c-tools(比如)确认能否正确识别到设备。如出现问题,根据log以及报错进一步排查。
排查思路
(1) 通过 i2cdetect 命令扫描设备识别情况,以及 I2C 地址是否正确(注:地址有 7bit 与 8bit 之分);
(2)检查 DTS 配置、总线以及引脚复用情况;
(3)确认 i2c 设备/控制器驱动是否加载;
(4) 确认 I2C slave 设备是否处于不正常工作状态(sensor 调试会经常遇到)。比如没有上电,错误的上电时序以及设备异常等。
(5)如读写操作返回错误(NACK/Timeout),可尝试降低clock-frequency(如设为100kHz)。
(1)确认I2C物理连接正常(SDA/SCL线、电源、上拉电阻);
(2)断开 i2c 外设,用万用表确认 SCL 和 SDA 上拉电压是否在 1.8/3.3V 附近;
(3)执行 i2cdetect -y 扫描的同时,使用示波器测量 i2c 总线波形,确认信号完整性。
(完)