Bir i2c master'ın kullanabileceği maksimum sayıda i2c slave var mı? Fiziksel sınırlayıcı faktörler nelerdir?
Bir i2c master'ın kullanabileceği maksimum sayıda i2c slave var mı? Fiziksel sınırlayıcı faktörler nelerdir?
Yanıtlar:
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.
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 :
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.
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ı.
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.
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.
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
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.