微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > i2c总线访问 DS90UB903Q 收不到回应信号

i2c总线访问 DS90UB903Q 收不到回应信号

时间:10-02 整理:3721RD 点击:

大神们早上好,在开发中遇到了一个头疼的问题,想请教大家。

我的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。到此,我没办法了,希望大神指点。

能不能把电路图传一下

应该是地址搞错了,I2C 为7位寻址,我看了下datasheet,DS90U903Q的7位从机地址为1011000, 后面第八位为读写位,如果写操作的话补零,所以为10110000即0xB0,你说的0x58为前面补零,这样的话可能就把7位地址弄错了。

of course,其实跟官方的原理图一样

@ Kailyn Chen

是这样的,我用的是Linux内核里飞思卡尔封装的API,我也看了其实现,最终的底层是这样的:writeb(msgs->addr << 1, i2c_imx->base + IMX_I2C_I2DR); 也就是说,我写地址0x58的话,其函数内会实现对0x58左移一位,即变为0xb0。这样的话我的7位地址就应该对吧。。。

这样的话地址是没问题的,写操作在7位寻址后加零,如果读操作,后加1.

哦,又看了下你的问题,你的架构是否这样的?CPU想通过I2C访问触摸屏,这需要使用DS90UB903Q的remote I2C特性。 在这个架构中,可以进行3种I2cC通讯。

第一,就是host和DS90UB903Q之间的I2C通讯。

第二,host和DS90UB904W间的I2C通讯

第三,host和远程的touch panel之间的I2C通讯。

你是想实现第三种情况,这样的话,I2C地址要看remote I2C 地址。

恩。。。那有两个问题:

1、要看remote的地址,是指cpu通过i2c直接写remote的地址吗。

2、903q不需要额外的设置吗,我看903q里面有个寄存器是写remote slave的地址

1. 如果CPU想和触摸屏直接通信的话,是需要写remote的地址的,而不是903Q的地址。

2.你是CPU和触摸屏进行I2C通信,这个I2C的地址应该是remote slave的地址。

问题解决了。

1、首先要初始化903q器件的0x07寄存器内容为触摸屏地址

2、之后所有的操作均操作触摸屏的地址

感谢你的分享。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top