[SPI i I2C] Analiza protokołów szeregowych oscyloskopami Rohde&Schwarz, część 2

Protokół I2C

Jak już było wspomniane, interfejs I2C pełni podobne do SPI funkcje w urządzeniach elektronicznych. Oba interfejsy różnią się jednak zarówno rozwiązaniami układowymi, jak i protokołem. Zasadnicze podobieństwo to transmisja synchroniczna przebiegająca między urządzeniem Master i Slave. Dane i adresy urządzeń są przesyłane linią SDA w takt impulsów zegarowych na linii SCL. Obie linie są podciągane rezystorami do napięcia zasilającego. Wszystkie wyjścia dołączone do interfejsu I2C są typu Open Drain. Urządzenie nieaktywne wyłącza wyjście (zwalnia linię). Schemat blokowy interfejsu przedstawiono na rys. 10. Nietrudno zauważyć, że na schemacie tym nie ma linii wybierających urządzenia Slave. Są one adresowane na podstawie pierwszego bajtu występującego po sekwencji startowej. Każde urządzenie ma swój unikatowy w danym systemie 7- lub 10-bitowy adres.

 

 

Rys. 10. Typowa konfiguracja urządzeń komunikujących się ze sobą przez interfejs I2C

 

Transmisje są zawsze inicjowane przez urządzenie Master. Wysyła on adres urządzenia Slave, do którego chce wpisać, lub z którego chce czytać dane. Adres składa się najczęściej z niezmiennej części identyfikującej typ układu dołączonego do magistrali I2C oraz modyfikowalnej części identyfikującej np. konkretny układ scalony wchodzący w skład systemu mikroprocesorowego. Bezpośrednio za adresem przesyłany jest bit R/W (Read/Write) decydujący o kierunku transmitowanych danych – od Slave’a do Mastera lub od Mastera do Slave’a.

Ze względu na rozwiązania sprzętowe przyjęte w interfejsie I2C, zastosowany w nim protokół jest dużo bardziej złożony niż w SPI. Inaczej wygląda sekwencja wymiany informacji podczas zapisu do Slave’a, inaczej podczas odczytu. W stanie bezczynności linie SCL i SDA są zwolnione (pozostają w stanie wysokim na skutek odłączenia wyjść i podciągania linii do napięcia zasilania). Transmisja jest inicjowana wygenerowaniem specjalnej sekwencji startu „S”, w której sygnał SDA zmienia stan z wysokiego na niski, podczas gdy linia SCL jest utrzymywana w stanie wysokim. Następnie linia SCL przechodzi do stanu niskiego, a chwilę później linia SDA przybiera stan zgodny z wartością pierwszego bitu transmitowanej danej. Teraz Master generuje 8 impulsów zegarowych na linii SCL. Dane są zawsze 8-bitowe. Ramka jest jednak rozszerzona o dziewiąty impuls zegarowy wykorzystywany do przesyłania bitu potwierdzającego odebranie informacji. Potwierdzeniem (ACK) odebrania informacji przez Slave’a jest wyzerowanie przez niego linii SDA na dziewiątym impulsie zegarowym. Wygenerowanie takiego potwierdzenia może wymagać pewnego czasu, układ Slave wprowadza więc Mastera w stan oczekiwania (wait state) przez przytrzymanie linii SDA W stanie niskim. Do momentu jej zwolnienia wszelkie operacje na magistrali I2C są wstrzymane. Brak potwierdzenia (bit ACK=1) powoduje zakończenie transmisji. Normalnie natomiast transmisja jest kończona wystawieniem sekwencji stopu — P. Jest to przejście linii SCL do stanu wysokiego podczas niskiego stanu linii SDA, a następnie ustawienie linii SDA również w stan wysoki. Protokół I2C w różnych wariantach pracy przedstawiono na rys. 11. Należy zwrócić uwagę na dwukrotne przesyłanie adresu urządzenia Slave w jednej transmisji, występujące wtedy, gdy realizowany jest odczyt wskazanego rejestru Slave’a. Przed powtórnym wysłaniem adresu musi być wtedy wygenerowany tzw. powtórzony start.

 

Rys. 11. Protokół I2C w operacjach zapisu i odczytu do/z urządzenia Slave

 

Analiza protokołu I2C oscyloskopami Rohde&Schwarz

Zakładkę, na której konfiguruje się protokół I2C przedstawiono na rys. 12. Czynności ograniczają się praktycznie do powiązania kanałów pomiarowych z liniami interfejsu i określenia, czy bit R/W jest doklejony do adresu, czy też występuje w wydzielonym polu.

 

Rys. 12. Zakładka konfiguracji protokołu I2C

 

Możliwości analizy protokołu uwidaczniają się po naciśnięciu przycisku TRIGGER. Korzystając z elementów znajdujących się na wyświetlonej zakładce należy wybrać najbardziej odpowiednie zdarzenie wyzwalające, a jest z czego wybierać (rys. 13).

 

 

Rys. 13. Zakładka wyboru zdarzenia konfigurującego – opcje startu i stopu

 

O autorze