大神们早上好,在开发中遇到了一个头疼的问题,想请教大家。
我的cpu的i2c引脚通过 DS90U903Q/4Q 访问触摸屏(tsc2003),但是i2c发出去的地址收不到ack。下面是我检查的现象:
写直接通过cpu的i2c访问触摸屏地址(0x48)测量触摸屏端的i2c信号,可以测到触摸屏端可以发出ack,但是ack信号到达不了cpu端,原因肯定是903/4Q阻止了信号。于是我就想初始化903Q的那些寄存器,但是cpu发出903Q的地址(0x58)后,收不到ack,原因我觉得是i2c地址写错了,但是我看手册,地址确实是0x58,到这里就没头绪了。于是我又从0x58到0x5e都试了一遍,都没收到ack。到此,我没办法了,希望大神指点。
Carter Liu:
能不能把电路图传一下
chi chan:
回复 Carter Liu:
of course,其实跟官方的原理图一样
chi chan:
回复 Kailyn Chen:
@ Kailyn Chen
是这样的,我用的是Linux内核里飞思卡尔封装的API,我也看了其实现,最终的底层是这样的:writeb(msgs->addr << 1, i2c_imx->base + IMX_I2C_I2DR); 也就是说,我写地址0x58的话,其函数内会实现对0x58左移一位,即变为0xb0。这样的话我的7位地址就应该对吧。。。
chi chan:
回复 Kailyn Chen:
恩。。。那有两个问题:
1、要看remote的地址,是指cpu通过i2c直接写remote的地址吗。
2、903q不需要额外的设置吗,我看903q里面有个寄存器是写remote slave的地址
chi chan:
回复 Kailyn Chen:
问题解决了。
1、首先要初始化903q器件的0x07寄存器内容为触摸屏地址
2、之后所有的操作均操作触摸屏的地址
TI中文支持网




