Dlaczego I²C ma tylko rezystory podciągające (pytanie do wywiadu)?


15

Ankieter chciał wiedzieć, dlaczego rezystory podciągające są stosowane w SDA i SCL, skoro można również zastosować odwrotną logikę. Czy istnieje wyjaśnienie, dlaczego zastosowanie rezystora podciągającego jest wybraną konstrukcją?



Podobnie jak komentarz Protokół magistrali I2C w ultraszybkim trybie działa jako konfiguracja push-pull, patrz nxp.com/documents/user_manual/UM10204.pdf , sekcja 3.2 Protokół I2C w ultraszybkim trybie
Kvegaoro

Zastanawiam się, dlaczego NXP nie określił ultraszybkiego protokołu I2C, który używał dwukierunkowego SDA i jednokierunkowego SCK, miał twardy dysk SDA, gdy chciał wysyłać wysoki sygnał, i musiał, aby master czekał wystarczająco długo, aby linia została wyciągnięta z góry w przypadkach, w których miałoby znaczenie to, co niewolnik miałby do powiedzenia?
supercat

Czy ankieter udzielił swojej wersji odpowiedzi?
copper.hat

Odpowiedzi:


14

Aby nieco rozwinąć odpowiedź Jona:

Tak, wszystko zależy od tego, z których MOSFETÓW chcesz korzystać.

Tranzystory MOSFET z kanałem N są znacznie lepsze do przełączania logiki niż kanał P, ponieważ:

  • Na ogół mają znacznie niższą oporność ( )RDSON
  • Szybko się włączają i wyłączają

Tak więc dla konfiguracji z otwartym drenem (czym jest I2C) jest znacznie tańsze i łatwiejsze do utworzenia przy użyciu układu „bezczynności” z NOS-kanałowymi tranzystorami MOSFET zamiast „bezczynności” z MOSFET-ami z kanałem P.

Trzecią opcją byłoby „bezczynne obniżenie” przy użyciu M-kanałowych tranzystorów MOSFET, ale do tego potrzebny jest sterownik bramki wysokiego napięcia, aby podnieść napięcie bramki wystarczająco daleko powyżej napięcia źródłowego, aby MOSFET mógł się włączyć. Nie jest to praktyczne w przypadku małych autobusów komunikacyjnych, ale takie ustawienie jest w rzeczywistości dość powszechnie stosowane w mostkach H do napędzania silnikiem, w których chcesz mieć taką samą (lub podobną) odpowiedź między górną i dolną stroną mostka H. Użycie pary kanału P i kanału N w mostku H zwykle oznacza, że ​​musisz włączyć strefę martwą między wyłączeniem kanału P i włączeniem kanału N, ponieważ trwa to znacznie dłużej, a to zmniejsza wydajność energetyczną .

Ale w przypadku małych magistral komunikacyjnych, takich jak I2C, gdzie potrzebujesz wysokiej prędkości, niskich kosztów i prostoty użytkowania, „bezczynność” z N-kanałowymi tranzystorami MOSFET i rezystorami podciągającymi jest zdecydowanie najbardziej opłacalna.


Nie zgadzam się, że „duża prędkość” jest brana pod uwagę w I2C (przynajmniej w jego początkowej konstrukcji). Podnoszenia rezystancyjne nie są sposobem na osiągnięcie dużej prędkości, jeśli taki jest cel.
Photon

1
Nie należy mylić przełączania większej prędkości z większą przepustowością. Szybkie przełączanie zapewnia ostrzejsze krawędzie, co oznacza bardziej niezawodną komunikację.
Majenko,

1
Podciąganie rezystancyjne również nie jest sposobem na osiągnięcie wyższej prędkości przełączania.
Photon

dlatego wybór odpowiednich wartości rezystorów dla I2C jest ważny ”i dlaczego Arduino są złe, domyślnie używając wewnętrznych podciągnięć.
Majenko,

Tak, możesz wybrać rezystory, aby uzyskać lepsze czasy narastania. Cały system jest jednak wolniejszy i / lub zużywa więcej energii niż w przypadku sterowników totem-biegun (co oczywiście powoduje dodatkowe koszty).
Photon

12

Kolejną zaletą pasywnego podciągania / aktywnego opuszczania jest to, że może on pracować w zakresie napięć zasilania. Zauważ, że cyfrowe wysokie i niskie poziomy są wyraźnie określone w IIC. Poziomy te są wystarczająco niskie, aby współpracować z podciągnięciami 3,3 V. Można zatem budować urządzenia, które działają zarówno z napięciem 5 V, jak i 3,3 V. W rzeczywistości linie magistrali IIC można podciągnąć do 3,3 V, a to będzie działać z mieszanką urządzeń w magistrali, które są oddzielnie zasilane przy różnych napięciach.


Jestem prawie w 100% tego szukali, mam przyjaciela, który został o to poproszony podczas wywiadu dla dużej firmy produkującej procesory (zgadnij, która z nich) i to była odpowiedź, której szukali.
user34920

6

Chociaż NMOS ma przewagę nad PMOS pod względem prędkości / obszaru, różnica ta jest naprawdę niewielka, gdy mówimy o sterowniku na jednym lub dwóch pinach. W końcu większość sterowników wyjściowych to tak naprawdę typy biegunów totem, które wymagają zarówno NMOS, jak i PMOS, więc bez względu na to, czy wybrałyby konfigurację rozwijaną czy rozwijaną, skończyłyby na sterowniku wyjściowym mniejszym niż totem- kierowca słupa.

Jest jednak jedna zaleta wyjść NMOS z otwartym drenem w porównaniu z otwartym drenem PMOS, które nie dotyczą bezpośrednio I2C: gdy VCC ma wartość dodatnią, otwarty dren z NMOS pozwala na połączenie ze sobą układów o różnych poziomach VCC. Z tego powodu jest dostępnych wiele dyskretnych układów logicznych NMOS typu open-drain.

Z drugiej strony nie jestem świadomy ŻADNEJ dostępnej na rynku czipów PMOS. W rzeczywistości nie sądzę, że kiedykolwiek spotkałem wyjście PMOS open-drain na jakimkolwiek układzie. (Używałem ECL wiele razy, który ma wyjście emitera otwartego NPN o działaniu podobnym do otwartego drenażu PMOS)

Dostępność dyskretnych układów logicznych otwartego odpływu NMOS sprawia, że ​​otwarty odpływ NMOS jest o wiele bardziej znany projektantom elektronicznym niż otwarty odpływ PMOS.

Zarówno znajomość, jak i dostępność dyskretnych układów (na przykład do prototypowania) prawdopodobnie wpłynęły na projektantów I2C na wybór konfiguracji z otwartym drenem NMOS.


6

Wydaje mi się, że odpowiedź sięga przede wszystkim od tego, dlaczego stosujemy konwencję ujemnego uziemienia (a z pewnością nie była to wszechobecna przed erą półprzewodników). Powodem tego jest fakt, że urządzenia N-Channel mają lepszą wydajność niż urządzenia P-Channel ze względu na fizykę typów stosowanych w nich większości nośnych.

We wczesnych dniach układów scalonych było to dość poważne ograniczenie, dlatego preferowano stosowanie tranzystorów z kanałem N (lub NPN) w celu uzyskania najwyższej możliwej wydajności. Z tego uzyskaliśmy układ masy ujemnej i wyjścia z otwartym kolektorem, które wymagały raczej użycia rezystorów podciągających niż podciągających.

Oczywiście, magistrala I2C nie jest bardzo szybka, więc nie ma powodu, dla którego nie można by jej zrealizować za pomocą rezystorów obniżających, ale też nie ma żadnej przewagi. Trzymamy się więc konwencji i używa podciągnięć.


2

Oto niektóre (historycznie uzasadnione) spekulacje ...

Kiedy masz pullup (zamiast push-pull), możesz oczywiście mieć wiele urządzeń rywalizujących o magistralę bez przepływu nadmiernych prądów (Dobra Rzecz - ale możesz to zrobić z rozwijanym menu).

W „dawnych czasach” tranzystorów bipolarnych najprostsza logika TTL wykorzystywała otwarte kolektory z tranzystorami NPN - wszystko odnosi się do ziemi, co sprawia, że ​​poziomy wyzwalania są łatwe do zdefiniowania niezależnie od napięcia magistrali. Ponadto NPN był szybszy niż PNP.

Jeśli mam wiele urządzeń pracujących z własnym napięciem zasilania, a napięcie zasilające nie jest stała, a następnie o pull-up, zamiast ciągnąć w dół staje się koniecznością . Gdyby wiele urządzeń próbowało przyciągnąć magistralę do odpowiednich szyn zasilających, przepływ prądu byłby nieograniczony i coś mogłoby się usmażyć. Przynajmniej wszyscy zgadzają się co do wartości gruntu, więc ten problem nie pojawia się.

W przypadku CMOS historia się zmienia - teraz poziom wyzwalania jest na środkowej linii. Ale EE mogą być tradycyjną gromadą. Z pewnością, pochodząc z wczesnych czasów tranzystorowych, nigdy nie kwestionowałem wyboru podciągnięć z powyższych powodów.

Jak powiedziałem, to tylko spekulacja.


1

To może być rzecz historyczna.

Stare tranzystory i układy scalone zużywały mniej energii, gdy były przy 5 V niż przy 0 V. Ponieważ istniała znacząca różnica między tymi dwoma poziomami, projektanci postanowili ustawić stan „bezczynności” na 5 V. Z biegiem czasu tranzystory i układy scalone uległy poprawie, dzięki czemu oba stany zużywały mniej więcej tyle samo mocy, ale nie było żadnego rzeczywistego powodu, aby zmieniać standardy.

Teraz widzisz wiele takich rzeczy - gdzie bezczynność wynosi 5 V - tylko dlatego, że standardy nigdy się nie zmieniły.


Nadal jest prawdą, że większość układów scalonych może pochłaniać więcej energii niż może pozyskiwać, więc nadal ma zastosowanie.
Joel B,

1

Minęło wiele lat, odkąd przeczytałem specyfikację I2C, ale pamiętam, kiedy po raz pierwszy zastosowano, ludzie często nazywali ją 2-przewodową magistralą z otwartym kolektorem. Dzięki temu połączenia i wykrywanie kolizji są bardzo łatwe, nawet przy bitach. Jeszcze 20 lat temu nie był uważany za autobus o wysokich osiągach, po prostu tani i łatwy.


1

Powiedziałbym, że dzieje się tak, ponieważ I2C jest zdefiniowane jako magistrala, w której wszystkie podłączone jednostki powinny być typu otwartego spustu lub kolektora otwartego. Oznacza to, że może on prowadzić autobus tylko nisko, a nie wysoko. (Gdy tranzystor wyjściowy jest wyłączony, pin jest w stanie wysokiej impedancji.)

Ten schemat zapewnia kilka miłych korzyści, na przykład, że można podłączyć urządzenia o różnych napięciach sygnalizacyjnych i że magistrala sam się leczy po błędach komunikacji.

Oczywiście standard mógł zostać zdefiniowany na odwrót, jako konfiguracja bezczynności / niskiej / aktywności-wysokiej, a inne odpowiedzi tutaj dość dobrze dotykają tego elementu.

Źródło: LabWorX 1, Mastering the I2C Bus, autor: Vincent Himpe. Naprawdę dobra książka o I2C, jej tło historyczne, jak zaimplementować ją w sprzęcie oraz jak używać jej w oprogramowaniu i implementacjach debugowania.


1

Prawdziwą odpowiedzią, której nikt jeszcze nie dotknął w odpowiedni sposób, jest to, że umożliwia podłączenie urządzeń zasilanych różnymi napięciami (o ile piny we / wy są tolerowane). Na przykład urządzenie o napięciu 3,3 V może komunikować się z urządzeniem, które jest wyłączone o napięciu 1,8 V, o ile IO urządzenia o napięciu 1,8 V toleruje napięcia do 3,3. Oczywiście każde urządzenie może zasilać napięcie 0 V, ale nie każde urządzenie może być w stanie podnieść napięcie do rezystorów podciągających.

Ponadto większość układów scalonych może pobierać więcej prądu, niż może pobierać. Wynika to z rozpraszania ciepła. Tak więc opadanie prądu (ziemi napędowej) z podciągania jest łatwiejsze dla części niż pozyskiwanie prądu (napędzanie wysokiego napięcia) do podciągania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.