Czy istnieją jakieś ostateczne wytyczne dotyczące wyprowadzania I2C? Nie szukam „STANDARDOWEGO”


16

EDYCJA: Powtórzono to kilkakrotnie, więc umieszczając to na górze: Tak, dobrze wiadomo, że nie ma „standardowego” złącza między urządzeniami I2C, ale na pewno ta społeczność może sformułować listę „wskazówek” do zrobienia takie interkonekty, oparte na zachowaniu sygnału, minimalizacji szumów i ograniczeniu ryzyka z powodu niewłaściwych połączeń.


Rozumiem, że NXP zdefiniowało standard I2C bez określania pin-out dla złącz I2C. Jedyną wskazówką NXP wydaje się być wzmianka o umieszczeniu uziemienia i / lub Vss między SDA i SCL, jeśli Vss / Gnd są przenoszone przez interkonekt.

Zakupy różnych modułów I2C pozostawiły mnie z różnymi pin-outami I2C i trochę zadania polegającego na śledzeniu różnych małych podkładek przełączających kabel wstążkowy, które musiałem dla nich wykonać.

na przykład

  • Moduł mono OLED: SCL, SDA, GND, 5V (oczywiście nie jest idealny, ponieważ zegar i dane są obok siebie.
  • Osłona czujnika dla Arduino: SDA, SCL, GND, 5 V (znowu nie jest idealny, plus przełączane SCL / SDA)
  • Kolorowy moduł LCD: SCL, GND, 5 V, SDA (Yay!)
  • Repeater I2C bez nazwy: SCL, 5 V, GND, SDA (ouch, zamienili piny zasilania! Prawie wypuść magię).

Moje pytanie brzmi zatem :
czy istnieje ostateczna / autorytatywna wytyczna dotycząca sekwencji wyprowadzeń 4-stykowego złącza I2C, w której Vss i GND mają być przenoszone z hosta na urządzenie?

Jeśli to się nie powiedzie, czy istnieje jakikolwiek niekompletny katalog modułów / urządzeń I2C z listą wyprowadzeń, które każdy z nich przyjął?

Wyjaśnienie: Poszukiwanie wytycznych, takich jak „zbliż Vss do SCL, ponieważ ...” zamiast określonego standardu, który najwyraźniej nie istnieje.


3
Stąd pytanie.
Anindo Ghosh,

1
Z twojego pytania wynika, że ​​nie ma standardu ... a jeśli tak, to oczywiście ludzie go nie przestrzegają. Utknąłeś, robiąc podkładki. : P
Toby Lawrence

1
@AnindoGhosh heh. Gdybym to był ja, pewnie porzuciłbym wcześniej zakupione moduły i zrolowany własny układ ze znormalizowanym pinoutem. Prawdopodobnie coś w rodzaju 6 pinów, z GND obok SDA, SCL i 5V ... a następnie za pomocą kabla z trzema skręconymi parami, aby utrzymać masę w pobliżu każdego sygnału, aby pomóc zmniejszyć szum i odrzucić zakłócenia.
Toby Lawrence

3
Wygląda na to, że niektórzy ludzie są obrażeni, że I2C jest popularną domyślną opcją połączenia dla wielu modułów sprzedawanych użytkownikom Arduino. Nawet jeśli nigdy nie został zaprojektowany dla zewnętrznego złącza płytki, jest tutaj i sprzedaje się, a prośba o wskazówki, jak lepiej zrobić złącze dla nowych urządzeń, jest przydatna dla nas, a nie dla ekspertów, i być może eksperci tego nie lubią.
ExcitingProjects,

1
@ExcitingProjects Nie, mają rację co do tego, co mówią, I2C nie był przeznaczony do tego i wyraźnie stoi przed kilkoma wyzwaniami w połączeniu między urządzeniami. Tak się składa, że ​​projektanci modułów zdecydowali się na I2C. Byłbym też „urażony”, gdybym miał wybór.
Anindo Ghosh,

Odpowiedzi:


16

Niedawno zwinąłem własne, jeśli chodzi o złącza I2C. Samo złącze nie jest bardzo ważne, teraz używam tylko głowicy o wysokości 100 mil (zwykle żeńskiej na pokładzie, więc nie jest tak kłopotliwy, gdy nie jest podłączony), ale wystarczy dowolne złącze pin 4plus. Dodatkowo używam P82B715z TI jako przedłużacz magistrali I2C. To pozwala przezwyciężyć problemy z pojemnością związane z uruchamianiem długich I2C, które, jak ludzie mówią, na początku nie były przeznaczone do I2C. Próbowałem wielu różnych kombinacji, jak w podanych przez ciebie przykładach i nie zauważyłem absolutnie żadnej różnicy w wydajności. Uważam, że dzieje się tak, ponieważ I2C jest stosunkowo wolny, zakłócenia między SDA i SCL nie stanowią większego problemu. Zasadniczo czas narastania napięć (gdy pojawią się zakłócenia) w magistrali są znacznie mniejsze niż długość bitu. To może nie być to, co chcesz usłyszeć, ale daje więcej opcji. Osobiście poszedłem z [VCC, SDA, GND, SCL], aby łatwo kierować do / z tego układu, a także być odpornym na mieszanie VCC / GND po podłączeniu do tyłu.


2
+1 + Zaakceptuj. Dzięki, prawdopodobnie najbardziej praktyczna jak dotąd odpowiedź: „istnieje urządzenie I2C, oto jak go używam i dlaczego”. Przydatne jest unikanie pomyłek VCC / GND. Warto unikać unikania nagłówków pinów na pokładzie, przez przypadek oderwałem kilka pinów od niektórych modułów czujników.
Anindo Ghosh,

To jest tylko odpowiedź, która jest naprawdę pomocna i jeśli mam wystarczającą reputację, dałbym za to premię @Samuel i wybrałem to pytanie, ponieważ mam wiele wielu modułów I2C i zbuduję moduły I2C pewnego dnia po tych przewodnikach.
ExcitingProjects,

11

Gdy został ustanowiony po raz pierwszy, magistrala I2C (obwód zintegrowany) była przeznaczona wyłącznie do łączenia układów scalonych na jednym zestawie PCB. Nigdy nie był przeznaczony do stosowania na kablach do łączenia wielu płyt razem, dlatego też nie zdefiniowano w tym celu żadnych złączy.

Jedyne znane mi „standardowe” interfejsy zewnętrzne oparte na I2C to krótkotrwały ACCESS.bus do podłączania urządzeń interfejsu użytkownika do komputerów oraz kanał danych wyświetlania VESA służący do pobierania informacji o monitorze przez złącza VGA, DVI i HDMI.


Rozumiem, że pierwotny cel był inny, ale ponieważ I2C jest teraz używany w wielu modułach połączonych kablami, mam nadzieję, że ktoś uruchomił wspólną bazę danych do dokumentowania pinów używanych przez różne produkty, zwłaszcza wiele produktów przeznaczonych dla Arduino i inne rynki płyt mikrokontrolerów.
Anindo Ghosh

4

Brak standardowego wyprowadzenia, brak standardowego złącza. Standard I2C nie jest naprawdę podatny na tego typu rzeczy. Jest określony na poziomie magistrali, a nie na poziomie urządzenia. Na przykład, jeśli chcesz podłączyć urządzenie I2C, czy wiesz standardowo, czy podciągnięcia są na hoście, czy na urządzeniu? Nie. Mnóstwo innych rzeczy, których nie znasz, np. Gdzie są twoje pojemności kabli, czym Vcc musi być ...

W rzeczywistości istnieją nawet urządzenia I2C, które potrzebują dodatkowych linii do przerwań i innych zwykłych cyfrowych wejść / wyjść. Jak dodać je do standardu, jeśli nie możesz uzyskać zgody na liczbę pinów, których potrzebujesz.

Podsumowując, jeśli szukasz przenośności i stabilności w swoich interkonektach, I2C i SPI nie są tam, gdzie musisz szukać.


3
Co jeśli ktoś szuka wskazówek dotyczących tworzenia własnego urządzenia, które działałoby (i polubiłoby) wszystkie pozostałe moduły dla duetu? Jest tam rynek, nie widzę sensu go ignorować. Nawiasem mówiąc, podciągnięcia są wymagane na hoście i opcjonalnie na urządzeniu, zgodnie ze specyfikacją.
Anindo Ghosh,

5
„Miłą” cechą standardów jest to, że jest ich tak wiele! Wybierasz standard z dobrze zdefiniowanym złączem, takim jak MIDI, USB, RS232 (oprócz tego głupiego modemu zerowego) i budujesz tłumacz na swoim własnym urządzeniu. Inną opcją jest utworzenie grupy roboczej ds. Standardów za pośrednictwem organizacji normalizacyjnej, takiej jak IEEE. „Opcjonalne” podciągnięcia na urządzeniu wpływają na zachowanie całej magistrali, co dokładnie potwierdza mój punkt widzenia. MIDI standardowo izoluje optycznie każde urządzenie, więc urządzenia zgodne nie powodują tych problemów
Scott Seidman

1
+1 za zabawny, ale tak prawdziwy punkt dotyczący standardów! :-)
Anindo Ghosh

4

Wiele osób używa pewnego rodzaju złącza do przesyłania sygnałów I²C i zasilania między dwiema płytkami drukowanymi. Na przykład,

Kilka ogólnych wskazówek dotyczących przenoszenia sygnałów I²C na większe odległości:

ps: Widzę, że Wikipedia: połączenie międzysystemowe I²C ma związek z tym pytaniem.


3

Chociaż nie ma standardu wyprowadzania I²C ani standardu złącza, istnieje wiele miejsc, w których I²C jest używany, które są znormalizowane. Niektóre, które przychodzą na myśl, to moduły pamięci (DIMM, SO-DIMM), złącza wideo ( DDC w DVI , VGA ) i SM-Bus (tak, ich strona wygląda jak coś zrobionego w połowie lat 90.). W szczególności złącze SM-bus ma klucz i zawiera tylko I²C i zasilanie, ale SM-Bus nakłada dodatkowe ograniczenia, więc technicznie nie każde urządzenie I²C powinno być podłączone do rzeczywistej SM-Bus. W okolicy jest też kilka innych zastrzeżonych wtyczek, takich jak czujniki Lego NXT.


Jest rzeczą oczywistą, że nie ma standardu ... Mam nadzieję na kanoniczny zbiór wskazówek, które projektanci urządzeń mogą następnie zastosować. Na przykład SMBus ma linię + 5 V na zewnątrz, podczas gdy NXP zaleca, aby + V i GND znajdowały się między śladami sygnału. Który sposób jest lepszy i dlaczego?
Anindo Ghosh,

2

Nie ma standardu.

Nie ma powszechnej praktyki.

Jeśli chodzi o kwestie związane z podejmowaniem decyzji, co robić:

  1. Trzymaj sygnały na jednej planszy, tak jak powinny być na pierwszym miejscu. Linie IIC mają dość wysoką impedancję, są jednostronne, a zatem są podatne na zakłócenia i nie zakończą dobrze linii przesyłowych. IIC po prostu nie jest przeznaczony do wyjścia poza pokład.

  2. Jeśli i tak zamierzasz zejść z pokładu, autobus powinien być krótki. Kilka cali jest prawdopodobnie OK. Metr lub więcej naprawdę prosi o kłopoty.

  3. Trzymaj się z dala od linii pokładowych z dala od źródeł hałasu. Na przykład nie należy owijać ich wokół silnika, a nawet próbować zbliżyć się do niego.

  4. Użyj złącza, którego nie można podłączyć do tyłu. Jeśli ktoś może podłączyć go do tyłu, ktoś to zrobi.

  5. Kabel wstążkowy jest prawdopodobnie najłatwiejszy w użyciu. Potrzebujesz minimum trzech przewodów, SCL, SDA i uziemienia. Dodanie mocy jest prawdopodobnie dobrym pomysłem. W każdym razie upewnij się, że przewód uziemienia znajduje się między SCL i SDA, aby uniknąć przesłuchu. Przewód zasilający nie powinien być głośny, więc przyklej go z jednej strony, nie ma znaczenia, który.

  6. Po zabawie ze złączami i ściganiu potencjalnych problemów, zdaj sobie sprawę, że punkt 1 był właściwie jedynym, który musisz wiedzieć.


Więc musimy postawić głowę w piasek dla wszystkich setek rzeczy I2C, które ludzie produkowali i sprzedawali dla początkujących arduino i innych mikrokontrolerów?
ExcitingProjects,

1

Jak zwykle w przypadku każdego postu z pytaniem, dlaczego coś jest [nt] standaryzowane:
Na szczęście ładowanie zostało rozwiązane teraz, gdy wszyscy znormalizowaliśmy na mini-USB.  [Czy jest to micro-USB?  Gówno.
Z XKCD


Być może, gdybyś przeczytał pytanie dokładniej lub wiele wątków komentarzy, mógłbyś zauważyć, że nie jest to poszukiwany standard , ale zbiór mądrości w formie kanonicznych wskazówek.
Anindo Ghosh,

1
@AnindoGhosh - Nie rozumiem, jak to robi różnicę. Jeśli zastąpisz standard przewodnikiem w powyższym komiksie, będzie on równie ważny. Każda sytuacja, w której istnieje wiele sposobów zrobienia czegoś, powoduje, że wiele osób robi to samo na wiele sposobów. Nawet jeśli nie jest to formalny „standard”.
Connor Wolf,
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.