PLN | EUR | USD

Dlaczego magistrala I2C (Inter-Integrated Circuit) sprawia, że łączenie układów scalonych jest tak proste - wskazówki dotyczące stosowania

Przez: Art Pini

Przekazane przez: Północnoamerykańscy redaktorzy Digi-Key

Komunikacja pomiędzy układami scalonymi i sterowanie nimi za pomocą magistrali równoległych na płytce drukowanej nie jest praktycznym rozwiązaniem. 8-bitowy procesor już wymagałby 16 linii tylko dla danych i wielu innych dla szyny adresowej. Jeszcze bardziej problematyczne jest to, że wiele układów scalonych musi znajdować się na wspólnej magistrali komunikacyjnej. Te wszystkie ścieżki nie mieszczą się na płytce drukowanej. Rozwiązaniem jest połączenie układu scalonego za pomocą szeregowej magistrali komunikacyjnej, takiej jak dwuprzewodowa magistrala Inter-Integrated Circuit (I2C).

W niniejszym artykule opisano pochodzenie magistrali I2C i sposób jej działania w celu utworzenia sprawnego szeregowego łącza między układami scalonymi. Następnie omówiono sposób fizycznej implementacji magistrali I2C, strukturę protokołu i popularne zastosowania tego wszechobecnego rodzaju magistrali komunikacyjnej. Do celów demonstracyjnych wykorzystano przykłady interfejsów I2C i rozwiązania oferowane przez firmę Microchip Technology. W artykule omówione zostaną również podobieństwa i różnice pomiędzy I2C a magistralą typu System Management Bus (SMBus).

Czym jest magistrala I2C?

Magistrala I2C została opracowana przez firmę Phillips Semiconductors, obecnie NXP Semiconductors, na początku lat 80. XX wieku jako prosta dwukierunkowa, dwuprzewodowa magistrala do efektywnej komunikacji i sterowania układami scalonymi na wspólnej płytce drukowanej. Pierwszą specyfikację ukończono w 1992 roku i od tego czasu magistrala ta stała się de facto standardem stosowanym w komponentach ponad 50 producentów układów scalonych. Taka popularność umożliwia systemowe podejście do projektowania, w którym układy scalone mogą być łatwo włączone do struktury magistrali I2C bez konieczności dodatkowego projektowania niestandardowego. Tę samą architekturę współużytkuje kilka innych wyspecjalizowanych magistrali m.in SMBus i Power Management Bus (PMBus).

Magistrala I2C może łączyć wiele układów scalonych i czujników, ponieważ jest magistralą adresowalną - siedmio- lub dziesięciobitowe pole adresowe umożliwia wysyłanie wiadomości do wybranego urządzenia przez urządzenie nadrzędne. Maksymalna prędkość zegara oryginalnej magistrali I2C wynosiła 100 kiloherców (kHz), ale z biegiem lat szybsze tryby pracy przesunęły ten limit do 3,4 megaherców (MHz).

Magistrala I2C wykorzystuje dwa przewody - linię danych (SDA) i linię zegara szeregowego (SCL). SDA i SCL są otwartymi dwukierunkowymi liniami typu otwarty dren / otwarty kolektor i są podłączone do dodatniej szyny zasilającej poprzez źródło prądu lub rezystor podciągający. Do magistrali można podłączyć kilka urządzeń, przy czym maksymalna ich liczba jest ograniczona przez pojemność magistrali. Urządzenie nadrzędne steruje magistralą, a każde urządzenie na magistrali ma swój unikalny adres. Urządzenie nadrzędne może zarówno nadawać, jak i odbierać dane poprzez magistralę (ilustracja 1). I2C obsługuje funkcję multi-master z mechanizmem detekcji kolizji i arbitrażem, aby zapobiegać jednoczesnemu inicjowaniu transferu danych przez więcej niż dwa urządzenia nadrzędne. W tym artykule skoncentrowano się jednak na pojedynczych konfiguracjach urządzenia nadrzędnego.

Schemat demonstracyjnej płytki drukowanej firmy Microchip Technology (kliknij, aby powiększyć)Ilustracja 1: schemat demonstracyjnej płytki drukowanej firmy Microchip Technology, która umożliwia zastosowanie magistrali I2C i łączy ją z pięcioma różnymi urządzeniami. Urządzenie nadrzędne znajduje się poza płytką i podłączone jest za pomocą złącza P1. Linie SCL i SDA są zaznaczone na zielono, a dwa rezystory podwyższające są zaznaczone na niebiesko. (Źródło ilustracji: Microchip Technology)

Ilustracja 1 przedstawia schemat płytki demonstracyjnej PKSERIAL-I2C1 I2C firmy Microchip Technology. Płytka ta umożliwia implementacje magistrali I2C z zastosowaniem pięciu różnych urządzeń, w tym EEPROM, czujnika temperatury, 12-bitowego przetwornika analogowo-cyfrowego (ADC), 10-bitowego przetwornika cyfrowo-analogowego (DAC) oraz 8-bitowego przetwornika szeregowo-równoległego. Urządzenie nadrzędne nie znajduje się na płytce i jest podłączone za pomocą złącza P1. Linie magistrali SCL i SDA są zaznaczone na zielono, a rezystory podwyższające są zaznaczone na niebiesko.

Poziomy SDA i SCL stanowią na ogół stały procent dodatniego napięcia zasilającego, zwykle oznaczanego jako VDD. Poziomy referencyjne zostały ustalone na poziomie 70% i 30% VDD odpowiednio dla stanu logicznego „1” (stan wysoki) i stanu logicznego „0” (stan niski).

Sygnały zegarowe występują w impulsach z jednym sygnałem na każdy przesyłany bit danych. Dane na linii SDA muszą być poprawne, gdy linia zegara znajduje się w stanie wysokim. Dane można zmieniać tylko, gdy linia zegara znajduje się w stanie niskim.

Z punktu widzenia projektanta, tworzenie nowych projektów jest prostsze, ponieważ interfejsy I2C są zintegrowane z układami scalonymi i nie ma potrzeby osobnego projektowania interfejsu. Każde urządzenie po prostu łączy się bezpośrednio z magistralą. Można dodawać układy scalone do magistrali lub usuwać je bez wpływu na pozostałe obwody (zakładając, że liczba układów scalonych ogółem nie przekracza limitu pojemności). Prosta magistrala dwuprzewodowa minimalizuje ilość wtyków w każdym układzie scalonym oraz ilość przebiegów na płytce drukowanej.

Protokół I2C

Magistrala jest zorientowana na grupy po 8 bitów i komunikuje się w bajtach. Jak wspomniano, pierwotna maksymalna częstotliwość taktowania zegara wynosiła 100kHz w ramach trybu, który obecnie nazywany jest standardowym trybem pracy. Magistrale obsługują dzisiaj 400 kilobitów na sekundę (kbit/s) w trybie Fast Mode, do 1 megabita na sekundę (Mbit/s) w trybie Fast Mode Plus i do 3,4Mbit/s w trybie High Speed Mode (Hs-Mode).

Protokół I2C najlepiej zilustrować za pomocą standardowego transferu na magistrali (ilustracja 2). Obraz ekranu pochodzi z oscyloskopu Teledyne LeCroy z opcją wyzwalania i dekodowania protokołów szeregowych o niskiej prędkości WS4KHD-EMB TD. Ten oscyloskop może wyzwalać i dekodować do 19 szybkich szeregowych interfejsów danych, w tym I2C.

Wygląd standardowego pakietu danych I2C (kliknij, aby powiększyć)Ilustracja 2: standardowy pakiet danych I2C składający się z bitu startu, pola adresowego, bitu potwierdzenia, 17 bajtów danych - każdy bajt z własnym bitem potwierdzenia odebrania danych ACK, a na końcu z bitu stopu. Każde pole jest identyfikowane za pomocą kodowanej kolorystycznie nakładki. Górna (żółta) ścieżka to cały pakiet SDA, pod nim znajduje się linia zegara SCL (czerwona). Trzecia i czwarta ścieżka to rozciągnięte poziomo widoki obu sygnałów. (Źródło ilustracji: Digi-Key Electronics)

Oscyloskop może być wyzwalany przez określone zdarzenia szeregowe, w tym start, stop, brak potwierdzenia ACK, adres, dane, adres plus dane, długość ramki oraz transfer danych z pamięci EEPROM. Elementy protokołu standardu danych szeregowych są identyfikowane za pomocą kodowanej kolorystycznie nakładki. Każde pole protokołu jest dekodowane w systemie binarnym, szesnastkowym lub ASCII z wybranym kodem wyświetlanym w nakładce.

Sygnał SDA pojawia się w postaci żółtej linii, a sygnał SCL - czerwonej. Szare pole zaznacza funkcje start i stop. Ceglastoczerwona nakładka oznacza dane adresowe, niebieskie pole to dane pakietu, a oliwkowe pola zaznaczają funkcje ACK.

Górny ślad pokazuje cały pakiet I2C SDA od początku do końca. Bezpośrednio pod nim znajduje się odpowiadający mu sygnał SCL. Trzecim śladem od góry jest rozciągnięte w czasie przybliżenie śladu sygnału SDA, a pod nim znajduje się odpowiadający mu sygnał SCL.

Zarówno linie SDA jak i SCL znajdują się w stanie wysokim pomiędzy transferami, gdy magistrala jest wolna. Sygnał SCL to impulsy składające się z dziewięciu cykli zegara, po jednym dla każdego przesyłanego bitu danych i jednym dodatkowym dla bitu ACK.

Wszystkie transakcje magistrali rozpoczynają się od bitu startowego wygenerowanego przez urządzenie nadrzędne, widocznego w powiększonym śladzie SDA w szarym polu. Początek jest sygnalizowany przez urządzenie nadrzędne ustawiające linię SDA w stanie niskim, podczas gdy linia SCL znajduje się w stanie wysokim. Po wysłaniu przez urządzenie nadrzędne bitu startowego magistrala jest zajęta. Urządzenie nadrzędne może wielokrotnie generować bity startowe - wtedy kolejne starty nazywa się restartami.

Wszystkie transfery danych mają długość 8 bitów (jeden bajt), a po każdym z nich następuje bit ACK. Bity są transmitowane w odpowiedniej kolejności - najpierw najbardziej znaczący bit (MSB). Każdy transfer bajtów musi zostać potwierdzony. Jeśli urządzenie podrzędne jest zajęte i nie może odbierać lub przesyłać danych, linia SCL może zostać ustawiona w stan niski. Wtedy urządzenie nadrzędne musi poczekać, aż urządzenie podrzędne zwolni linię SCL.

Bit ACK jest generowany po zwolnieniu przez urządzenie nadawcze linii SDA przed dziewiątym, potwierdzającym cyklem zegara. Jeśli urządzenie odbierające odbiera bajt danych, to ustawia stan niski linii SDA. W powiększeniu linii SDA na ilustracji 2, tuż przed dziewiątym cyklem zegarowym występuje wąski skok, który oznacza zwolnienie linii SDA w celu powrotu do stanu wysokiego. Odbiornik ustawia stan niski linii SDA generując sygnał ACK, który symbolicznie oznaczono polem w kolorze oliwkowym. Jeśli odbiornik nie ustawi stanu niskiego linii SDA dziewiątym cyklem zegara, to potwierdzenie nie zostanie wygenerowane (NACK). Jeśli wystąpi NACK, urządzenie nadrzędne może albo wygenerować sygnał stopu i przerwać transmisję, albo po raz kolejny wygenerować sygnał startu, aby ponowić próbę.

Natychmiast po wystąpieniu warunku startu, wysyłany jest adres urządzenia podrzędnego. Widoczny on jest w postaci ceglastoczerwonego pola. Istnieją dwa możliwe formaty adresów: 7-bitowy lub 10-bitowy, przy czym najczęściej stosowany jest adres 7-bitowy. Pierwsze 7 bitów po starcie odpowiada danym adresowym. Ósmy bit wskazuje kierunek danych - odczyt lub zapis. Zapis jest sygnalizowany tym, że wiersz SDA jest w stanie niskim, a stan wysoki w tym czasie oznacza operację odczytu. Adresowanie 10-bitowe wykorzystuje dwa pierwsze bajty po wystąpieniu warunku startu. I2C zastrzega kilka adresów dla funkcji wewnętrznych. Dane adresowe dekodowania pojawiają się w polu adresowym w formacie binarnym, hex lub ASCII.

Niebieskie nakładki oznaczają transfery danych. Każdy z nich ma długość ośmiu bitów, po których następuje odpowiedź ACK/NACK. Liczba bajtów danych w pakiecie I2C jest nieograniczona, ale na ilustracji 2 umieszczono ich 17. Zdekodowane dane, jak zdekodowany adres, pojawiają się w polu danych. Po przesłaniu danych urządzenie nadrzędne generuje bit stopu, oznaczony szarą ramką w górnej części ścieżki danych. Bit stopu jest przejściem od stanu niskiego do wysokiego na linii SDA, podczas gdy linia SCL znajduje się w stanie wysokim. Po sygnale stopu, magistrala ponownie jest wolna.

Tabela w dolnej części ekranu zestawia wszystkie informacje o pakiecie danych, w tym czas od momentu uruchomienia, długość adresu, adres, operacja odczytu lub zapisu, długość pakietu oraz podsumowanie zawartości danych. Liczba wpisów w tabeli odpowiada liczbie pakietów I2C w danym zakresie, który w tym przypadku jest tylko pojedynczą linią.

Jeśli wystąpi błąd protokołu, jest on sygnalizowany jaskrawoczerwoną ramką za innymi nakładkami.

Urządzenia I2C

Jedną z największych zalet magistrali I2C jest niezwykle duża liczba urządzeń, które je wykorzystują. Płytka demonstracyjna firmy Microchip Technologies zawiera kilka przykładów typów układów scalonych, które zawierają magistralę I2C lub jedną z jej pochodnych, takich jak SMBus.

Układ PIC16F677 firmy Microchip Technology to 8-bitowy mikrokontroler, który znajduje zastosowanie w wielu wbudowanych projektach. Korzysta on z synchronicznego portu szeregowego, który można zastosować do komunikacji z szeregowym interfejsem urządzeń peryferyjnych (SPI) lub I2C z innymi sterownikami lub urządzeniami peryferyjnymi (ilustracja 3).

Schemat 8-bitowego mikrokontrolera PIC16F677 firmy Microchip TechnologyIlustracja 3: układ PIC16F677 firmy Microchip Technology to 8-bitowy mikrokontroler, zawierający synchroniczny port szeregowy (zaznaczony na pomarańczowo), który może zostać zaprogramowany jako magistrala SPI lub I2C. (Źródło ilustracji: Microchip Technology)

Ten mikrokontroler obsługuje zarówno tryb nadrzędny, jak i podrzędny I2C przy użyciu 7- lub 10-bitowego adresowania. Wykorzystuje on wtyk SCK/SCL dla sygnału zegara SCL I2C oraz wtyk SDI/SDA dla sygnału danych.

Te dwa wtyki są podłączone do linii SCL i SDA na magistrali I2C, aby umożliwić komunikację z innymi urządzeniami. Często podłącza się w ten sposób czujniki oparte na I2C, takie jak dwuprzewodowy szeregowy czujnik temperatury TCN75AVOA713 firmy Microchip Technology (ilustracja 4).

Schemat czujnika temperatury TCN75A firmy Microchip TechnologyIlustracja 4: czujnik temperatury TCN75A firmy Microchip Technology jest podłączony do mikrokontrolera PIC16F677 w celu przesyłania danych dotyczących temperatury. (Źródło ilustracji: Microchip Technology)

Dzięki możliwości komunikacji szeregowej, czujnik ten ma większą funkcjonalność. Jego wewnętrzne, programowane przez użytkownika rejestry mogą być wykorzystywane do ustawiania rozdzielczości pomiaru temperatury, ustawiania trybu wyłączania oszczędzającego energię, a nawet do ustawiania alertu danych wyjściowych, kiedy zakres temperatury przekracza ustawione granice.

Istnieje również szereg urządzeń, które dekodują strumień danych szeregowych I2C i konwertują go na dane równoległe. Warto wziąć pod uwagę dwuprzewodowy ekspander wejść-wyjść MIC74YQS-TR i kontroler wentylatora firmy Microchip Technology (ilustracja 5).

Schemat ekspandera wejść-wyjść MIC74YQS-TR firmy Microchip TechnologyIlustracja 5: ekspander wejść-wyjść MIC74YQS-TR firmy Microchip Technology konwertuje strumienie danych szeregowych na niezależne równoległe linie wejść-wyjść. (Źródło ilustracji: Microchip Technology)

Ten układ scalony jest w pełni programowalnym ekspanderem wejść-wyjść zapewniającym osiem niezależnych linii wejść-wyjść. Linie wejść-wyjść mogą być indywidualnie programowane jako samo wejście lub samo wyjście. Ilustracja 5 przedstawia urządzenie MIC74YQS-TR z ośmioma diodami LED pod kontrolą magistrali szeregowej. Jest to podobny schemat do zastosowania MCO23008 na płytce demonstracyjnej I2C na ilustracji 1. Układ MIC74YQS-TR w połączeniu z regulatorem mocy może również sterować prędkością obrotową silnika wentylatora za pomocą czterech najbardziej znaczących bitów.

SMBus a I2C

Wejście szeregowe do ekspandera wejść-wyjść jest przeznaczone dla magistrali SMBus, ale jest również kompatybilne z magistralą I2C. Specyfikacja magistrali SMBus jest oparta na magistrali I2C i została określona przez firmy Intel i Duracell w 1994 roku. Podstawowa różnica polega na tym, że poziomy logiczne w standardowym trybie pracy magistrali I2C zależą do VDD a w przypadku SMBus są stałe. Doświadczenie mówi nam, że w większości przypadków przy VDD o wartości od 3 do 5 woltów nie jest to problem.

Inną różnicą jest to, że SMBus ma zegar ograniczony do 100kHz, podczas gdy I2C ma kilka trybów pracy, obsługujących wyższe częstotliwości taktowania. W kwestii kompatybilności z magistralą ogranicza to maksymalną częstotliwość taktowania do 100kHz lub do standardowego trybu pracy magistrali I2C.

Tak więc, z wyjątkiem bardzo szczególnych sytuacji, magistrale SMBus i I2C są kompatybilne.

Podsumowanie

Magistrala I2C i jej pochodne są obecne w setkach układów scalonych wszystkich typów, dzięki czemu można je łatwo łączyć w wielopoziomowe projekty i zastosowania. Sprzężenie sygnałów mieszanych i czujników analogowych rozszerza zakres systemów wbudowanych opartych na mikrokontrolerach. Wszystko to dzięki prostemu, dwuprzewodowemu, szeregowemu interfejsowi cyfrowemu.

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of Digi-Key Electronics or official policies of Digi-Key Electronics.

Informacje o autorze

Art Pini

Arthur (Art) Pini jest autorem często pisującym dla Digi-Key Electronics. Posiada on stopień licencjata w dziedzinie elektrotechniki, który uzyskał w City College of New York oraz magistra inżyniera elektryka, nadany przez City University of New York. Ma na swoim koncie ponad 50 lat doświadczenia w elektrotechnice i pracował na kluczowych stanowiskach inżynieryjnych i marketingowych w firmach Teledyne LeCroy, Summation, Wavetek oraz Nicolet Scientific. Interesuje się technikami pomiarowymi i ma szerokie doświadczenia z oscyloskopami, analizatorami widma, generatorami przebiegów dowolnych (AWG), digitizerami oraz miernikami mocy.

Informacje o wydawcy

Północnoamerykańscy redaktorzy Digi-Key