打印

I2C总线通信距离的问题!

[复制链接]
9366|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kuliuyisi|  楼主 | 2007-12-10 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做了一个数据采集系统。主控芯片是CY7C68013单片机,利用其I2C接口对从模块进行控制,从模块接到命令后动作,并采集数据,然后将数据送回单片机。整个总线长度30cm,不算长。试验中发现离单片机近的从模块采集数据老是不正常,远的好像没问题。有时,只接少数几个从模块时,离单片机近的从模块也正确,但是从模块数量较多时,例如12个,近的就不行了。不知问题出在哪,请指教!



我尝试把单片机程序中从模块动作和采集数据之间的延时加大,好像也没有效果。

相关帖子

沙发
chunyang| | 2007-12-10 13:56 | 只看该作者

I2C是内部通讯总线,不宜距离过远

你是用导线互连还是在同一PCB上?如果前者,应该是驱动能力问题,连接也要注意不能采用“T”型互连;如果是后者,那就是系统噪声过大了,需要在PCB布局、走线上进行改进。

使用特权

评论回复
板凳
kuliuyisi|  楼主 | 2007-12-10 21:48 | 只看该作者

30cm不算远

谢谢chunyang的回答。我的I2C总线是在一个电路板上,通过接插件和主控器件相连。“T”型互联什么意思?我的各个从模块就是与总线垂直,是“T”型吗?I2C总线的布线顺序是按规范来的。
可能确实是驱动能力不够引起的,如何进一步提高驱动能力呢?我在总线上使用一片PCA9515将总线一分为二,整个总线电容提高为800pF。

使用特权

评论回复
地板
chunyang| | 2007-12-10 23:46 | 只看该作者

T型连接指节点到总线以字母T的连线方式接入

    容易造成信号的反射干扰,应单点进单点出,尤其是总线负载较重节点数较多时,从你的描述看应该是T型连接了。驱动能力强这个问题的影响会减弱,可以用总线驱动片将总线分成多个域,或者用驱动能力较强的芯片试试,具体型号根据手册选择。顺便一说,30cm对I2C而言已是长距了。

使用特权

评论回复
5
kuliuyisi|  楼主 | 2007-12-11 12:55 | 只看该作者

情况不全是这些问题造成的

因为在远端的从模块正常,说明驱动没有问题,距离就更不是问题了,连我在固件中设置的延迟也应该没有问题,不然就是距离远的有问题,近的没问题才对。
看了您的回答,感觉是干扰造成的,所有的从模块均是通过接插件与总线相连,距离控制芯片近的应该受干扰较大。这个解决起来就比较麻烦了,整个系统的物理结构是不能改的,不知道在控制板上将控制芯片往远处挪一些行不行?

使用特权

评论回复
6
chunyang| | 2007-12-11 13:31 | 只看该作者

跟驱动能力、距离、节点数、信号汇接方式、干扰等都有关

是综合影响的结果,也许打破其中一个环节就可能得以很大改善,但只能多尝试了。

使用特权

评论回复
7
xwj| | 2007-12-11 13:47 | 只看该作者

其实,最快解决问题的方法,就是:

用示波器抓去波形看看!

使用特权

评论回复
8
kuliuyisi|  楼主 | 2007-12-13 23:32 | 只看该作者

两段总线的负载能力不同啊

使用PCA9515将总线一分为二,原理上两段总线的输入电容负载均为400pF,结果我发现第二段总线容纳从模块的能力比第一段大很多。无论是走线上,还是连接方式上,两段总线都无明显区别,应该说两段总线的导线产生的输入电容差别不大,而且第二段总线的距离更远。第一段总线上的问题基本还是离控制芯片近的有问题,远的好些。

看来不是干扰、距离、节点数、T型网络节点到总线的距离等问题,不然第二段也不会正确。
用示波器看两段总线的波形,差不太多,第一段的波形是没有第二段上升沿那么陡峭。
好像I2C没有匹配电阻的说法,如果要加匹配电阻,需要加在哪几根线之间?

使用特权

评论回复
9
iampoor| | 2007-12-14 16:42 | 只看该作者

I2C好像只有对负载电容有要求 没有距离一说吧

当然还有驱动能力

使用特权

评论回复
10
kuliuyisi|  楼主 | 2007-12-14 18:08 | 只看该作者

距离远了当然负载电容就大了

导线本身也有电容啊

使用特权

评论回复
11
iampoor| | 2007-12-14 19:54 | 只看该作者

所以应该说电容问题 不是距离问题

使用特权

评论回复
12
kuliuyisi|  楼主 | 2007-12-15 10:52 | 只看该作者

我感觉也是

但是不知道为何第二段的电容就没有问题呢?我现在想用开关上拉电阻试试

使用特权

评论回复
13
gzparty| | 2007-12-22 02:44 | 只看该作者

我就用电缆连了1米多。不过时钟要慢 50K内

使用特权

评论回复
14
demosky| | 2007-12-23 19:59 | 只看该作者

信号线是否上拉(见内)

信号线是否上拉了,一般I2C总线是要求可以线与的,所以一般是OD门电路,这种电路的特点是只能输出0,上拉电阻才可以辅助上拉到1,如果问题解决,请说说是怎么解决的,一起进步,呵呵。sentian@126.com

使用特权

评论回复
15
ghostami| | 2008-1-20 19:04 | 只看该作者

30cm不算远

我们用于6m的系统,也正常工作,看看波形,注意负载电容不要大了。一切按照IIC的技术要求执行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

113

帖子

0

粉丝