[MCU] I2C通信距离到底是有什么决定的???疑惑求助

[复制链接]
 楼主| hsxs 发表于 2018-8-28 13:20 | 显示全部楼层 |阅读模式
最近在做一个项目,就是传感器是I2C 通信的;
在开发板上面吧都是正常通讯,后来根据需求加长传感器的线;发现通讯不成功,
 楼主| hsxs 发表于 2018-8-28 13:23 | 显示全部楼层
我用示波器先测量了 单片机发出的数据,短距离时。示波器显示的波形是正常的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| hsxs 发表于 2018-8-28 13:26 | 显示全部楼层
但是我一将导线延长至5米,我的单片机IO口出来的数据就不对了,SDA波形最后面被拉低了不少

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| hsxs 发表于 2018-8-28 13:27 | 显示全部楼层
各位有遇到过需要I2C长距离通讯过的项目吗,,来讨论讨论吧
Cjy_JDxy 发表于 2018-8-28 13:40 | 显示全部楼层
I2C通讯就是距离不能太长的
lihui567 发表于 2018-8-28 14:57 | 显示全部楼层
I2C就是IC和IC之间通讯,距离很近,曾经试过2m没问题,速率不要太高。
距离主要由线间电容决定,可以用中继延长。
tom_xu 发表于 2018-8-28 16:04 | 显示全部楼层
I2C通信没听说过要几米以上的吧,几米以上用485吧。
tom_xu 发表于 2018-8-28 16:05 | 显示全部楼层
I2C通信本身就是用在同一块电路板上的芯片和芯片的通信。
gx_huang 发表于 2018-8-28 16:17 | 显示全部楼层
看波形,就知道你的I2C驱动有问题。
I2C总线,只能拉低,置高只能靠外部上拉电阻。
也就是说,下降沿可以比较陡峭,但是上升沿,必然是RC充电的波形。
速度降低一些,没有干扰的场合,5m是可以的。最好用屏蔽线,只是分布电容更大,但是干扰没有了。
 楼主| hsxs 发表于 2018-8-28 16:58 | 显示全部楼层
gx_huang 发表于 2018-8-28 16:17
看波形,就知道你的I2C驱动有问题。
I2C总线,只能拉低,置高只能靠外部上拉电阻。
也就是说,下降沿可以比 ...

是指第二幅示波器的图吗? 感觉后面的波形被拉低了。我也不知道是什么导致的。把线缩短之后 波形就是第一幅图那么干净了
 楼主| hsxs 发表于 2018-8-28 16:59 | 显示全部楼层
hsxs 发表于 2018-8-28 16:58
是指第二幅示波器的图吗? 感觉后面的波形被拉低了。我也不知道是什么导致的。把线缩短之后 波形就是第一 ...

我用逻辑分析仪测过,CLK的脉宽都是14us 到13us之间的,太快了吗?
雪山飞狐D 发表于 2018-8-28 17:40 | 显示全部楼层
本帖最后由 雪山飞狐D 于 2018-8-28 17:42 编辑

    距离长了,线间电容导致信号波形被过滤成正弦波了,I2C上拉电阻10K , 跟线间电容形成RC低通滤波器,工业长距离一般用4-20 mA 电流模式通信或者485一类的差分信号,信号线额定阻抗

评论

[url=home.php?mod=space&uid=547165]@雪山飞狐D[/url] :好的,谢谢你的意见  发表于 2018-8-28 20:18
[url=home.php?mod=space&uid=2453118]@hsxs[/url] :你是实在要长距离用就加一个便宜的单片机,另外一边短距离读写数据,然后通过232传过来  发表于 2018-8-28 20:13
[url=home.php?mod=space&uid=547165]@雪山飞狐D[/url] :没办法,,,有需求。。长距离测温需要用到。最长5M,本来是想用单总线通讯的方式,但是会影响到通讯  发表于 2018-8-28 20:12
[url=home.php?mod=space&uid=2453118]@hsxs[/url] :不要这样长距离用,人家设计标准就不是给你长距离用的  发表于 2018-8-28 20:11
所以一方面是要想办法减小线间电容,另一方面是要减小上拉电阻 是吗???  发表于 2018-8-28 19:30
caoenq 发表于 2018-8-28 20:18 来自手机 | 显示全部楼层
告诉你个秘密,把上拉电阻换成500欧,或许可以解决问题
 楼主| hsxs 发表于 2018-8-28 21:01 | 显示全部楼层
caoenq 发表于 2018-8-28 20:18
告诉你个秘密,把上拉电阻换成500欧,或许可以解决问题

哈哈哈好的好的
Prry 发表于 2018-8-28 22:57 | 显示全部楼层
TTL电平只适合板间通信。i2c增加通信距离,找电平转换芯片,一个收一个发,以前用过NXP的,忘记什么型号了。度娘去搜搜或者nxp官网找找。
Prry 发表于 2018-8-28 22:58 | 显示全部楼层
hsxs 发表于 2018-8-28 21:01
哈哈哈好的好的

这个不可靠,产品量产卖出去,一个出问题就有你折腾,加电平转换芯片吧!
henangongda123 发表于 2018-8-29 08:03 | 显示全部楼层
caoenq 发表于 2018-8-28 20:18
告诉你个秘密,把上拉电阻换成500欧,或许可以解决问题

500!!
gx_huang 发表于 2018-8-29 08:21 | 显示全部楼层
hsxs 发表于 2018-8-28 16:58
是指第二幅示波器的图吗? 感觉后面的波形被拉低了。我也不知道是什么导致的。把线缩短之后 波形就是第一 ...

可以明确的告诉你,是你的I2C驱动程序错了,GPIO模式配置错了。
只要改为外部电阻上拉,上拉电阻可以适当减少,5m长度应该没有问题。
如果你还是不理解,不可能做好这个项目的。
可以肯定,90%以上的人,都搞不清楚I2C的规范为什么要外部电阻上拉。
正是因为你把GPIO配置成推挽输出,才导致一系列的问题。
由于线间的分布电容,I2C的2个信号互相干扰,你甚至可以对地加电容,减少互相的干扰。
gx_huang 发表于 2018-8-29 08:39 | 显示全部楼层
补充一下,I2C长线出现问题,原因有2个:
1、SDA和SCL之间的分布电容太大
2、SDA/SCL和GND之间的分布电容太大
知道原因了,你就可以直接短线模拟了,无非加3个电容就可以模拟了,也方便查找原因。
 楼主| hsxs 发表于 2018-8-29 11:22 | 显示全部楼层
gx_huang 发表于 2018-8-29 08:21
可以明确的告诉你,是你的I2C驱动程序错了,GPIO模式配置错了。
只要改为外部电阻上拉,上拉电阻可以适当 ...

我用的是新塘的51单片机。管脚配置成了开漏,他手册上面也说了推荐模式。。我现在就是觉得分布电容的问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

96

帖子

0

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