Maksimum I2C Veriyolu Uzunluğu?


38

İki I2C cihazını (I2C master-> I2C slave) bağlamak için kullanılabilecek maksimum kablo uzunluğu nedir?

Evet, I2C'nin pano içi iletişim için gerçekten tasarlandığını biliyorum. Demoyu desteklemek için birden fazla I2C bağımlısı için ortak bir I2C veri yolu kullanma "tasarım amacı" ile görevlendirildim.

Netlik sağlamak için, 100 kHz standart I2C veri yolu hızını varsayalım.


1
Maksimum uzunluk, uzunluk tarafından verilen kapasitansla oynamaya gelir. Çok fazla kapasitans ve hızınızı etkileyebilir. Her zaman olduğu gibi, bu bağlı.
Gustavo Litovsky

@GustavoLitovsky Kapasitans konusunda haklısın. Ayrıca, kullanılan kabloların türüne (korumalı ve korumasız) bağlıdır. En çok genel bir rehberle ilgileniyorum.
Nate,

2
@Nate Guideline: 400pF maksimum net veri yolu kapasitansı. (Biraz soru ile ilgili: Aşırı büyümüş bir I2C otobüsünün anıları .)
Nick Alexeev

1
I2C = Inter-Entegre Devre veriyolu. Kutuların arasındaki uzun mesafeler için tasarlanmamıştır ve kesinlikle 400kHz'de değildir.
Spehro Pefhany

1
Hesaplamalar dışında bazı kişisel deneyimlerimi atmak istedim. Dev karttan I2C'ye USB konvertöre, yaklaşık 3ft'lik blendajsız kabloyla bir demo yaptım. Güzel görünmüyordu, ancak zamanın% 90'ını çalıştı.
mcmiln

Yanıtlar:


16

Hızlı mod ve direnç çekme için, kapasitenin bu NXP belgesi I2C veri yolu teknik özellikleri ve kullanım kılavuzuna göre, 200pF'den az olması gerekir .

Mevcut kaynak çekme işlemlerinde 400pF'ye geçebilirsiniz, ancak dirençlerle değil.

Kablonuz 20pF / 30cm ise ve 50pF'lik bir daha kaçak ve giriş kapasitansınız varsa, 2.25m kablo uzunluğu ile sınırlandırılmışsınızdır. Farklı varsayımlar, farklı sayılara yol açacaktır.


1
@KrunalDesai Yukarıda bağlantı verilen NXP belgesinde özellikle belirtilmiştir. I2C-bus özellikleri ve kullanım kılavuzu
Spehro Pefhany

1
Gerçek dünyadan bir örnek olarak, Nintendo Wii'nin "Wiimote" u , Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) gibi çevre birimleri ile iletişim kurmak için 400kHz I2C ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) kullanıyor Görüyorsunuz, yaklaşık 1m olan bir kablo var. Pasif uzatıcılar ilave 1m ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ) vermek için satılıyor , bu yüzden zorluyorlar, ancak 2.25m sınırında kalıyorlar.
Rob Starling

16

10,25 ve 100m gibi çılgınca sondaj uzunlukları mükemmel bir şekilde mümkün ve hızlı bir şekilde bir araya getirmem gerektiğinde yöntemi sık sık kullanıyorum (UART ile I2C değil, ancak yöntem geçerli). Yine de tam olarak en iyi yol değil.

Anahtar, giriş voltajı eşiğinizi bilmektir. Topraklama kablosundaki voltaj düşüşünün bunun çok altında olduğundan emin olun, aksi takdirde yüksek toprak potansiyeline sahip bir verici voltajı yeterince düşük tutamaz. Yer ofsetleri için tolerans eksikliği IMHO, RS485 veya alıcı vericilerin kullanılmasının en büyük nedenidir (CAN üzerinden I2C, birkaç uygulama notunda belirtilmiştir).

İdeal olarak, tüm cihazlar kendi duvar siğillerine ve bataryalarına sahip olacak ve cihazlar arasında topraklama kablosu üzerinden güç gönderilmeyecektir.

Ancak, örneğin CAT5'i ele alalım. CAT5, 52pf / m'den daha yüksek olamaz veya CAT5 değildir.

100m 52pf kablonun kapasitesi 5200pf veya 5.2nf'dir.

5.2n çarpı 20 kohm (çekme) yaklaşık 104 mikrosaniye bir zaman sabiti verir. Bu, hızı yaklaşık 10kHz ya da öylesine sınırlar.

2.2 kohm pulls'ları kullanarak, muhtemelen 100 kHz'e erişebilirsiniz.

Aygıtların SDL ve SCK'da, kullandıkları büyük kapasitif yük nedeniyle, 180 veya 200 ohm gibi bir direnç göstermesi gerektiğini duydum.

Ama dürüst olmak gerekirse, I2C uzun mesafeler boyunca hiç de uygun değildir. Normal UART ile kullanılan CAN alıcı vericileri veya RS485, çok iyi bir hata korumasına, ESD direncine, hıza, mesafeye, vb. Kadar güçlü bir çözümdür, bir yonga veya öylesine bir fiyatla, toprak ofsetleri sizin kadar önemli değil veri ile birlikte güç taşımak için ücretsiz.

Tek dezavantajı, bir alıcı-vericinin 70ma iletim ve 1 veya 2ma sadece dinlemesine ulaşabilmesidir, bu nedenle I2C veya doğrudan TTL UART, aşırı düşük güç durumlarında yararlı olabilir, ancak gerçekte gönderim için ne kadar zaman harcadığınızı düşünün.


7

USB sensörleri yapan bir şirkette çalışıyorum. Bunların çoğu I2C sensör yongalarına dayanır, bu cihazlar ikiye bölünebilir, böylece CPU kısmını bir yere ve sensör kısmını başka bir yere takabilirsiniz. Cihaz CPU ve I2C sensörleri arasındaki I2C bağlantısı üzerinde oldukça fazla test yaptık. 100 kHz'de, iyi bir hata kurtarma protokolüyle, temel kablolar kullanılarak 25 m'ye kolayca ulaşılabilir. CAT5 kablo ile bir kez 100 metreye bile ulaşabildik.


USB kablo uzunluğu hakkında konuşuyorsunuz gibi geliyor . OP, ham I2C kablolarını soruyor . Bu tamamen farklı bir konudur. Hatalıysam, cevabını düzenle, ben de oyumu kaldıracağım.
DoxyLover

1
25m, bir usb için bile oldukça fazla ...
Vladimir Cravero

3
Hayır, gerçekten cihaz CPU ile I2C sensör çipleri arasındaki I2C bağlantısından bahsediyorum , ana bilgisayar ve CPU arasındaki USB bağlantısı değil. İşte bir örnek: yoctopuce.com/EN/products/yocto-meteo/doc/…
martinm

1
I2C ve güç için bükümlü çift kullanmak isteseydiniz, hangi çifti birlikte bükersiniz? (SDA, SCL), (VCC, GND) veya (SDA, GND), (SCL, VCC)?
Cano64

3
İdeal olarak, bükümlü çift kullanmazsınız. Bükümlü çift dengeli sinyaller için kullanışlıdır. Başka bir kablonuz yoksa, toprakla sinyal çevirin. Gerçekten sadece dört teliniz varsa, uzak ucun ne kadar güç harcadığını düşünün - GND için sadece bir kablo kullanmaya başlamadan önce - tolere edilebilir bir toprak kayması ile bitebilirsiniz. Genellikle eski Cat5 kablosunu kullanırım (daha yüksek değil! Çift kalkan gerek duymadığınız kapasiteye katkıda bulunur) bir çift toprak, bir çift + 5V ve SDA + GND ve SCL + GND çiftleriyle.
Matthias Urlichs

4

IIC senkronize bir protokoldür ve bu nedenle mesafe ve gürültüyle ilgili sistem gereksinimlerini karşılamak için keyfi bir şekilde yavaşça çalıştırılabilir.

IIC'yi bir kablo üzerinden , 1990'lardaki ACCESS.bus'tan , EDID bilgilerini video ekranlarından almak için nasıl kullanıldığına dek kullanmanın birçok örneği vardır .


Diğer bir örnek ise, Wii Nunchuck, Wii Remote cihazına I²C üzerinden 4 ayak korumalı bir kablo kullanarak bağlanmış.
tcrosley

4

NXP'nin P82B96'sı gibi bir şey, veri yolundaki voltaj seviyelerini değiştirerek daha uzun mesafelere izin vermek için kullanılabilir.

Veri sayfası 3m, 25m, 100m ve 250m I2C kablo uzunlukları için örnekler içerir.

Benzer işlevselliğe sahip başka cipsler var.


NXP çipindeki sorun, iki kat daha fazla kablo gerektirmenizdir. Başka fikrin var mı? Bulduğum iki yönlü IC'ler + 5V'nin üstüne çıkmıyor.
Matthias Urlichs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.