Interfejs magistrali I2C dla komputera Amiga (1996r.)

Dająca się zauważyć w ostatnich latach tendencja do zwiększania skali integracji obwodów elektronicznych spowodowała konieczność zwiększania liczby połączeń między modułami i podzespołami. Pociągnęło to za sobą wzrost ryzyka wadliwego funkcjonowania sprzętu elektronicznego oraz utrudnienia przy jego konserwacji czy naprawie.

Magistrala I2C (Inter-IC Communication) powstała jako alternatywa - umożliwia komunikowanie się układów za pomocą tylko dwóch linii. Ten rodzaj (szeregowej) transmisji zapewnia relatywnie wolną wymianę danych nie umożliwiającą, powiedzmy, budowania rozszerzeń pamięci RAM komputerów ale całkowicie wystarczającą do np. konstruowania portów wejścia/wyjścia (I/O) czy zegarów czasu rzeczywistego (RTC).

Opisywany interfejs magistrali I2C wraz z oprogramowaniem ułatwi komputerom Amiga komunikowanie się z układami zgodnymi z I2C w zewnętrznych projektach.

Standard I2C

Magistrala I2C jest oparta na trzech sygnałach:

  • SDA (dane - System DAta)
  • SCL (zegar- System CLock)
  • masa sygnałowa


W każdej konfiguracji musi istnieć przynajmniej jeden nadzorca (układ inicjujący transmisję danych oraz generujący główny takt zegarowy) oraz jeden lub więcej odbiorników.

Magistrala I2C

Nadzorcą może być np. mikroprocesor 8048, 8051 czy 68000 dostępne w specjalnych wersjach z wbudowanymi interfejsami magistrali I2C. Dwa porty I/O mikroprocesora są wykorzystywane jako linie SDA i SCL. Razem z masą tworzą magistralę zapewniającą łączność między urządzeniami z wydajnością rzędu 100kbit na sekundę (około 12kB/sek). Linie SDA i SCL są typu otwarty dren lub otwarty kolektor i muszą być podłączone przez tzw. rezystory podciągające do dodatniego bieguna zasilania by utworzyć strukturę magistrali umożliwiającą podłączanie wielu nadajników i odbiorników równolegle.

Magistrala I2C

Do magistrali może być podłączona praktycznie nieskończona liczba układów z czego jedynie 127 może być bezpośrednio adresowne.

Definicje terminów/zwrotów używanych w kontekście magistrali I2C

  • master (nadzorca) - układ decydujący o kierunku transmisji oraz generujący (jako jedyny) sygnał zegarowy na linii SCL. Gdy do magistrali podłączonych jest wiele nadzorców to taki system nazywa się multimaster (tym przypadkiem się nie zajmiemy ponieważ jest on trochę skomplikowany a w naszym przypadku - po prostu zbędny).
  • slave (odbiornik) - układ nie uprawniony do generacji pulsu zegarowego; odbiornik odbiera rozkazy oraz sygnały zegarowe od nadzorcy.
  • magistrala wolna - magistrala jest wolna gdy linie SDA i SCL mają stany logiczne wysokie. Nadzorca ma dostęp do magistrali tylko gdy jest ona wolna.
  • warunek startu transmisji - nadzorca zajmuje magistralę generując warunek startu czyli ustawiając linię SDA w stan niski przy linii SCL w stanie wysokim.
  • warunek zatrzymania transmisji - nadzorca zwalnia magistralę generując warunek zatrzymania czyli ustawiając linię SDA w stan wysoki kiedy SCL jest w stanie wysokim.
  • dane ważne - dane na linii SDA nie mogą się zmieniać gdy linia SCL ma stan wysoki; takie zmiany oznaczają warunki startu lub zatrzymania transmisji.

Magistrala I2C

  • format danych - każda paczka informacji przesyłanych przez magistralę I2C składa się z ośmiu bitów (1 bajt); po każdym bajcie danych następuje impuls zegarowy (dziewiąty) podczas którego układ (nadzorca lub odbiornik) generuje impuls potwierdzenia (ACK); jest to realizowane przez ustawienie linii SDA w stan niski (podczas dodatkowego impulsu zegarowego)
  • adresowanie - każdy układ, który jest przystosowany do współpracy z magistralą I2C posiada własny, unikalny adres zdefiniowany przez producenta; pomimo, że adres jest "wbudowany" w układ istnieje możliwość jego modyfikacji (dzięki temu jest możliwe podłączenie kilku takich samych układów do magistrali); adres "0" to "ogólne wywołanie", na który odpowiadają wszystkie układy podłączone do magistrali; ponieważ adres jest 7-bitowy, można zaadresować do 127 urządzeń (można podłączać wiele urządzeń o tym samym adresie).
  • bit R/W - każdy układ posiada 7-bitowy adres; ósmy bit, który jest wysyłany podczas adresowania to bit R/W (read/write, odczyt/zapis); jeśli bit jest ustawiony to nadzorca odczytuje dane wysyłane przez odbiornik; jeśli bit jest wyczyszczony to odbiornik odczytuje dane wysyłane przez nadzorcę

Protokół wymiany danych

W przypadku gdy magistrala jest wolna, nadzorca może zająć ją generując warunek startu.

Protokół wymiany danych I2C

Pierwszy bajt transmitowany po warunku startu musi zawierać 7-bitowy adres oraz 1-bitowy kierunek transmisji (odczyt/zapis). Jeżeli adresowany układ został odnaleziony (jest podłączony do magistrali) odpowiada impulsem ACK, po którym wymiana danych może już przebiegać swobodnie. Jeżeli bit R/W = 0 (bit R/W jest wyczyszczony) wtedy nadzorca wysyła dane do odbiornika dopóki generuje on impulsy ACK lub dopóki wszystkie dane nie zostaną przesłane. Jeżeli R/W = 1 (bit R/W jest ustawiony) to nadzorca generuje impulsy zegarowe podczas których odbiornik może wysyłać dane do zarządcy. Po każdym odebranym bajcie, nadzorca (który na dobrą sprawę jest wtedy odbiornikiem) generuje impulsy ACK. Trwa to dotąd aż nadzorca przestanie wysyłać impulsy ACK.

Nadzorca może zwolnić magistralę generując warunek zatrzymania. Jeśli zachodzi potrzeba dalszej transmisji danych to nadzorca może ponownie wygenerować warunek startu zaraz po warunku zatrzymania. Takie nowe zainicjowane połączenia nazywa się powtarzanym warunkiem startu i może być użyte do zaadresowania innego układu lub zmiany kierunku transmisji.

Układ elektroniczny

Interfejs magistrali I2C można bardzo łatwo wykonać dla każdego komputera mającego przynajmniej jeden port użytkownika. Nie znaczy to oczywiście, że może go każdy wykonać. Główną przeszkodą jest oczywiście umiejętność posługiwania się lutownicą i jako takie pojęcie o elektronice.

Poniżej znajduje się interfejs wykorzystujący złącze równoległe komputera Amiga.

Interfejs I2C

UWAGA! :!: Korzystanie z opcji drukowania (ogólnie: korzystanie ze złącza równoległego) w momencie gdy podłączony jest interfejs może doprowadzić do uszkodzenia komputera.

Obsługą magistrali zajmuje się zewnętrzna biblioteka i2c.library w której zawarte są procedury odczytu i zapisu danych. Opis procedur a także i w/w biblioteka znajduje się w archiwum I2Clib38.lha (amintet, katalog hard/hack).

Zastosowania

O tym jak popularna stała się magistrala I2C w ciągu ostatnich lat może świadczyć fakt, że znajduje się ona, między innymi, w każdym telewizorze wyposażonym w teletekst (układ scalony odpowiedzialny za dekodowanie sygnału telegazety pracuje w oparciu o magistralę I2C). Zatem w zasadzie nic nie stoi na przeszkodzie by "dobrać się" do telewizora, wyselekcjonować sygnały i zdekodować je by otrzymać telegazetę na ekranie komputera…

Philips oraz inni producenci podzespołów elektronicznych produkują wiele układów kompatybilnych z I2C np. pamięci RAM, EEPROM, mikrokontrolery, porty I/O, nadajniki podczerwieni, przetworniki ADC/DAC itp. Jest więc w czym wybierać a układy te nie są specjalnie drogie ponieważ znajdują się od lat w masowej produkcji.

Literatura

Artykuł powstał na postawie 'I2C interface for PCs' J. Ruffel (Elektor Electronics FEB '92) oraz materiałów autorstwa Bran Ipsena z archiwum I2Clib38.lha

autorzy/narg/amiga/i2c.txt · ostatnio zmienione: 2012/02/12 15:54 przez Piotr Gapiński
 
 
©2005-2010 by Pijoter · powered by DokuWiki · hosting by Yupo.pl