IMX6双光Digi板添加AD7879触摸屏支持失败求助
排查IMX6 Digi开发板AD7879触摸屏初始化失败问题
你已经完成了内核配置、设备树修改和编译加载的基础操作,但系统里完全看不到AD7879的初始化痕迹——结合i2cdetect 2能探测到0x2c设备的情况,我们可以从以下几个关键环节逐一排查:
1. 设备树配置细节校验
首先要确保设备树的每一项配置都精准匹配硬件和驱动要求:
- Compatible字符串:AD7879节点的
compatible必须设为"adi,ad7879",驱动是靠这个字符串匹配设备的,写错的话驱动根本不会识别到设备。 - I2C总线匹配:你在设备树里挂载到
i2c3,但用户空间用i2cdetect 2找到设备,要确认IMX6的i2c总线编号映射——内核里的i2c3通常对应用户空间的i2c-2(因为编号从0开始),这部分没问题,但要检查i2c3节点本身的status是否为"okay",有没有被其他配置禁用。 - 中断配置:中断节点要确保:
interrupt-parent指向正确的gpio6节点,没有拼写错误;interrupts属性格式正确,应该是<15 IRQ_TYPE_EDGE_FALLING>(注意IMX的中断格式,有些版本需要明确指定触发类型的宏);- 检查
gpio6_15有没有被其他设备占用,比如在设备树里搜索gpio6 15或者GPIO6_IO15,看是否有其他节点也用了这个引脚; - 手动导出gpio验证:执行
echo 15 > /sys/class/gpio/export,然后echo in > /sys/class/gpio/gpio6_15/direction,触摸屏幕时看cat /sys/class/gpio/gpio6_15/value是否有电平变化,确认硬件连接正常。
- 节点启用状态:确认在
imx6qdl-ccimx6sbc.dts里启用AD7879节点时,status设为"okay",没有拼写错误(比如写成ok就无效)。
2. 内核配置依赖检查
除了你开启的CONFIG_INPUT_TOUCHSCREEN、CONFIG_TOUCHSCREEN_AD7879、CONFIG_TOUCHSCREEN_AD7879_I2C,还要确保以下依赖项已开启:
CONFIG_I2C:必须开启,AD7879是I2C设备,没有这个的话I2C总线都无法工作;CONFIG_INPUT:输入子系统核心,触摸屏依赖它创建/dev/input节点;- 如果是编译成模块,还要确保
CONFIG_MODULES和CONFIG_MODULE_UNLOAD开启,方便动态加载调试; - 可以用
grep -r "AD7879" .config查看所有相关配置,确认没有遗漏驱动需要的编译选项。
3. 驱动初始化与通信调试
既然dmesg里没有AD7879的日志,说明驱动根本没匹配到设备,或者初始化失败:
- 模块加载调试:如果是编译成模块,加载时加上调试参数(如果驱动支持的话):
insmod ad7879.ko debug=3,然后查看dmesg是否有新增的调试输出,能帮你定位初始化时的错误点; - I2C读写验证:用
i2cdump 2 0x2c读取AD7879的寄存器,比如读取ID寄存器(通常是0x00),看是否能得到正确的设备ID(AD7879的ID应该是0x79)。如果读取失败,说明I2C通信有问题——可能是总线速率不匹配(设备树里i2c3的clock-frequency是否设为AD7879支持的范围,比如100000Hz),或者硬件上的SDA/SCL引脚有虚焊; - 调试FS查看:开启
CONFIG_DEBUG_FS后,挂载debugfs:mount -t debugfs none /sys/kernel/debug,然后查看/sys/kernel/debug/i2c/2目录下是否有AD7879的设备条目,没有的话说明驱动没成功注册设备。
4. 硬件层面的最后验证
如果以上软件层面都没问题,就要检查硬件:
- 确认AD7879的复位引脚(RESET)是否正确连接并释放——有些硬件设计里复位引脚需要拉高才能让设备工作,检查这个引脚的电平;
- 触摸屏的供电电压是否符合AD7879的要求(通常是3.3V),测量VCC引脚的电压;
- 中断引脚的硬件电路:确认触摸时中断引脚会产生下降沿,用示波器或者万用表测量电平变化。
按照这个顺序排查,应该能找到问题所在——大概率是设备树的某个细节配置错误,或者中断引脚的硬件/配置问题。
内容的提问来源于stack exchange,提问作者Emmanuel
相关产品推荐
相关产品推荐

