zjw2012 发表于 2013-6-13 19:04:30

小弟在此求教一个I2C的问题

最近在做一个项目,卡在I2C通讯这边了,希望有人能帮我指点一下。
1、软件模拟I2C;
2、一个主机,两个从机;
3、主机电源是3.3的,从机都为5v
4、主机与从机连接的通信线串接100欧姆电阻
5、其中一个从机有响应,另外一个无响应,确定无响应器件正常。
6、使用逻辑分析仪观察波形正常,就是无ACK返回。
7、使用主机硬件I2C驱动,均正常。

麻烦高手帮我分析下会是什么原因?

gyzzg2030 发表于 2013-6-13 19:17:18

主机的延时不准?

zjw2012 发表于 2013-6-13 19:20:30

您具体指哪边的延时? 从机速度都设置在400K的我的模拟时钟也就125K。

zjw2012 发表于 2013-6-13 19:21:14

gyzzg2030 发表于 2013-6-13 19:17 static/image/common/back.gif
主机的延时不准?

您具体指哪边的延时? 从机速度都设置在400K的我的模拟时钟也就125K。

channe 发表于 2013-6-13 19:31:51

既然硬件的正常,那就用示波器抓下来对比一下好了。

channe 发表于 2013-6-13 19:32:25

CPU引脚注意要配置为开漏输出模式

gyzzg2030 发表于 2013-6-13 19:33:49

主机这边啊,一个从机可以一个不行,可能主机的延时跟一个从机的误差大,而硬件正常说明从机没什么大的误差

zjw2012 发表于 2013-6-13 20:02:20

channe 发表于 2013-6-13 19:31 static/image/common/back.gif
既然硬件的正常,那就用示波器抓下来对比一下好了。

对比过了,软件模拟的速度肯定慢点,但是基本的时序都是一样的,也看不出什么问题来。

zjw2012 发表于 2013-6-13 20:03:07

gyzzg2030 发表于 2013-6-13 19:33 static/image/common/back.gif
主机这边啊,一个从机可以一个不行,可能主机的延时跟一个从机的误差大,而硬件正常说明从机没什么大的误差 ...

从机都是硬件I2C。

zjw2012 发表于 2013-6-13 20:04:38

channe 发表于 2013-6-13 19:32 static/image/common/back.gif
CPU引脚注意要配置为开漏输出模式

这个cpu无法设置管脚状态,属于弱上拉。

deedeezi 发表于 2013-6-13 20:49:12

本帖最后由 deedeezi 于 2013-6-13 20:53 编辑

楼主你的2个从机是一样的吗?IIC通讯,永远只有1个从机和主机通讯,不和能有2个从机或以上和主机通讯的。。主机发一个地址,对应从机会有响应,其他不是的不会响应。。如果需要和其他器件通讯,只能以一个一个来。。
编辑修改原因:修改错别字

gallle 发表于 2013-6-13 21:06:43

检查一下从机地址是否一样?

逆流而上 发表于 2013-6-13 21:59:27

模拟I2C的软件包确定正确?

channe 发表于 2013-6-13 22:24:03

zjw2012 发表于 2013-6-13 20:04 static/image/common/back.gif
这个cpu无法设置管脚状态,属于弱上拉。

弱上拉可能会导致电平问题,总线电压不够。

zjw2012 发表于 2013-6-15 21:38:39

deedeezi 发表于 2013-6-13 20:49 static/image/common/back.gif
楼主你的2个从机是一样的吗?IIC通讯,永远只有1个从机和主机通讯,不和能有2个从机或以上和主机通讯的。。 ...

是的 我是分时操作的。不同地址。

zjw2012 发表于 2013-6-15 21:39:09

逆流而上 发表于 2013-6-13 21:59 static/image/common/back.gif
模拟I2C的软件包确定正确?

是正确的 这个确认过

xiaobenyi 发表于 2013-6-15 21:45:03

楼主可以单独接这个不正常的来调试,降低速度,I2C理论上可以无限低的速度
此外,要看看你的电路
是否有上拉电阻,电阻取值怎么样
示波器测量,看SCK是否有抖动,或者上升下降时间是否过长

zjw2012 发表于 2013-6-15 21:48:53

感谢大家的关注,问题查出来了,在此阐明一下问题所在,希望大家以后也注意一下。
首先,无响应的器件无法识别3.3V电平为高电平,后来解决电平问题后,又发现主机在输出1时,无响应从机输出的0无法将主机的1拉到低电平电位,后来将主机输出改为输入(高阻)利用外部上拉将总线拉至1,此时从机可顺利将总线拉低。
总结一下,主机利用IO高阻当作1,输出模式只输出0.问题解决,问题也归结于我没有仔细看从机的电气属性,从机驱低能力弱,电平识别范围窄。
再次感谢大家参与!

zjw2012 发表于 2013-6-15 21:55:07

xiaobenyi 发表于 2013-6-15 21:45 static/image/common/back.gif
楼主可以单独接这个不正常的来调试,降低速度,I2C理论上可以无限低的速度
此外,要看看你的电路
是否有上拉电 ...

谢谢,你说的也都是要点,这些我都注意过了,问题以查明,请看楼上自述。
页: [1]
查看完整版本: 小弟在此求教一个I2C的问题