I2C通信距离的问题

[复制链接]
8651|20
 楼主| kuliuyisi 发表于 2007-12-10 12:32 | 显示全部楼层 |阅读模式
做了一个数据采集系统。主控芯片是CY7C68013单片机,利用其I2C接口对从模块进行控制,从模块接到命令后动作,并采集数据,然后将数据送回单片机。整个总线长度30cm,不算长。试验中发现离单片机近的从模块采集数据老是不正常,远的好像没问题。有时,只接少数几个从模块时,离单片机近的从模块也正确,但是从模块数量较多时,例如12个,近的就不行了。不知问题出在哪,请指教!<br /><br /><br /><br />我尝试把单片机程序中从模块动作和采集数据之间的延时加大,好像也没有效果。
赤铸 发表于 2007-12-10 16:46 | 显示全部楼层

30cm, IIC, 勉为其难

光加大延时不行,还要降低&nbsp;IIC&nbsp;时钟频率<br />狠狠降!然后在接收端加小电容(nF&nbsp;级),再不行就承认失败
computer00 发表于 2007-12-10 16:53 | 显示全部楼层

我试过1m多长都没问题。

  
xwj 发表于 2007-12-10 16:53 | 显示全部楼层

这个长度肯定是没问题的,注意上拉电阻和时钟速度即可

  
maychang 发表于 2007-12-10 16:58 | 显示全部楼层

30cm可不算长,应该没有什么问题吧

从模块数量多,其输入电容均并联,必然比较大,减少上拉电阻看看。
赤铸 发表于 2007-12-10 17:19 | 显示全部楼层

看错了,把 30cm 看成 30m 了,呵呵

  
赤铸 发表于 2007-12-10 17:20 | 显示全部楼层

30cm 适当降低时钟频率,或减小上拉电阻就行了

上拉电阻一般不要小于&nbsp;1kohm
 楼主| kuliuyisi 发表于 2007-12-10 21:39 | 显示全部楼层

是近的有问题,不是远的

不是通信距离的问题,因为是近的有问题啊。<br />上拉电阻2.2K,I2C传输速率100K。<br />赤铸说狠狠讲传输速率,如何将?这个速率是CY7C68013支持的最低速率了。<br />你说在接收端加小电容(nF&nbsp;级),这个电容是加在哪两路之间?<br /><br />另外,我这个系统的从部件数量较多,大概有40个,每个部件输入电容7pF,而且我在总线上加了I2C中继器PCA9515,将总线一分为二,每段电容都可容纳400pF电容,整个总线电容达到800pF。<br /><br />各位说的都很有道理,回去我试试减少上拉电阻试试。还请大家帮忙给分析分析。<br />
赤铸 发表于 2007-12-10 21:46 | 显示全部楼层

我前面是看成了30m,所以提那样的“变态”建议

当时还在惊讶呢。30cm&nbsp;距离,走线很重要<br />1.&nbsp;全部在板子上走,还是经过了接插件?<br />2.&nbsp;布线是否考虑了回路串扰?<br /><br />用示波器看看总线上波形到底什么样(主要是上升沿),也许比什么都管用
 楼主| kuliuyisi 发表于 2007-12-10 23:04 | 显示全部楼层

所有的从模块均经过接插件和总线相连

SDA、SCL阻抗和延时如何测量?<br /><br />
 楼主| kuliuyisi 发表于 2007-12-11 12:59 | 显示全部楼层

今天看了波形

用示波器看了看,好像距离远的模块和近的模块没有什么分别。<br />各位大侠的回答基本上是针对总线不能正常工作的。<br />实际上是距离远的模块没有问题,近的有问题,如果总线存在设计上的错误,就应该都有问题了。不知是不是干扰的问题,越近干扰越大。可能还有驱动能力的问题。
xwj 发表于 2007-12-11 14:00 | 显示全部楼层

肯定不是干扰的问题,应该还是总线匹配、反射的问题

再就是你挂的东西太多了点,实在不行就换485吧
 楼主| kuliuyisi 发表于 2007-12-11 18:55 | 显示全部楼层

没有设计终端匹配电阻,我试验一下

  
yadog 发表于 2007-12-11 19:44 | 显示全部楼层

re

近的时候,并上几个电容(慢慢加)看下会出现什么现象<br /><br />估计是程序写到了临界状态
 楼主| kuliuyisi 发表于 2007-12-11 21:19 | 显示全部楼层

电容并在SDA和SCL之间吗?

  
赤铸 发表于 2007-12-11 21:44 | 显示全部楼层

接插件和总线拓扑都是问题

最好给出总线的分布图<br />通俗说,多结点的连接,有两种基本方式:有分叉的和无分叉的<br />一般认为后者更好,前者分叉不宜过长<br /><br />IIC&nbsp;总线跟其它总线不同,不便加并联终端电阻,可在分叉上适当串联小电阻(反正用接插件,好试),只要不影响逻辑电平,就适当大一些
赤铸 发表于 2007-12-12 00:07 | 显示全部楼层

关键是从接插件分出去的线(支线)多长?什么样的线?

  
pppking 发表于 2007-12-12 08:55 | 显示全部楼层

你向周立功咨询一下,他们正在代理一款IIC远程通讯芯片

可以将IIC信号传送2公里,肯定符合你的要求吧
 楼主| kuliuyisi 发表于 2007-12-12 09:22 | 显示全部楼层

每个从模块上有I2C转换芯片

每个从模块通过接插件和总线相连,信号线接到从模块上的一个PCA9501芯片,该芯片是用来讲串行数据转换成并行数据的I2C芯片,输入电容7pF,这个芯片紧挨着接插件,连线当然是电路板上的线了。I2C到该芯片以后就被转换了,可以说就没I2C什么事了,所以说总线上的信号到从模块上的的距离是比较短的,2个厘米吧。
 楼主| kuliuyisi 发表于 2007-12-12 14:06 | 显示全部楼层

试试二极管钳位功能来削弱反射信号

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

113

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部