I2C – Inter Integrated Circuit

I2C – Inter Integrated Circuit

I2C, czyli Inter Integrated Circuit, to protokół komunikacyjny służący do wymiany danych między układami scalonymi na jednej płytce drukowanej. Został opracowany przez firmę Philips w latach 80., a jego główną zaletą jest prostota i niewielka liczba przewodów potrzebnych do przesyłu danych. Dziś wyjaśnię, jak działa I2C, jakie ma cechy charakterystyczne i w jakich zastosowaniach jest wykorzystywany – a także dlaczego w świecie elektroniki jest tak bardzo popularny, zwłaszcza w systemach wbudowanych i mikrokontrolerach.

Podstawy protokołu I2C

Protokół I2C opiera się na magistrali dwukierunkowej, która składa się z dwóch głównych linii sygnałowych: SDA (Serial Data Line) i SCL (Serial Clock Line). Obie linie są typu open-drain, co oznacza, że urządzenia na magistrali mogą je jedynie „ściągać do zera”, a linie są podciągane do wysokiego poziomu rezystorami pull-up. Dzięki temu wiele urządzeń może współdzielić tę samą magistralę bez konfliktów. W komunikacji I2C występuje jeden lub więcej masterów, które inicjują transmisję, oraz jeden lub więcej slave’ów, które odpowiadają na zapytania.

Jak działa transmisja danych w I2C?

W trakcie transmisji master generuje sygnał zegarowy na linii SCL, synchronizując przesył danych na linii SDA. Dane przesyłane są bit po bicie, a po każdej bajcie następuje bit potwierdzenia ACK (Acknowledge), który sygnalizuje poprawne odebranie informacji przez urządzenie docelowe. Komunikacja rozpoczyna się sygnałem start, a kończy sygnałem stop. Dzięki temu urządzenia wiedzą, kiedy zaczyna się i kończy przesył danych, co pozwala uniknąć błędów i kolizji.

Zalety i ograniczenia I2C

  • Minimalna liczba przewodów: tylko dwie linie sygnałowe do komunikacji wielu urządzeń.
  • Adresowanie: każde urządzenie na magistrali posiada unikalny 7- lub 10-bitowy adres, co pozwala podłączyć nawet kilkadziesiąt komponentów.
  • Synchronizacja: zegar generowany przez master gwarantuje spójność przesyłu danych.
  • Prędkość transmisji: standardowo do 100 kbps, w trybie Fast-mode do 400 kbps, a w Fast-mode Plus nawet do 1 Mbps.
  • Ograniczenia: I2C jest protokołem krótkiego zasięgu, najczęściej stosowanym na jednej płytce PCB lub w niewielkich systemach.

Zastosowania I2C w elektronice

Interfejs I2C jest powszechnie stosowany w mikrokontrolerach do komunikacji z różnego rodzaju czujnikami (np. temperatury, wilgotności, ciśnienia), pamięciami EEPROM, zegarami RTC czy układami ADC/DAC. Dzięki prostocie magistrali, inżynierowie mogą łatwo dodawać nowe komponenty bez potrzeby zwiększania liczby pinów na mikrokontrolerze. W systemach embedded, I2C jest niemal standardem do łączenia peryferiów.

Budowa i działanie magistrali

Linia Funkcja
SDA (Serial Data Line) Dwukierunkowa linia danych, przesył bitów informacji
SCL (Serial Clock Line) Linia zegara, steruje synchroniczną transmisją

Ważnym elementem działania I2C jest możliwość podłączenia wielu urządzeń do tych samych linii SDA i SCL. Każde urządzenie ma swój adres, co umożliwia masterowi wybór, z którym slave chce się komunikować. Aby uniknąć konfliktów na magistrali, I2C stosuje procedury detekcji kolizji i arbitrażu – gdy dwa mastery próbują jednocześnie przejąć kontrolę, ten z wyższym priorytetem wygrywa.

Synchronizacja i timing w I2C

Często w dokumentacji technicznej natkniesz się na pojęcia takie jak setup time, hold time czy bus free time. Te parametry określają minimalne wymagania czasowe pomiędzy zmianami sygnałów na liniach SDA i SCL, które muszą być zachowane, aby urządzenia mogły poprawnie odczytać dane. Dzięki tym standardom, urządzenia różnych producentów mogą współpracować bez problemów, co jest ogromną zaletą I2C.

Alternatywy i rozszerzenia I2C

Chociaż I2C jest bardzo popularny, to w niektórych zastosowaniach zastępują go protokoły SPI lub UART, które oferują wyższą szybkość lub prostszą implementację punkt-punkt. Jednak tam, gdzie liczy się liczba połączeń i łatwość rozbudowy – I2C jest niezastąpiony. Istnieją też rozszerzenia, takie jak SMBus (System Management Bus) używany głównie w komputerach do komunikacji z czujnikami i bateriami, które bazują na I2C, ale dodają własne protokoły i zabezpieczenia.

Choć dziś skupiliśmy się na I2C, warto zauważyć, że protokół ten często współpracuje z magistralami o wyższych częstotliwościach, takimi jak SPI, szczególnie w bardziej złożonych systemach embedded. Jutro możemy przyjrzeć się właśnie SPI i porównać jego cechy z I2C, abyś mógł lepiej dobrać odpowiedni interfejs do swoich projektów.