I2C总线确实不适合远距离通信,尤其是需要使用线缆与I2C接口器件进行通信,这里的“不适合”并不是说不可以,这也是本文的重点。一般使用I2C总线,都是在用一个开发板上,或者距离比较近的,如果是远距离通信,比如说超过2米,这个时候对硬件就有特殊的要求了。
很多的文章说,I2C总线的线缆长度不要超过50cm,这个我觉得相对比较保守,我们做的测试是在实验室里,只要硬件参数合适,是能做到5~8米的,那么如何延长 I2C 通信线缆长度呢,也就是如何进行I2C远距离通信,下面几条经验是可以作为参考的:
(1)实验测试中,我们发现,在通信正常的情况下,I2C总线的上拉电阻与线缆长度是有比例关系的:
通信线缆越长,上拉电阻要越小。而通信线缆越短,上拉电阻要越大。比如:
① 通信线缆小于0.2米,一般可以采用10K的上拉电阻,这个也是很多I2C芯片的说明书中推荐的上拉电阻。
② 通信线缆在 0.2到2米之间,一般可以采用 4.7k 上拉电阻。
③ 通信线缆在2米以上,一般可以采用 1~2.2 k上拉电阻。
上拉电阻的范围一般在1K~10k之间,之所以有这个范围,可以简单的认为,电阻过小,功耗比较大,而且容易烧毁I2C接口,而电阻过大,会影响 信号的上升沿时间,也就是影响到了 时钟频率,会出现误码。
(2)远距离通信时,尽量使用 屏蔽 线缆,这个确实是有用的,能够很好的抗干扰。
(3)如果不考虑成本,可以采用 I2C 总线 中继芯片,比如P82B715、P82B96等,这些中继芯片的基本原理是,将I2C总线接口专为 差分信号,所以主机和从机之间,需要一对芯片,这样主机和从机之间是差分信号传输,也就克服了I2C总线的 线缆长度限制了。当然价格也是比较贵的,一对芯片要将近30元。
(4)通信 频率,这个很好理解,在各种通信中,有一个共同的规律,通信速率与误码率成正比,通信频率越低,误码率也越低,所以我们在与I2C设备通信的时候,尤其是距离比较远的,可以考虑降低通信频率。
————————————————
原文链接:https://blog.csdn.net/u012351051/article/details/100567445
|