Łącze I2C, zwane też TWI i jego odmiany, zgodnie z nazwą zasadniczo przeznaczone jest do komunikacji między układami scalonymi w obrębie jednego urządzenia, czyli na odległość rzędu metra, najwyżej kilku metrów. W takich podstawowych zastosowaniach zazwyczaj izolacja galwaniczna nie jest potrzebna. Jednak łącze I2C stało się bardzo popularne i dostępnych jest wiele układów scalonych, w tym rozmaitych czujników.
W niektórych przypadkach potrzebne jest łącze I2C o długości większej, niż przewidują standardowe parametry. Opracowano różne rozwiązania pozwalające przesyłać sygnały I2C na zaskakująco dalekie odległości. To jest jednak odrębny temat, wykraczający poza ramy zadania JakDziała12. Co istotne, w niektórych zastosowaniach zalecane, albo wręcz niezbędne jest zastosowanie izolacji galwanicznej miedzy obwodami połączonymi linią I2C. Opracowano różne metody izolacji galwanicznej łącza I2C.
Zadanie nie jest łatwe, bowiem trzeba stworzyć układ z izolacją galwaniczną, który będzie przekazywał dane w dwóch kierunkach, nie ulegając przy tym zatrzaśnięciu. Problem zatrzaśnięcia polega na tym, że przy dwukierunkowym przekazywaniu danych występuje silne dodatnie sprzężenie zwrotne. Aby uniknąć zatrzaśnięcia, stosuje się jakąś formę czasowego blokowania jednego kierunku transmisji, co jednak daje pewne negatywne efekty w postaci niepożądanych impulsów szpilkowych.
Trudność polega też na uzyskaniu dużej prędkości transmisji.
Prosty sposób z rysunku B pojawił się już dawno, bo około roku 1998 w jednej z not aplikacyjnych National Semiconductor. Schemat jest popularny i można go znaleźć w wielu miejscach w Internecie. Przykład z wartościami elementów (ale bez podanych typów transoptorów) pokazany jest na rysunku C. Jak wiadomo, linie łącza I2C w spoczynku są podciągnięte do dodatniego napięcia zasilania przez rezystory podciągające, a komunikacja polega na zwieraniu linii do masy.
W układzie z rysunku C w spoczynku oba punkty oznaczone DA „wiszą w powietrzu”, a to znaczy, że żaden z transoptorów nie przewodzi i układ nie pobiera prądu.
Jeżeli w układzie z rysunku B punkt B potraktujemy jako wejście i zewrzemy do masy, wtedy sytuacja będzie wyglądać jak na rysunku D. Prąd popłynie przez rezystor R1, ale co ważniejsze, także przez R2 i diodę LED transoptora Opt1. Otworzy to tranzystor wyjściowy transoptora Opt1. W punkcie F napięcie będzie bliskie zeru. Napięcie w punkcie D będzie wyższe o spadek napięcia na diodzie Schottky’ego D2, ale i tak będzie niższe niż 1V, więc w punkcie D, będącym teraz wyjściem, będzie panował stan niski. Jeżeli natomiast punkt D potraktujemy jako wejście i zewrzemy do masy, to sytuacja będzie taka, jak pokazuje rysunek E.
Prąd popłynie przez rezystor R4, ale też przez połączone w szereg rezystor R3 i diodę transoptora Opt2. Przewodzący tranzystor wyjściowy transoptora Opt2 spowoduje, że w punkcie E napięcie będzie bliskie potencjałowi masy. W punkcie B napięcie będzie wyższe o spadek napięcia na diodzie Schottky’ego D1, ale zapewne będzie mniejsze od 1 wolta. W punkcie B, które teraz jest wyjściem, będzie panował stan niski.
Dzięki obecności diod (Schottky’ego) D1, D2 nie ma dodatniego sprzężenia zwrotnego, dzięki czemu układ nie zatrzaśnie się.
Działanie jest proste i wszystko wydaje się oczywiste. Ale w praktyce jest inaczej. Otóż możemy przyjąć, że w transoptorach po stronie nadawczej pracują diody podczerwone IRED, których napięcie przewodzenia jest rzędu 1,2V. To znaczy, że przy zasilaniu 5V na współpracującym rezystorze (R2, R3) podczas pracy wystąpi napięcie około 3,8V. Rezystor ma wartość 3,3 kilooma, więc prąd transoptora wyniesie mniej więcej 1,15mA.
To jest bardzo mała wartość prądu, a jak wiadomo, w ogromnej większości transoptorów przy małych prądach silnie maleje „przekładnia”, czyli współczynnik CTR. Prądu pracy nie można znacząco zwiększyć z uwagi na wymagania i ograniczenia standardu I2C, a konkretnie maksymalny prąd wyjściowy linii SDA i SCL.
Dlatego w rzeczywistości nie mogą tu pracować transoptory z pojedynczym (foto)tranzystorem wyjściowym, tylko z dwoma tranzystorami wyjściowymi w układzie podobnym do darlingtona, jak pokazuje rysunek C. Nie powinien to być jednak klasyczny układ Darlingtona, ponieważ nie może on ściągnąć kolektora do potencjału masy.
Kolejny problem to szybkość: wiele transoptorów ma czasy reakcji rzędu kilkudziesięciu mikrosekund. Tymczasem standardowa częstotliwość taktowania łącza I2C to 100kHz, co daje okres 10 mikrosekund. Powolne transoptory wymuszą znaczne zmniejszenie częstotliwości transmisji I2C, co zwykle jest możliwe, bo układem taktującym (Master) jest mikroprocesor.
W niektórych źródłach można znaleźć wskazówkę, że mają to być „niskoprądowe” i stosunkowo szybkie transoptory 6N139 o gwarantowanym minimalnym prądzie pracy 0,5mA, współczynniku CTR 500% i czasach przełączania kilku mikrosekund.
Na stronie www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus/frequently-asked-questions/i2c-faq.html można znaleźć pokrewny schemat z dodatkowymi tranzystorami (rysunek F), pozwalającymi wykorzystać transoptory o gorszych parametrach. Typy i wartości elementów są podane na wskazanej stronie.
W literaturze schemat z rysunku B i pokrewne pojawiają się często, ale niektórzy zwracają uwagę na dodatkową wadę, mianowicie wytwarzanie niepożądanych impulsów w pewnych specyficznych warunkach pracy. Mianowicie wtedy, gdy oba wejścia zostaną kolejno zwarte do masy, a potem jedno zostanie od niej odłączone. Wtedy to odłączone wejście nadal powinno pozostać w stanie niskim, już jako wyjście, według rysunków D, E. Niestety, w tych prostych układach tuż po odłączeniu od masy najwcześniej zwartego wejścia, na chwilę pojawi się dodatni impuls – szpilka o czasie trwania wyznaczonym przez czasy przełączania dwóch transoptorów.
Obecnie dostępne są układy scalone, które wykorzystują inne sposoby i też zapewniają izolację galwaniczną przy zachowaniu prawidłowej dwukierunkowej pracy. Przykładem mogą być popularne układy Analog Devices IDuM1250/ IDUM1251, zawierające nie transoptory, tylko obwody pojemnościowej izolacji galwanicznej.
Właśnie układy IDuM1250 i 1251 różnią się pewnym szczegółem. Na szczegół ten zwrócili uwagę niektórzy uczestnicy zadania Jak12, którzy wskazali, że układ z rysunku B to tylko połowa, a raczej część systemu izolacji linii I2C. Na pewno taki dwukierunkowy układ potrzebny jest w linii danych SDA. A w linii SCL? Czy w linii SCL potrzebna jest transmisja dwukierunkowa?
I tak, i nie!
Dwukierunkowy izolator byłby niezbędny w linii SCL wtedy, gdyby w systemie było więcej niż jedno urządzenie master i to po obydwu stronach linii. Należy też dodać dla ścisłości, że niektóre urządzenia odbiorcze (slave) mogą wstrzymywać transmisję, przez wymuszanie stanu niskiego na linii zegarowej SCL do czasu, gdy będą gotowe do dalszych działań, co jest nazywane clock stretching. W takich przypadkach dwukierunkowa linia SCL jest konieczna.
Jednak w ogromnej większości przypadków, w systemach z łączem I2C jest tylko jedno urządzenie master, a urządzenia slave nie ingerują w linie zegarową i wtedy wystarczy układ jednokierunkowy, na przykład według rysunku G. Zadanie było bardzo trudne i nie wszystkie nadesłane odpowiedzi były trafne.