Bir i2c master kaç tane i2c kölesini destekleyebilir?


17

Bir i2c master'ın kullanabileceği maksimum sayıda i2c slave var mı? Fiziksel sınırlayıcı faktörler nelerdir?


1
7 bit adresiniz var. Bu 127 köleye kadar hitap edebileceğiniz anlamına gelir.
Botnic

Teşekkürler. Mevcut sürücü, kapasitans veya köle sayısının 127'ye ulaşmasını engelleyen fiziksel sınırlayıcı faktörler var mı?
user768421

1
@Botnic, i2c anahtarlarını, hub'ları, arabellekleri, tekrarlayıcıları ve bir veri yolunu genişletmenizi sağlayan herhangi bir i2c cihazını tamamen yok sayar.
Passerby

Yanıtlar:


22

Yazılım sınırlama faktörü, slave'ler için kullanılan adresin boyutudur: sırasıyla 127 ve 1023 aygıtlarını destekleyen 7 bit veya 10 bit. Fiziksel olarak, iki kısıtlama vardır. İlk olarak, veri yolunun fiziksel boyutu çünkü veri yolu sadece kısa mesafeler içindir (IC bölümü). Veri yolu çok büyükse, ele alınması gereken kapasitif yükleme ve yayılma gecikme etkileri vardır. İkincisi, bazı cihazlar I2C adreslerinin tamamını destekleyemez. Örnek olarak, MPU6050 jiroskopu yalnızca iki adresi destekler ve bazı cihazlar özel adresler için belirli adresler ayırır.


2
Bire bir hata var. 7 bit adresleme 128 adresi destekler (0 ila 127). 10 bit adresleme 1024 adresi destekler (0 ila 1023).
CurtisHx

3
Bu bir hata ile kapalı değildir. Sadece bir değil 7 ayrılmış adres olduğundan, bu bir "6 hata kapalı" dır.
kruemi

Adresleme şeması veri yolu, master veya slave üzerindeki cihazlar tarafından belirlenir. Bazı cihazlarda önceden ayarlanmış adres aralıkları ve ayrılmış adresler bulunur. Örneğin birçok mikro denetleyicideki diğer aygıtların ayrılmış adresleri yoktur ve belirli bir bit şemasındaki herhangi bir adresi kullanabilirler.
vini_i

Bu sayılar biraz doğrudur, ancak bir uyarı gereklidir. 1111 XXX ve 0000 XXX gibi birkaç ayrılmış adres var. Bu, 7 bit = 2 ^ 7 - 16 = 112 kullanılabilir adres anlamına gelir, 10 bit tam 2 ^ 10 1024'tür. 8 bit değil (bir şey olmamalıdır), genellikle R / W bitini içerir 7 bit. nxp.com/docs/en/user-guide/UM10204.pdf
busfault

@busfault 8 bit adreslerin etkili bir şey olmadığını kabul ediyorum. Onları cevabımdan çıkardım. Çoğu mikro denetleyici, ayrılmış adreslerin bir kısmını veya tamamını yok saymayı ve tam adres aralığını kullanmayı seçebilir. Cevabımda bunun cihaza özel olduğunu not ediyorum.
vini_i

10

Maksimum düğüm sayısı adres alanı ve aynı zamanda pratik iletişim mesafelerini birkaç metreye sınırlayan toplam 400 pF'lik veri yolu kapasitesi ile sınırlıdır.

I²C'de devamını oku


9

Adresleme, cihaz sayısını sınırlandırır; bazıları, adres sayısını 1024 ile sınırlayan 10 bit adresleme (oldukça nadiren kullanılır) kullanabilir. Bir avuç 'ayrılmış' adres vardır.

I2C ("iki telli otobüs" veya diğerlerinin benzer otobüsleri aramak istediklerinin aksine), NXP (née Philips) standardı, UM10204 I2C-bus teknik özellikleri ve kullanım kılavuzunu takip etmelidir . Bu, başka bir yerde var olan çeşitli yorumlar ve alt kümeler değil, birincil referans belgeniz olmalıdır.

Maksimum cihaz sayısı, en zayıf çıkışın (dolayısıyla minimum çekme direncini belirler) sürücü kapasitesinden, kablolama ve giriş kapasitansından ve çalışma modu / frekansından etkilenecektir. Maksimum kapasitansın aşılması gerekiyorsa, bölüm 7.2'ye izin verilen maksimum bara kapasitansının üzerinde çalıştırma :

resim açıklamasını buraya girin


7

Bir i2c veri yolu temel olarak veri yolunun kapasitansı (ve dolayısıyla hızı) ve erişilebilir cihaz adresleri ile sınırlıdır. Ve fiziksel tahta alanı.

Ancak, veri yolu tamponları, genişleticiler, tekrarlayıcılar, hublar, çoklayıcılar, anahtarlar (veya birden fazla veri yolu arasında geçiş yapabilen bir cihaz için başka bir ad) hesaba kattığınızda gerçek bir üst sınır yoktur. Bunlar, aynı i2c veri yolu üzerinden erişilebileceği için biraz i2c ek yükü ekler. Örneğin PCA9548A, 8 bitlik bir veri yolu anahtarıdır.

Bu tek çip, teorik olarak başka türlü mevcut olan i2c slave sayısını (127 * 8) dört katına çıkarabilir. PCA9548A, tek bir veriyolunda 8 adede kadar adres için yapılandırılabilir, böylece 8 * 8 * 127 cihazlar. (matematik kapalı olabilir). Ve bu sadece bu cihazla ve daha fazlası değil.

Açıkçası, kapasitans için ayarlarsanız teorik bir sınır yoktur.


5

I2C , teorik olarak maksimum 128 ve 1024 farklı adres veren 2 adres uzunluğunu, 7 ve 10 biti belirtir .

Ancak, 0x00 (genel çağrı) gibi birkaç ayrılmış adres vardır. Bu, adres alanını daha da sınırlar.

Eğer I2C cihazlar üzerinde doğrudan kontrole sahip bir sistem inşa ediyorsanız, olabilir kendi kullanımı için ayrılmış adresleri kullanın, ancak sistem artık I2C standardına uygun olacaktır.

Adreslemeye ek olarak, fiziksel veri yolu sınırlamaları vardır. Veriyolundaki her cihazın veri yolunu belirli bir zaman aralığında (veri yolu hızına bağlı olarak) alçaltabilmesi gerekir. Veriyolunda çok fazla kapasitans varsa, cihazlar SDA'yı yeterince hızlı çekemeyebilir ve çekmeler SDA'yı yeterince hızlı geri getirmeyebilir.

Şimdi, donanım sorunları biraz sürücü donanımı ile aşılabilir. Şu anda birkaç metreden daha uzun cihazlarla iletişim kurmak için I2C kullanan bir proje üzerinde çalışıyorum. Ana veri yolu 24v kullanır ve her kartta 3.3v'ye kadar inen bir sürücü vardır.

Bir somun kabuğunda, I2C'nin fiziksel sınırlaması aşılabilir. Adresleme olabilir ancak cihazın üzerinde doğrudan kontrol sahipseniz, aşılması.


Çok uzun i2c otobüslerinde çalışmanızdan bu yana neredeyse üç yıl geçti. İyi çalıştılar mı?
wallyk

1
@wallyk Bu cevabı gönderdikten kısa bir süre sonra şirketten ayrıldım. Doğru donanım verildiğinde, I2C'nin daha uzun mesafelerde iletişim kurabileceğini söyleyeceğim. Bununla birlikte, uzun mesafe için tasarlanmış ve muhtemelen I2C'den daha iyi bir seçim olacak diğer iletişim protokolleri vardır.
CurtisHx

5

Bir ustanın sürdüğü kölelerin sayısındaki birincil sınırlama genellikle bara kapasitansı, sızıntı, tahrik gücü, vb. sıfır kapasitans kartı izleri ile veriyolu kapasitansı bir faktör olmaz, ancak pratikte hiçbir varsayım geçerli olmaz.

Öte yandan birbirini "tanıyan" cihazların ele alınması gerçekten sorun değil. Bir okuma ve bir yazma adresi kullanılarak milyarlarca çipin bağlanmasına izin verecek bir çevre birimi tasarlamak önemsiz olacaktır. Her aygıtın benzersiz bir dört bayt kimliğine sahip olması ve yazma adresini her zaman dinlemesi gerektiğini, ancak ilk dört iletilen veri baytı kimliğiyle eşleşmeyen her işlemden çıkması gerektiğini belirtmeniz yeterlidir. Ayrıca, aygıtların okunan adrese yalnızca duydukları son yazma işleminin adresleriyle eşleşmesi durumunda yanıt verebileceğini belirtin.

Eğer biri kaptanın bağlı tüm kölelerin kimliklerini belirlemesini sağlamak istiyorsa, bu tür amaçlar için bazı özel kimlik aralıkları saklanabilir. Örneğin, ilk kimlik baytı FF ise, sonraki dört bayt bir maske ve bundan sonraki dört bayt bir ID olacaktır; maske tarafından belirtilen kimliğinin bir kısmı komutta verilenle eşleşiyorsa bir aygıt bağlı kalmalıdır (ve son kimlik baytını onaylamalıdır). Bu, bir yöneticinin 64 işlem kullanarak en az bir cihazı ve her biri 62 veya daha az işlem kullanan ek cihazları tanımlamasını sağlar. Milyarlarca cihaz kimliğine sahip bir arama alanı göz önüne alındığında, olası en hızlı cihaz tanımlama aracı olmayabilir, ancak kötü değildir.


2

Kısa cevap: Duruma göre değişir

104 cihaza kadar 7 bit adresli (ortak) cihazlarınız varsa (128 adres - ayrılmış adresler (0x00-0x07 ve 0xF0-0xFF saklıdır)) (belirli sınırlamalar geçerlidir) 10 bit destekleyen (daha az yaygın) cihazlarınız varsa 1024 cihaza kadar adresleme (7 bit ve 10 bit cihazları karıştırabilir ve bu şekilde 1136 cihaza ulaşabilirsiniz)

Şimdi sınırlamalar: Çoğu basit cihaz sadece iki ila 8 farklı adrese yapılandırılabilir. Farklı temel adreslere sahip özel sipariş cihazları ile bunun üstesinden gelebilirsiniz (ancak bu normalde minimum miktarda cihaz sipariş ettiğiniz anlamına gelir) Ayrıca donanım sınırlamaları (esas olarak veri yolu kapasitansı) vardır, ancak bu özel i2c sürücüleri ile çözülebilir.

Daha büyük mesafelerde birçok cihazı bağlamak istiyorsanız, yine de bir fieldbus kullanmanızı öneririm! I2C, bir cihazın içindeki iletişim için tasarlanmıştır (TV seti gibi). I2C'yi 50 cm'ye kadar harici kabloları olan bir RaspberyPi ile kullanıyorum (T-Bölümlerde bile asla bir otobüs sisteminde olmamalısınız). Şaşırtıcı derecede iyi çalışıyor.


0

Veriyoluna bağlı cihaz sayısı sadece izin verilen toplam veri yolu kapasitesi 400 pF ile sınırlıdır. I²C arayüzüne sahip çoğu IC düşük güç, yüksek empedanslı CMOS teknolojisi kullandığından, maksimum kapasiteye ulaşılmadan önce birçok IC I²C veriyoluna bağlanabilir


1
Bu OP'nin sorusuna tam bir malikânede cevap vermez. Yaklaşık değerler kullanıyor olsanız bile, sorunun tüm yönlerini yanıtlamaya çalışın. Bilgi kaynağınızın bağlantısını belirtin ve / veya bağlantı bırakın.
Sparky256

0

Eklenen çoklayıcı çipler (TCA9544A gibi) veya tamponlar (PCA9515B gibi) ile hem veriyolu kapasitansı hem de adresleme gibi tüm sınırların üstesinden gelebilirsiniz .

Aynı adreslere sahip 3 cihazı bir çoklayıcının arkasına yerleştirebilir ve bunlardan sadece birini seçebilir, onunla iletişim kurabilir ve daha sonra başka bir tane seçebilirsiniz. Tabii ki yazılım daha karmaşık hale geliyor.

Uzun bir kablonuz varsa ortada bir tampon yerleştirebilir ve kapasitans sınırını aşabilirsiniz.


Hayır, yine de sınırlı kalacaksınız: 4 Kanal / Çoklayıcı, kanal başına 4 Alt Kanalınız var, daha sonra alt kanallarınız, alt kanal kanallarınız ve daha fazlası var. Kanal anahtarı başına 3 Adres satırı var: 4 ^ (2 ^ 3) = 65536 kanal. Kanal başına 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 Cihazınız / Kanalınız var (Tamponları da kullandığınızda) (-7 ayrılmış adresler için, multipleks adresler için -8'dir). 1265 * 65536 = 82903040 Maksimum Aygıt.
12431234123412341234123

Düzenleme: Üzgünüz bir hata oluştu: 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Cihazlar / Kanal => 1137 * 65536 = 74514432 Cihazlar. Ancak IO-Expander'ı bazı Tamponları açıp kapatmak için daha fazla mümkün olabilir (Pratik kullanımdan çok teorik bir olasılık nedir).
12431234123412341234123
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.