I²C'nin neden sadece çekmeli dirençleri var (görüşme sorusu)?


15

Görüşmeci , ters mantık da uygulanabildiğinde SDA ve SCL'de neden çekme dirençlerinin kullanıldığını bilmek istedi . Seçilen tasarımın neden pull-up direnç kullanımı olduğuna dair bir açıklama var mı?



Ultra Hızlı mod I2C veri yolu protokolü push-pull yapılandırması gibi çalışır, bkz. Nxp.com/documents/user_manual/UM10204.pdf , bölüm 3.2 Ultra Hızlı mod I2C veri yolu protokolü
Kvegaoro

NXP'nin neden çift yönlü SDA ve tek yönlü SCK kullanan ultra yüksek bir I2C protokolü belirtmediğini, yüksek çıkış yapmak istediğinde ana sürücü SDA'sını zorladığını ve hattın yüksek çekilmesi için yeterince uzun süre beklemesini sağladığını merak ediyorum. bir kölenin ne söylemek zorunda kaldığı durumlarda?
supercat

Görüşmeci cevap versiyonunu verdi mi?
bakır

Yanıtlar:


14

Jon'un cevabını biraz genişletmek için:

Evet, hepsi hangi MOSFET'leri kullanmak istediğinizle ilgilidir.

N-kanal MOSFET'leri mantık değiştirme için P-kanalından çok daha iyidir, çünkü:

  • Genellikle direnci çok daha düşük olması ( )RDSON
  • Daha hızlı açılır ve kapanırlar

Bu nedenle, açık kanallı bir konfigürasyon için (I2C'nin ne olduğu), P-kanallı MOSFET'lerle "boşta düşük" yerine N-kanallı MOSFET'lerle "boşta yüksek" bir düzenleme kullanarak oluşturmak çok daha ucuz ve kolaydır.

Üçüncü bir seçenek, N kanallı MOSFET'leri kullanarak "boşta düşük" olacaktır, ancak bunun için, MOSFET'in açılması için geçit voltajını kaynak voltajının çok üzerinde yükseltmek için yüksek voltajlı bir kapı sürücüsüne ihtiyacınız vardır. Küçük haberleşme veriyolları için pratik değildir, ancak bu düzenleme aslında H köprüsünün yüksek tarafı ve alçak tarafı arasında aynı (veya benzer) yanıta sahip olmak istediğiniz H-köprülerinde oldukça yaygın olarak kullanılmaktadır. Bir H-köprüsünde P-kanal ve N-kanal çiftlerinin kullanılması, genellikle P-kanalını kapatmak ve N-kanalını açmak arasında çok daha uzun sürdüğü için ölü bir bölge kullanmanız gerektiği anlamına gelir ve bu da güç verimliliğinizi azaltır. .

Ancak, yüksek hız, düşük maliyet ve kullanım basitliğine ihtiyaç duyduğunuz I2C gibi küçük iletişim otobüsleri için, N-kanallı MOSFET ve çekme dirençli "rölanti yüksek" açık ara en yüksek maliyetlidir.


"Yüksek hız" ın I2C'de (en azından ilk tasarımında) dikkate alınmasına katılmıyorum. Rezistif pull-up'lar, hedef buysa yüksek hıza ulaşmanın yolu değildir.
Foton

1
Yüksek hız geçişini daha yüksek bant genişliğiyle karıştırmayın. Yüksek hızlı geçiş size daha keskin kenarlar sağlar, bu da daha güvenilir iletişim anlamına gelir.
Majenko

1
Rezistif pull-up'lar daha yüksek anahtarlama hızına ulaşmanın yolu değildir.
Foton

I2C için doğru direnç değerlerinin seçilmesinin neden önemli olduğunu 've Arduino'nun varsayılan olarak dahili çekmeleri kullanmak için neden kötü olduğunu.
Majenko

Evet, daha iyi yükselme süreleri elde etmek için dirençlerinizi seçebilirsiniz. Ancak tüm sistem hala totem kutuplu sürücülerle olduğundan daha yavaş ve / veya daha fazla güç kullanıyor (elbette başka maliyetler de ekleyecek).
Photon

12

Pasif yukarı çekmenin / aktif aşağı çekmenin bir diğer avantajı, çeşitli güç voltajlarıyla çalışabilmesidir. Dijital yüksek ve düşük seviyelerin IIC ile açıkça belirtildiğini unutmayın. Bu seviyeler 3,3 V çekme ile çalışacak kadar düşüktür. Bu nedenle hem 5 V hem de 3,3 V güçle çalışan cihazlar üretilebilir. Aslında, IIC veri yolu hatları 3,3 V'a kadar çekilebilir ve bu, veri yolunda farklı voltajlarda ayrı olarak çalışan cihazların bir karışımı ile çalışacaktır.


Ben neredeyse% 100 bu aradıkları cevap, ben büyük bir CPU imalat şirketi (hangisi tahmin) bir röportajda sordu bir arkadaşım var ve aradıkları cevap bu.
user34920

6

NMOS'un hız / alan açısından PMOS'a göre bir avantajı olsa da, bir veya iki pimdeki bir sürücüden bahsederken bu fark gerçekten çok küçüktür. Sonuçta, çoğu çıkış sürücüsü aslında hem NMOS hem de PMOS gerektiren totem-kutup tipleridir, bu yüzden bir aşağı çekme veya yukarı çekme konfigürasyonu seçseler de, bir totemden daha küçük bir çıkış sürücüsü ile sonuçlanacaklardı. kutup sürücüsü.

Ancak PMOS açık drenaj üzerinden NMOS açık drenaj çıkışlarının doğrudan I2C için geçerli olmayan bir faydası vardır: VCC pozitif olduğunda, NMOS açık drenaj, farklı VCC seviyelerine sahip yongaların birbirine bağlanmasına izin verir. Bu, sayısız NMOS açık drenajlı ayrık mantık IC'sinin (bir kısmı) neden mevcut olduğudur.

Öte yandan, piyasadaki mevcut herhangi bir PMOS açık tahliye yongalarının farkında değilim. Aslında, herhangi bir çip üzerinde bir PMOS açık tahliye çıkışı ile karşılaştığımıza inanmıyorum. (PMOS açık drenajına benzer davranışa sahip bir NPN açık yayıcı çıkışı olan ECL'yi birçok kez kullandım)

NMOS açık drenaj ayrık mantık çiplerinin mevcudiyeti, NMOS açık drenajı, elektronik tasarımcılara PMOS açık drenajdan çok daha aşina hale getirir.

Hem ayrık yongaların tanıdıklığı hem de kullanılabilirliği (örneğin prototipleme için), muhtemelen I2C tasarımcılarını NMOS açık drenaj konfigürasyonunu seçmeleri için etkiledi.


6

Sanırım cevap, ilk etapta neden negatif bir zemin sözleşmesi kullandığımıza dayanıyor (ve bu kesinlikle yarı iletken dönemden önce her yerde değil). Bunun nedeni, kullanılan çoğunluk taşıyıcı türlerinin fiziği nedeniyle N-Kanal cihazlarının P-Kanal cihazlarından daha iyi performans göstermesidir.

Entegre devrelerin ilk günlerinde, bu oldukça ciddi bir sınırlamadır ve bu nedenle mümkün olan en yüksek performansı elde etmek için N-Kanal (veya NPN) transistörlerinin kullanılması tercih edildi. Bundan negatif bir topraklama sistemi ve açılır kapanma yerine çekme dirençlerinin kullanılmasını gerektiren açık kollektör çıkışları elde ettik.

Tabii ki I2C veri yolu çok yüksek hızdadır, bu yüzden aşağı çekme dirençleri kullanılarak uygulanamamasının bir nedeni yoktur, aynı zamanda avantajı da yoktur. Bu yüzden konvansiyona sadık kalıyoruz ve pull-up kullanıyor.


2

İşte bazı (tarihsel olarak topraklanmış) spekülasyonlar ...

Çekme (itme-çekme yerine) olduğunda, aşırı akımlar akmadan otobüs için çekişme halinde birden fazla cihaza sahip olabilirsiniz (İyi Bir Şey - ancak bir açılanla aynı şeyi elde edebilirsiniz).

Bipolar transistörlerin "eski günlerinde", en basit TTL mantığı NPN transistörlü açık toplayıcılar kullandı - her şey toprağa atıfta bulunur, bu da bus voltajından bağımsız olarak tetik seviyelerini tanımlamayı kolaylaştırır. Ayrıca, NPN PNP'den daha hızlıydı.

Ben kendi besleme gerilimi ile çalışan birden fazla cihaz var ve bu besleme gerilimi daha sonra çekme-up yerine bir çekme sahip sabit değilse aşağı olur zorunludur . Birden fazla cihaz veri yolunu kendi besleme raylarına çekmeye çalışırsa, akım akışı kısıtlanamaz ve bir şeyler kızarır. En azından hepsi toprağın değeri üzerinde hemfikirdir, bu nedenle bu sorun ortaya çıkmaz.

CMOS ile hikaye değişir - şimdi tetikleme seviyesi orta raydır. Ancak Enerji Verimliliği geleneksel bir grup olabilir. Kesinlikle, transistörlerin ilk günlerinden itibaren , yukarıdaki nedenlerden dolayı pull-up seçimini hiç sorgulamadım .

Dediğim gibi, bu sadece spekülasyon.


1

Bu tarihsel bir şey olabilir.

Eski transistörler ve entegre devreler aslında 5 V'dayken 0 V'den daha az güç tüketiyorlardı. Daha sonra, zaman geçtikçe, transistörler ve IC'ler gelişti ve her iki devlet de kabaca aynı miktarda güç tüketdi, ancak standartları değiştirmek için gerçek bir neden yoktu.

Şimdi, standartların hiç değişmediği için - boşta 5 V olduğu gibi birçok şey görüyorsunuz.


Çoğu IC'nin kaynaklarından daha fazla güç harcayabileceği hala doğrudur, bu yüzden hala uygulanabilir.
Joel B

1

I2C spesifikasyonunu okuduğumdan bu yana uzun yıllar geçti, ama ilk ne zaman kullanıldığını hatırlıyorum, insanlar genellikle 2 telli açık toplayıcı otobüs olarak adlandırdı. Bağlantıları ve çarpışma tespitini biraz vurmak için bile çok kolay hale getirdi. 20 yıl önce bile, sadece ucuz ve kolay, yüksek performanslı bir otobüs olarak kabul edilmedi.


1

I2C'nin bağlı tüm ünitelerin açık drenaj veya açık toplayıcı olması gereken bir veri yolu olarak tanımlandığını söyleyebilirim. Bu, otobüsü sadece yüksek değil, düşük sürdüğü anlamına gelir. (Çıkış sürücüsü transistörü kapatıldığında, pim yüksek empedans durumundadır.)

Bu şema, örneğin farklı sinyal voltajlarına sahip cihazları bağlayabileceğiniz ve veri yolunun iletişim hatalarından kendi kendini iyileştirdiği bazı güzel faydalar sağlar.

Açıkçası, standart bir başka şekilde tanımlanmış olabilir, boşta-düşük / aktif-yüksek bir konfigürasyon ve burada diğer cevaplar bu öğeye oldukça iyi dokunuyor.

Kaynak: LabWorX 1, I2C Otobüsünde Ustalaşmak, Vincent Himpe. I2C hakkında gerçekten iyi bir kitap, tarihsel geçmişi, donanımda nasıl uygulanacağı ve yazılım ve hata ayıklama uygulamalarında nasıl kullanılacağı.


1

Hiç kimsenin yeterince dokunmadığı gerçek cevap, farklı voltajlarla çalışan cihazları (G / Ç pimleri toleranslı olduğu sürece) bağlamanızı sağlar. Örneğin, 3,3V'lık bir cihaz, 1,8V'lık cihazın IO'su 3,3'e kadar gerilimlere toleranslı olduğu sürece 1,8V kapalı olan bir cihazla iletişim kurabilir. Tabii ki her cihaz 0V çalıştırabilir, ancak her cihaz çekme dirençlerinizdeki gerilime kadar yükselemeyebilir.

Ayrıca, çoğu IC, kaynak verebileceğinden daha fazla akım batırabilir. Bunun nedeni ısı dağılımıdır. Bu nedenle, çekme için batma akımı (sürüş zemini), çekme akımlarına akım sağlamaktan (yüksek voltaj sürme) daha kolaydır.

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.