Zanim omówię budowę interfejsu, warto zastanowić się, jak odizolować dwukierunkowy interfejs I2C. W interfejsie sprzętowym problemem jest zmiana kierunku transmisji. Zmiana następuje tak w obrębie transmitowanego bajtu (bit ACK), jak i całych bajtów (zapis/odczyt). Na myśl przychodzi zastosowanie mikrokontrolera z dwoma interfejsami I2C. Niestety, dane mogłyby być przesyłane po skompletowaniu całej ramki lub bajtu, ale ze względu na transmisję synchroniczną i bit ACK należałoby to robić niejako on-line, bit po bicie.
W konsekwencji wybór padł na układ programowalny EPM3032ALC44-10. Jest on tani (około 10 zł), szybki, zawiera 600 funktorów logicznych i jest programowany przez interfejs JTAG. Zasilanie to co prawda z 3,3 V, ale na wejściach akceptuje napięcie 5 V. Schemat ideowy aplikacji układu w roli separatora galwanicznego I2C pokazano na rysunku 1.
Stabilizator U1 zasila układ U6. Jeśli magistrala jest zasilana z 3,3 V nie jest on potrzebny. Linie SDA i SCL z układu master wchodzą bezpośrednio na układ U6. Po rozdzieleniu nadawania i odbioru sygnały trafiają na transoptory. W strefie odizolowanej galwanicznie znajdują się rezystory podciągające linie SDA i SCL (R13, R16). Pierwotnie od strony mastera nie było rezystorów podciągających. Okazało się jednak, że płytka ArduinoMeag2560 ma rezystory podciągające IIC o wartości 10 kV a według specyfikacji NXP (Philipsa) maksymalna ich rezystancja do 5 kV. Spowodowało to problemy przy szybkich transmisjach i to na niezbyt duże odległości, rzędu 10 cm. Dlatego na płytce dodano rezystory 4,7 kV od strony mastera, które to można włączyć jumperami na JP2.
Sygnały SDA i SCL z slave po przejściu przez bufory z otwartym kolektorem sterują transoptorami. Transoptor U5 może służyć do przesłania sygnału przerwania. Funkcję bufora U3 może pełnić układ 74LS06 lub 74LS07. Funkcję rozdzielenia sygnałów oraz ich szybkiej transmisji zrealizowano za pomocą układu CPLD. Na maksymalną prędkość transmisji ma wpływ kilka czynników, a wśród nich:
- Częstotliwość generatora i szybkość układu CPLD.
- Szybkość transoptorów.
- Pojemność kabli połączeniowych.
ES2, EP