Badanie podstawowych parametrów magistrali szeregowej I2C.doc

(6095 KB) Pobierz
I2CBUS

Badanie podstawowych parametrów magistrali szeregowej I2C.

 

POLITECHNIKA CZĘSTOCHOWSKA

 

 

WYDZIAŁ ELEKTRYCZNY

 

 

 

 

INSTRUKCJA DO ĆWICZENIA

 

 

 

 

Badanie podstawowych parametrów magistrali szeregowej I2C.

 

 

 

 

 

 

 

 

 

 

 

 

Częstochowa 2004

 

1. Wstęp teoretyczny.

1.1. Wprowadzenie.

Do mikrosterowników jednoukładowych w zastosowaniach 8 – bitowych można wprowadzić pewne kryteria projektowe:

-         pełny system składa się zazwyczaj z co najmniej jednego mikrosterownika, oraz innych urządzeń peryferyjnych, takich jak pamięci, ekspandery we/wy

-         koszt połączeń różnych urządzeń wewnątrz systemu musi być utrzymany na minimalnym poziomie

-         system taki wykonuje zazwyczaj funkcje kontrolne i nie wymaga przesyłania danych z dużą prędkością

-         ogólna sprawność zależy od wybranych urządzeń, oraz struktury połączeń wzajemnych



Aby stworzyć system spełniający powyższe kryteria wymagana jest magistrala o strukturze szeregowej. Chociaż magistrale szeregowe nie posiadają takiej przepustowości informatycznej, jaką maja magistrale równoległe, to jednak potrzebują mniej połączeń przewodowych, oraz mniej złącz do połączenia. Magistrala nie jest jednak tylko wewnętrznym okablowaniem, zawiera ona wszystkie postacie, formaty i procedury dla komunikacji wewnątrz sytemu.                            Rys.1. Typowa konfiguracja I2C

Urządzenia komunikują się ze sobą za

pośrednictwem magistrali szeregowej musza zachować pewien format protokołu, który zapobiegnie wszelkim możliwością bałaganu, utracie danych, oraz blokadzie informacji. Urządzenia szybkie muszą mieć możliwość komunikowania się z urządzeniami wolnymi. System nie może być uzależniony od urządzeń do niego podłączonych, gdyż uniemożliwiałoby to modyfikacje i usprawnienia. Procedura powinna być tez zdolna do decydowania, które urządzenie i kiedy ma być sterowane przez magistrale. A gdy do magistrali zostaną podłączone różne urządzenia, o różnych częstotliwościach zegara, to musi zostać określone źródło zegara do wybranego urządzenia. Wszystkie te kryteria włączone są do specyfikacji magistrali I2C.

1.2. Magistrala szeregowa I2CBUS.

Szeregowa magistrala interfejsu I2CBUS składa się z dwóch, dwukierunkowych linii: jednej dla sygnału danych (Serial Data - SDA) oraz drugiej dla sygnału zegarowego (Serial Clock - SCL). Dla zapewnienia poprawnej wymiany informacji przez magistralę zdefinio­wano następujący protokół:

1. Inicjalizacja transmisji danych może nastąpić tylko wtedy, gdy magistrala nie jest zajęta.

2. Podczas transmisji danych, sygnał na linii SDA musi być stabilny (nie może się zmieniać), gdy stan sygnału na linii SCL jest H. Zmiany sygnału na linii SDA podczas wysokiego stanu na linii SCL są interpretowane jako sygnały sterujące (control). W związku z tym określono następujące warunki na magistrali:

• magistrala nie zajęta (Bus Not Busy) - linie SDA i SCL są w stanie H,

• start transmisji danych - zmiana stanu linii SDA z H na L, doko­nana podczas wysokiego stanu linii SCL,

• stop (zatrzymanie) transmisji danych - zmiana stanu na linii SDA, z L na H dokonana podczas wysokiego stanu linii SCL,

• dane ważne (Data Valid) - stany sygnału na linii SDA reprezentują „dane ważne", gdy (po wystąpieniu warunku startu) pozostają stabilne przez czas trwania stanu H linii SCL. Zmiana danych w linii SDA może nastąpić podczas trwania stanu niskiego linii SCL.

Na rysunku 2 przedstawiono sekwencję zdarzeń zacho­dzących podczas transmisji informacji na magistrali I2C. Każda transmisja inicjowana jest poprzez wystąpienie warunku start i kończona poprzez wystąpienie warunku stop.



 

 

 

 

 

 

 

 

 

Rys. 2. Transmisja danych przez magistralę I2C.

Wykrycie warunków start i stop jest zadaniem sterownika magistrali I2CBUS. Jeżeli nie wykorzystuje się specjalizowanego sterownika, należy testować stan linii SDA przynajmniej dwa razy częściej niż okres sygnału zegara na linii SCL.

1.3. Synchronizacja wymiany danych na magistrali I2CBUS.

1.3.1. Sygnalizacja początku i końca transmisji.

Jak już powiedziano, znacznikami początku i końca transmisji są odpowiednio warunki start i stop. Ilość bitów transmitowanych pomiędzy startem i stopem nie jest limitowana.

1.3.2. Postać przesyłanych danych.

Każdy bajt wysyłany linią SDA ma długość 8 bitów. Liczba bajtów po rozpoczęciu transmisji do jej zakończenia jest dowolna. Każdy wysłany bajt musi być potwierdzony przez odbiornik. Dane wysyłane są od najstarszego bitu do najmłodszego. Jeśli odbiornik nie jest w stanie przyjąć kolejnego kompletnego bajtu, to dla poinformowania nadajnika i zwolnienia transmisji ustala stan niski na linii zegara SCL. Wznowienie transmisji może nastąpić natychmiast po tym, jak odbiornik zwolni linię SCL, usuwając z niej stan niski.

1.3.3. Potwierdzenia danych.

Na magistrali I2CBUS niezbędne są potwierdzenia przesyłanych danych, które wysta­wiane są po przesłaniu każdego bajtu. Urządzenie master zobowiązane jest do generowania dodatkowego taktu sygnału zegarowego dla uchwycenia bitu potwierdzenia. W czasie potwierdzenia, nadajnik ustawia swoje wyjście danych na H, co umożliwia odbiornikowi wysłanie potwierdzenia poprzez wymuszenie niskiego stanu na linii SDA. Potwierdzenie pojawia się w czasie trwania wspomnianego, dodatkowego taktu zegarowego.

Mogą jednak wystąpić sytuacje, w których potwierdzenia nie będą wystawiane. Jeśli odbiornik slave nie potwierdził wysłanego do niego adresu własnego (na przykład z powodu wykonywania jakiejś funkcji czasu rzeczywistego) lub któregokolwiek z przesyłanych następnie bajtów, to linię SDA powinien pozostawić w stanie wysokim, a urządzenie master powinno wysłać warunek stop.

Jeśli odbiornik master przyjmuje dane, to powinien sygnalizować nadajnikowi koniec danych przez nie potwierdzenie ostatniego bajtu danych. Nadajnik pozostawia linię SDA w stanie wysokim, umożliwiając urządzeniu master zakończenie transmisji warunkiem stop.

1.3.4. Arbitraż.

W systemie I2CBUS może dojść do sytuacji, że więcej niż jedno urządzenie zechce przejąć kontrolę nad łączem (być masterem). Zdefiniowano, więc specjalna procedurę arbitrażowa, która wyłania jednego, mastera spośród urządzeń rywalizujących o sterowanie transmisja. Arbitraż oparto na zasadzie kontroli zgodności, stanu linii SDA z wartością logiczna bitu wyprowadzanego przez dane urządzenie. Odczyty stanu linii SDA odbywają się w ściśle określonych momentach wyznaczanych sygnałem zegarowym.

Trzeba pamiętać, że podczas arbitrażu dwa lub więcej urządzenia wyprowadzają swoje bity na linię danych i może się zdarzyć, że gdy jedno wyprowadza jedynkę. to drugie wyprowadza zero. Na linii SDA w takim przypadku ustali się stan L, ponieważ dla podłączonych do tej linii urządzeń realizuje ona funkcję iloczynu na drucie. Urządzenie, które chciało wyprowadzić jedynkę, po stwierdzeniu, że na linii SDA jest zero, wypada z arbitrażu (wyłącza swoje wyjście). Widać więc, że przedstawione rozwiązanie preferuje urządzenie, które w czasie arbitrażu wysyła najniższa wartość binarna.

Dla poprawnego przeprowadzenia arbitrażu konieczna jest synchronizacja sygnałów zegarowych urządzeń, które wałcza o sterowanie transmisja. Wszystkie urządzenia generują swoje własne sygnały zegarowe na linii SCL umożliwiając przesył danych oraz potwier­dzenia. Dane na linii SDA są ważne tylko dla wysokiego stanu linii zegara. Synchronizację przesyłu danych uzyskuje się poprzez wykorzystanie funkcji iloczynu na drucie, tym razem realizowanej na linii SCL. Linia SCL będzie tak długo w stanie niskim, aż wszystkie urządzenia nie zwolnią tej linii.

Długość stanu wysokiego na linii SCL jest zatem określona przez czas trwania najkrótszego okresu spośród sygnałów zegarowych, a długość stanu niskiego przez czas trwania najdłuższego okresu spośród sygnałów zegarowych.

Urządzenie master, które utraciło kontrolę nad magistrala, może generować tylko sygnały zegarowe do końca bajtu, przy którym utraciło kontrolę. Arbitraż nie jest dozwolony w trakcie powtarzanego warunku START lub STOP.

1.3.5. Przebieg transmisji.

Transmisję rozpoczyna warunek start, po którym zostaje wysłany siedmiobitowy adres urządzenia slave. Kierunek przesyłu danych określa bit R/W wyprowadzany w następnej kolejności. Zerowa wartość tego bitu oznacza nadawanie do urządzenia slave (operacja zapisu), natomiast jeden, oczekiwanie na dane z urządzenia slave (operacja odczytu). Dalej odbywa się właściwa wymiana danych, potwierdzana przez odbiornik impulsami ACK po skompletowaniu każdego bajtu. Koniec transmisji wyznacza warunek stop. Na rysunku 3 przedstawiono pełny transfer danych na magistrali I2CBUS.

 

Rys. 3. Pełny transfer danych na magistrali I2CBUS.

 

Rys.4. Format transmisji: master - nadawca, slave – odbiorca.

 

Rys.5. Format transmisji: master - odbiorca, slave – nadawca.

 

 

Rys.6. Format transmisji ze zmianą kierunku danych.

 

Możliwe są trzy formaty transmisji. Na rysunku 4 przedstawiono sytuację, w której urządzenie master jest nadawca a slave odbiorca danych.

Drugi przypadek, w którym master zaraz po zaadresowaniu urządzenia slave przechodzi do odbioru danych pokazuje rysunek 5.

Trzeci format, będący kombinacja dwóch poprzednich, ma miejsce, gdy w czasie jednej transmisji następują zmiany kierunku przepływu danych. Przed każda zmiana musi być ponownie generowany sygnał start, adres urządzenia slave oraz nowa wartość bitu kierunku (rys. 6).

1.3.6. Adresowanie urządzeń.

Po warunku start rozpoczynającym transmisję, zostaje wysłany bajt, w którym siedem bitów reprezentuje adres urządzenia slave, a najmniej znaczący bit (LSB) określa kierunek transmisji. Wszystkie urządzenia po wykryciu warunku start porównują odebrany adres ze swoim adresem sprzętowym. Rozpoznanie adresu własnego oznacza zaadresowanie urządzenia jako odbiornik slave lub nadajnik slave, w zależności od bitu R/W.

W niektórych urządzeniach adres własny składa się z dwóch części: stałej oraz prog­ramowalnej. Taki przypadek występuje w układach scalonych o niedużej inteligencji, wyposażonych w proste sterowniki interfejsu. Kilka starszych bitów adresu (zazwyczaj od 4 do 6) jest ustawionych na stałe przez producenta, a pozostałe młodsze bity użytkownik może zaprogramować poprzez łączenie ich wyprowadzeń do zasilania lub masy. Ilość bitów programowalnych ogranicza ilość układów tego samego typu (a więc posiadających identyczna stała część adresu), które mogą być jednocześnie podłączone do magistrali. Trzy bity programowalne pozwalają na połączenie do ośmiu układów tego samego typu.

Pewnym wyjątkiem w sposobie adresowania jest adres rozgłoszeniowy (general call), który powoduje zaadresowanie wszystkich urządzeń w systemie. Adres ten, przynajmniej teoretycznie, powinien być potwierdzony przez wszystkie urządzenia. Niektóre urządzenia mogą być jednak niewrażliwe na ten sposób adresowania. Po adresie rozgłoszeniowym wysłany zostaje drugi bajt określający polecenie. Procedura ta zostanie dokładniej wyjaś­niona w dalszej części rozdziału.

W interfejsie I2CBUS zarezerwowano dwie grupy po osiem adresów do celów przedsta­wionych w tabela 1. Są to adresy o wartości OOOOXXX[R/W] oraz 11110XX[R/W], gdzie X równa się O lub l, a R/W oznacza bit kierunku. Dla pierwszej grupy zdefiniowane są następujące zadania:

1.3.7 Adresacja rozgłoszeniowa.

 

Urządzenie reagujące na adres rozgłoszeniowy potwierdza jego odbiór i dalej zachowuje się jak odbiorca slave. Urządzenia „nie zainteresowane" rozgłaszana informacja mogą nie potwierdzać adresu rozgłoszeniowego. Jeżeli urządzenie nie jest w stanie przetworzyć kolejnych bajtów w bloku rozgłoszeniowym, nie może wystawiać potwierdzeń.

 

Tabela 1. Znaczenie pierwszego bajtu

Adres slave

 

Bit R/W

 

Opis

 

0000000

 

0

 

Adres rozgłoszeniowy

 

0000000

 

1

 

Bajt startowy

 

0000001 0000010

 

  X

  X

 

Adres zarezerwowany dla urządzeń pracujących w standardzie CBUS Adres zarezerwowany dla innych formatów transmisji

 

0000011 00001XX 11111XX

 

X

 

Zarezerwowane dla przyszłych potrzeb

 

1111OXX

 

X

 

Adres dla dziesięciobitowego trybu adresowania (rozszerzony I2CBUS)

 

Po adresie rozgłoszeniowym wysyłany jest drugi bajt, który określa znaczenie rozgłoszenia. Występują tutaj dwa przypadki rozróżniane stanem najmłodszego bitu wspomnianego, drugiego bajtu:

1. Bit LSB drugiego bajtu = 0. Wartość drugiego bajtu może wynosić 00000110 (06h), co oznacza inicjalizację (reset) układu oraz zapis programowalnej części adresu sprzętowego urządzenia, lub 00000100 (04h), co oznacza jedynie zapis programo­walnej części adresu sprzętowego urządzenia bez inicjalizacji. Sekwencja programowania zależny od konkretnego urządzenia i jest podawana w jego materiałach katalogowych.

2. Bit LSB drugiego bajtu = l. Drugi bajt z LSB=1 stanowi ogólne sprzętowe wywoła­nie (hardware generał cali), co oznacza, że sekwencja jest wysyłana przez sprzętowe urządzenie master (hardware master). Układy takie (na przykład scalony sterownik klawiatury) posiadają bardzo prosty kontroler interfejsu, niezdolny do przesyłania adresów slave. Skoro więc sprzętowe urządzenie master nie zna przeznaczenia wysyłanych przez siebie danych, może tylko wygenerować ogólne sprzętowe wywołanie oraz swój własny adres umożliwiający jego identyfikację w systemie.

 

Siedem starszych bitów drugiego bajtu reprezentuje zatem adres sprzętowego urządzenia master. Adres ten rozpoznany zostaje przez inteligentne urządzenie podłączone do magis­trali, na przykład mikrokontroler, który przejmuje dane wysyłane przez sprzętowe urządzenie master i skierowuje je do wybranego urządzenia slave. Jeżeli sprzętowe urządzenie master może działać jako slave, to jego adres slave jest taki sam jak adres master (rys. 7).

 

 

 

...

Zgłoś jeśli naruszono regulamin