Projektowanie

Łączenie układów scalonych magistralą I2C - wskazówki aplikacyjne

W jaki sposób wykorzystać I2C do utworzenia sprawnego szeregowego łącza między układami scalonymi - artykuł przedstawia fizyczną implementację magistrali I2C, strukturę protokołu i jej popularne zastosowania.

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.

Poprzednia
Strona: 2/3
Następna