关于一个多点触摸屏I2C通信问题(s3c6410)

时间:2022-11-23 20:39:00
我在自己的板子(s3c6410 linux2.6.29)上面接了一个多点触摸的屏幕,I2C接口的。自己写了一个驱动,调了好几天 ,出现的问题非常奇怪,忘高手解答下。

抱歉 源码没在这里 先说说大概吧。

触摸屏从设备地址是0x55 并且已经添加进mach-smdk6410.c里面,触摸屏是接在iic0上面的。

我想知道是驱动的问题还是什么问题。我用的标准的i2c的API 譬如i2c_transfer()等与设备通信,设备没有错误返回,但是又无法获取设备的版本信息。我把触摸屏取掉以后,运行驱动程序,居然在设备探测的时候还是没出错,即使我把i2c_board_info里面的设备地址换成别的,也不出错,我想问下到底是什么问题?

11 个解决方案

#1


1. 熟悉屏的datasheet
2.示波器观察数据逻辑图,分析是否有数据返回
3.适当降低传输速率,重新调试
4.万用表测试信号线是否有短路 开路情况
5.测量信号线上拉电阻大小,不大于10K为佳

#2


引用 1 楼 duojinian 的回复:
1. 熟悉屏的datasheet
2.示波器观察数据逻辑图,分析是否有数据返回
3.适当降低传输速率,重新调试
4.万用表测试信号线是否有短路 开路情况
5.测量信号线上拉电阻大小,不大于10K为佳


谢谢回复,其实我搞不懂的是为什么我把设备都拆下来了 程序里面居然还能给他发数据,而且看日志信息还像模像样的,最主要是不报错,连屏我都没接,居然还不报错,我想知道这个是什么原因?

#3


引用楼主 ice_coral 的回复:
我在自己的板子(s3c6410 linux2.6.29)上面接了一个多点触摸的屏幕,I2C接口的。自己写了一个驱动,调了好几天 ,出现的问题非常奇怪,忘高手解答下。

抱歉 源码没在这里 先说说大概吧。

触摸屏从设备地址是0x55 并且已经添加进mach-smdk6410.c里面,触摸屏是接在iic0上面的。

我想知道是驱动的问题还是什么问题。我用的标准的i2c的API 譬如i2c……


这是添加进mach-smdk6410.c里面的i2c设备程序:

/* i2c device name is "i2c_ts", address is 0x55, interrupt is eint15 */
static struct i2c_board_info touchscreen_i2c_devs[] __initdata = {
{
I2C_BOARD_INFO("i2c-ts", 0x55),
.irq = IRQ_EINT15,
},
};

我把设备地址0x55换成别的,结果还是一样,接屏与不接都一个效果。。。。

#4


关于一个多点触摸屏I2C通信问题(s3c6410)

上面这个摘自i2c协议文档,我想问下那两个设备之间的上拉电阻是必须的吗?我的触摸屏是直接接在i2c0上面的 并没有加这个电阻。诶,我们这边的硬件工程师一问三不知,真是太悲剧了。我对硬件也不太懂。

#5


你I2C_BOARD_INFO("i2c-ts", 0x55),这个玩意跟驱动里的匹配了吗?还有作为中断的GPIO配置了吗?触摸屏代码中有没有进行初始化,在probe函数里面打印些log看看你跑到哪里了,如果没有,我建议你好好看看你的调用关系

#6


不知问题解决没有,根据我的经验,首先应该从硬件找起,看IIC工作起来没有,中断信号有没有发出,如果能够提供一下datasheet的信息,可以给一些更具体的说明,我对硬件相对熟悉一些

#7


先从硬件排查下I2C有没有工作起来。
然后确认备没有错误返回,还是根本没有返回。
有示波器的话,测下I2C的信号,以及时序是否满足器件资料描述。

#8


我觉得是你的驱动问题。PROBE都没过,就检查一下驱动初始化模块。
5L正解。

#9


我做正在做几乎跟你类似的工作,你的 I2C_BOARD_INFO("i2c-ts", 0x55)中的i2c-ts 与你的I2C驱动中i2c_device_id中的name以及i2c_driver中的name一直,如果一致了你的probe函数才可能run。

#10


主从设备没有握手成功,SLAVE 地址是0X55 应该要右移一位(还是左移??),因为I2C地址是7 BIT 的。给你一个参考吧

#11


该回复于2011-03-31 10:06:55被版主删除

#1


1. 熟悉屏的datasheet
2.示波器观察数据逻辑图,分析是否有数据返回
3.适当降低传输速率,重新调试
4.万用表测试信号线是否有短路 开路情况
5.测量信号线上拉电阻大小,不大于10K为佳

#2


引用 1 楼 duojinian 的回复:
1. 熟悉屏的datasheet
2.示波器观察数据逻辑图,分析是否有数据返回
3.适当降低传输速率,重新调试
4.万用表测试信号线是否有短路 开路情况
5.测量信号线上拉电阻大小,不大于10K为佳


谢谢回复,其实我搞不懂的是为什么我把设备都拆下来了 程序里面居然还能给他发数据,而且看日志信息还像模像样的,最主要是不报错,连屏我都没接,居然还不报错,我想知道这个是什么原因?

#3


引用楼主 ice_coral 的回复:
我在自己的板子(s3c6410 linux2.6.29)上面接了一个多点触摸的屏幕,I2C接口的。自己写了一个驱动,调了好几天 ,出现的问题非常奇怪,忘高手解答下。

抱歉 源码没在这里 先说说大概吧。

触摸屏从设备地址是0x55 并且已经添加进mach-smdk6410.c里面,触摸屏是接在iic0上面的。

我想知道是驱动的问题还是什么问题。我用的标准的i2c的API 譬如i2c……


这是添加进mach-smdk6410.c里面的i2c设备程序:

/* i2c device name is "i2c_ts", address is 0x55, interrupt is eint15 */
static struct i2c_board_info touchscreen_i2c_devs[] __initdata = {
{
I2C_BOARD_INFO("i2c-ts", 0x55),
.irq = IRQ_EINT15,
},
};

我把设备地址0x55换成别的,结果还是一样,接屏与不接都一个效果。。。。

#4


关于一个多点触摸屏I2C通信问题(s3c6410)

上面这个摘自i2c协议文档,我想问下那两个设备之间的上拉电阻是必须的吗?我的触摸屏是直接接在i2c0上面的 并没有加这个电阻。诶,我们这边的硬件工程师一问三不知,真是太悲剧了。我对硬件也不太懂。

#5


你I2C_BOARD_INFO("i2c-ts", 0x55),这个玩意跟驱动里的匹配了吗?还有作为中断的GPIO配置了吗?触摸屏代码中有没有进行初始化,在probe函数里面打印些log看看你跑到哪里了,如果没有,我建议你好好看看你的调用关系

#6


不知问题解决没有,根据我的经验,首先应该从硬件找起,看IIC工作起来没有,中断信号有没有发出,如果能够提供一下datasheet的信息,可以给一些更具体的说明,我对硬件相对熟悉一些

#7


先从硬件排查下I2C有没有工作起来。
然后确认备没有错误返回,还是根本没有返回。
有示波器的话,测下I2C的信号,以及时序是否满足器件资料描述。

#8


我觉得是你的驱动问题。PROBE都没过,就检查一下驱动初始化模块。
5L正解。

#9


我做正在做几乎跟你类似的工作,你的 I2C_BOARD_INFO("i2c-ts", 0x55)中的i2c-ts 与你的I2C驱动中i2c_device_id中的name以及i2c_driver中的name一直,如果一致了你的probe函数才可能run。

#10


主从设备没有握手成功,SLAVE 地址是0X55 应该要右移一位(还是左移??),因为I2C地址是7 BIT 的。给你一个参考吧

#11


该回复于2011-03-31 10:06:55被版主删除