RK3568触摸屏驱动调试总结

文章详细描述了RK3568CPU如何通过I2C总线与WD87XX触控板进行通信,包括触控板连接的I2C端口、寄存器地址、HID地址以及中断配置。在设备树配置中指定了触控板的中断处理和注册信息,并验证了hid-over-i2c驱动的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件电路分析

RK3568 CPU通过I2C与触控板外设wdt87xx连接。
首先要根据电路图获取如下I2C的信息:

项目Value
接在哪个I2Ci2c1
I2C 寄存器地址0x2c
HID 地址0x20
中断B5

1、接在哪个I2C
如图,1接在I2C1:
在这里插入图片描述
2、使用哪个GPIO引脚接收触控板的中断
如图:
CPU使用的是GPIO 0 B5引脚来接收触控板的中断
在这里插入图片描述

3、I2C1的寄存器地址0x2c
这个需要硬件工程师给出。
可以通过i2cdetect -r 1检测一下。
root@RK356X:/# i2cdetect -r 1
在这里插入图片描述
I2C1的0X2C位置挂载了一个I2C设备,就是本次的WD87XX触控。
I2C2的0X50位置挂载了一个I2C设备,这是RK628D。

4、HID 地址
查3568手册确认地址。

配置设备树

735 &i2c1 {
736 status = “okay”;
737
738 i2c-scl-rising-time-ns = <345>;
739 i2c-scl-falling-time-ns = <11>;
740 clock-frequency = <400000>;
741
742 touchpad: touchpad@2c {
743 compatible = “hid-over-i2c”;
744 interrupt-parent = <&gpio0>;
745 interrupts = <RK_PB5 IRQ_TYPE_LEVEL_LOW>;
746 pinctrl-names = “default”;
747 pinctrl-0 = <&touchpad_irq_gpio>;
748 reg = <0x2c>;
749 hid-descr-addr = <0x0020>;
750 };
751 };

其中,touchpad_irq_gpio定义:
491 touchpad {
492 touchpad_irq_gpio: touchpad-irq-gpio {
493 rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
494 };
495 };

为什么要这么配?
1、确定TOUCHPAD的寄存器地址REG=2c
2、确定TP挂在I2C1,因此要修改I2C的信息,通过 &i2c1来引用并加以修改。
3、和供应商确认支持的驱动程序是hid-over-i2c
4、HID地址可以向供应商索取相关的模板。

三、驱动工作
1、drivers hid hid-over-i2c 在工作
2、中断
cat /proc/interrupts| grep hid-over-i2c
122: 2 0 0 0 gpio0 13 Level hid-over-i2c

证实其工作正常。触发产生了中断。

### RK3568 平台触摸屏调试方法 #### 配置 TSC2007 触摸屏控制器 对于基于RK3568平台的应用,当采用TSC2007作为电阻式触摸屏控制器时,需关注其驱动程序的配置与设置。这涉及到确保内核已加载相应的模块并正确识别硬件接口参数[^1]。 ```bash modprobe tsc2007 dmesg | grep tsc2007 ``` 上述命令用于加载TSC2007驱动模块,并通过`dmesg`查看系统日志确认设备是否被成功探测。 #### 设置输入设备分类 针对多屏显示环境下的触摸交互需求,在代码层面可通过调整输入设备类别实现特定功能绑定。例如,为了使某一外接显示屏响应来自指定源的触控事件,则可在相应位置加入如下语句: ```cpp device->classes |= InputDeviceClass::EXTERNAL; ``` 此操作意在标记该输入装置为外部类型,从而影响后续的数据路由逻辑[^3]。 #### 实现触摸数据读取 完成初步设定之后,开发者可以编写应用程序来获取实际的坐标信息。下面给出了一段简单的Python脚本示范如何利用Linux evdev库处理原始事件流: ```python import evdev from evdev import InputDevice, categorize, ecodes def read_touch_events(device_path='/dev/input/eventX'): device = InputDevice(device_path) for event in device.read_loop(): if event.type == ecodes.EV_ABS: print(categorize(event)) ``` 这段代码会持续监听选定路径下代表物理按键或传感器状态变化的消息队列,并筛选出绝对定位类型的记录加以展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值