Potrzeba stosowania transmisji szeregowej występuje nie tylko przy dużych odległościach przesyłania danych ale również w przypadku systemów o niewielkim rozproszeniu. W szczególności może ona okazać się bardzo dobrym wyborem nawet wtedy, gdy należy połączyć układy ze sobą blisko sąsiadujące. Prowadzi to do znacznej redukcji ilości połączeń, co u praszcza obwody drukowane, złącza oraz zmniejsza powierzchnię modułów. Interfejs Inter IC BUS (hCBUS) [14] opracowany został w firmie Philips w celu synchronicznej komunikacji szeregowej pomiędzy urządzeniami tworzącymi pewien zestaw (na przykład aparatura audio-video), modułami w ramach urządzenia, jak również układami scalonymi na płytce wymaga on jednak stosunkowo złożonego sterowania, co sprawia, że trudno byłoby zrealizować obsługę interfejsu w ramach urządzenia z jednym mikroprocesorem. Mikroprocesor stale zajęty monitorowaniem łącza transmisyjnego, generacją sygnałów synchronizujących, wprowadzaniem lub wyprowadzaniem danych do/z linii magistrali, rozpoznawaniem adresów itp., miałby niewiele czasu na realizację programu użytkowego. Firma Philips opracowała w tym celu specjalne układy kontrolerów interfejsu szeregowego (SIO), w które wyposaża wiele układów scalonych. Dzięki temu możliwe jest łatwe wykorzystanie interfejsu I2CBUS:
w układach mikroprocesorowych,
w sterownikach opartych na mikrokontrolerach jednoukładowych,
w sterownikach wyświetlaczy LCD,
do sterowania pamięciami RAM, EPROM, układami I/O,
w cyfrowej syntezie częstotliwości i przetwarzaniu sygnałów stosowanych w telekomunikacji (na przykład telefony z akustycznym wyborem numeru), sprzęcie elektroakustycznym i video.
Podstawowe zalety interfejsu I2CBUS to:
Budowa układów zawierających interfejs IZCBUS jest zgodna z nowoczesnym stylem projektowania układów elektronicznych polegającym na bezpośrednim przejściu z diagramu blokowego na schemat ideowy.
Nie ma potrzeby projektowania układów sprzęgających, ponieważ znajdują się one już w układach odpowiedzialnych za transmisję.
Układy sterujące są bardzo uniwersalne, co pozwala na ich szerokie zastosowanie o Dodatkowe układy korzystające z magistrali mogą być dodawane lub wyłączane bez jakiejkolwiek ingerencji w pozostały układ połączeń na magistrali.
Transmisja magistrali IZC jest wysoce odporna na zakłócenia zewnętrzne.
Synchronizacja wymiany danych na magistrali I2CBUS
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.
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 zegar SCL. Wznowienie transmisji może nastąpić natychmiast po tym, jak o dbiornik zwolni liznę SCL, usuwając z niej stan niski.
Potwierdzenia danych
Na magistrali I2CBUS niezbędne są potwierdzenia przesyłanych danych, które wystawiane 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.
Arbitraż
W systemie hCBUS może dojść do sytuacji, że więcej niż jedno urządzenie zechce przejąć kontrolę nad łączem (być masterem). Zdefiniowano więc specjalną procedurę arbitrażową, która wyłania jednego mastera spośród urządzeń rywalizujących o sterowanie transmisją. Arbitraż oparto na zasadzie kontroli zgodności stanu linii SDA z wartością logiczną 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ądzenie 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ższą wartość binarną.
Dla poprawnego przeprowadzenia arbitrażu konieczna jest synchronizacja sygnałów zegarowych urządzeń, które walczą o sterowanie transmisją. Wszystkie urządzenia generują swoje własne sygnały zegarowe na linii SCL umożliwiając przesył danych oraz potwier-dzenia. Dane na linii S DA 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ą te j 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 magistralą, może generować tylko sygnały zegarowe do końca bajtu, przy którym utraciło kontrolę. Arbitraż nie jest dozwolony w trakcie powtarzanego w arunku START lub STOP.
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. Możliwe są trzy formaty transmisji. Urządzenie master jest nadawcą a slave odbiorcą danych. Drugi przypadek, w którym master zaraz po zaadresowaniu urządzenia slave przechodzi do odbioru danych. Trzeci format, będący kombinacją dwóch poprzednich, ma miejsce, gdy w czasie jednej transmisji następują zmiany kierunku przepływu danych. Przed każdą zmianą musi być ponownie generowany sygnał start , adres urządzenia slave oraz nowa wartość bitu kierunku.
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 s przę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 identyczną stałą 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. Są to adresy o wartości OOOOXXX[R/W] oraz 11110XX[R/W], gdzie X równa się 0 lub 1, a R/W oznacza bit kierunku. Dla pierwszej grupy zdefiniow ane są następujące zadania:
Adresacja ro,zgłoszeniowa
Wartość bajtu adresowego 0000 000 0.
Urządzenie reagujące na adres rozgłoszeniowy potwierdza jego odbiór i dalej zachowuje się jak odbiorca slave. Urządzenia “nie zainteresowane” rozgłaszam informacją 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ń.
Tablica 1. Znaczenie pierwszego bajtu
Adres slave | Bit RIW | Opis |
0000 000 | 0 | Adres rozgłoszeniowy |
0000 000 | 1 | Bajt startowy |
0000 001
0000 010 |
X X | Adres zarezerwowany dla urządzeń pracujących w standardzie CBUS Adres zarezerwowany dla innych formatów transmisji |
0000 011 0000 1XX 1111 1XX | X X X | Zarezerwowane dla przyszłych potrzeb |
1111 OXX | X | Adres dla dziesięciobitowego trybu adresowania (rozszerzony hCBUS) |
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:
Bit LSB drugiego bajtu = 0. Wartość drugiego bajtu może wynosić 00000110 (06h), co oznacza inicjalizację (reset) układu oraz zapis p rogramowalnej części adresu sprzętowego urządzenia, lub 00000100 (04h), co oznacza jedynie zapis programowalnej części adresu sprzętowego u rządzenia bez inicjalizacji. Sekwencja programowania zależny od konkretnego urządzenia i jest poda wana w jego materiałach katalogowych.
Bit LSB drugiego bajtu = 1. Drugi bajt z LSB=1 stanowi ogólne sprzętowe wywołanie (hardware general call), co oznacza, że se kwencja 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 prz esyłania adresów slave. Skoro więc sprzętowe urządzenie master n ie 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 mikr okontroler 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 s lave jest taki sam jak adres master. W niektórych systemach możliwa jest nieco inna praca sprzętowego urządzenia master. Bezpośrednio po inicjalizacji zostaje ono ustaw ione w tryb odbiornik slave. .Master konfigurujący system powiad amia następnie sprzętowe urządzenie master pod jaki adres wysyłan e przez niego dane mają trafić (dump address). Po wykonaniu wspomni anej procedury programującej, sprzętowe urządzenie master pozostaj e w trybie master nadawca.
Bajt startowy
Inteligentne urządzenia, takie jak mikrokontrolery jednoukładowe, mogą posiadać specjalizowany sterownik interfejsu hCBUS, który bez angażowania CPU monitoruje magistralę. Wychwytuje on wszystkie warunki, sprawdza adresy i komunikuje się z procesorem (zazwyczaj przez przerwania) na ogół wtedy, gdy chce zapisać lub odczytać bajt d o/z akumulatora. Jeżeli urządzenie mikroprocesorowe nie posiad a sterownika interfejsu, to samo musi monitorować magistralę i rozpoznawać wszystkie warunki. Próbkowanie magistrali należy pr zeprowadzać z dużą częstotliwością, przynajmniej dwa razy większą n iż często-tliwość zegara na linii SCL. zadanie to bardzo angażuje proc esor urządzenia, który nie ma czasu na realizację innych funk cji. Aby odciążyć CPU mikrokontrolerów nie posiadających sprzętowego s terownika interfejsu od próbkowania magistrali z dużą częstotliw ością, wprowadzono specjalną procedurę startową, znacznie dłuższą od normalnego warunku start. Procedura ta składa się z:
normalnego warunku start (S),
bajtu startowego 00000001,
impulsu potwierdzenia ACK,
powtórzonego warunku start (Sr).
Po wysłaniu warunku start przez urządzenie master żądające dostępu do magistrali, generowany jest bajt startowy. Inny mikrokontroler (nie wyp osażony w sterownik interfejsu) może próbkować linię SDA ze stosunkowo małą częstotliwością, taką jednak aby zdążył wykryć któreś z siedmiu zer bajtu startowego. Po detekcji niskiego poz iomu na linii SDA, mikrokontroler powinien zmienić szybkość próbkowan ia magistrali na wyższą, pozwalając na rozpoznanie powtórzonego warunku s tart (Sr), który jest już normalnym warunkiem synchronizacyjnym. Sterownik sprzętowy interfejsu 1^CBUS zostanie wyzerowany po odebraniu Sr, co oznacza zignorowanie bajtu startowego. Po bajcie startowym generowany jest impuls potwierdzenia, lecz nie przez urządzenie odbierające, a przez sam nadajnik. Chodzi tu o za chowanie zasady potwierdzania każdego bajtu. Bajt startowy nie może by ć potwierdzany przez żadne urządzenie odbierające.
Metody podłączania urządzeń do magistrali
Dopuszcza się przyłączenie do magistrali układów wykonanych w różnych technologiach. Każdy układ posiadający określone na stałe poziomy napię ć wejściowych (max 1.5 V dla stanu L i od 3 V do S V dla stanu H) może mieć swoje odrębne źródło zasilania. Wymaga się tylko podłączenia każdej z linii magistrali do 5 V ą10% przez odpowiednie rezystory podciągające RP. W przypadku układów o poziomach napięć wejściowych zależnych od VDD, powinno istnieć ,jedno źródło zasilania, do którego podłączone są inie magistrali przez odpowiednie rezystory podciągające. W sytuacji podłączenia do magistrali zarówno układów o określonych na stał poziomach wejściowych, jak i układów o poziomach zależnych od napięcia VDD, te ostatnie muszą być zasilane ze wspólnego źródła napięcia 5 V ą10% oraz posiadać podłączenie linii SDA i SCL do napi ęcia zasilającego przez rezystory RP. W celu zabezpieczenia wejść układów przed wysokonapięciowymi impulsami, które mogą pojawić się na magistrali, należy podłączać wejścia układów d o linii SDA i SCL rezystory szeregowe RS o typowej wartości około 300 SZ
.
Maksymalne i minimalne wartości rezystorów R p i RS
Wartości rezystorów RP, oraz Rs zależą od następujących parametrów:
napięcia zasilania,
pojemności linii magistrali,
ilości podłączonych urządzeń do magistrali.
Napięcie zasilania ogranicza minimalną wartość rezystorów RP, które należy tak dobrać, aby nie zostało przekroczone napięcie Von = 0.4 V przy obciążeniu prądem 3 mA (V – niski poziom napięcia na wyjściu).
Maksymalną wartość RP ograniczaj:
pojemność linii magistrali (złożona z pojemności przewodów, złącz oraz wejścia wyjścia układów) ze względu na wymaganie nie przekroczenia określonej wartości czasu narastania,
całkowity prąd wejściowy w stanie wysokim (dla jednego wejścia wyjścia max 10 pA), ze względu na zachowanie marginesu zakłóceń w stanie wysokim 0.2VDD.
Maksymalni wartość RS ogranicza wymaganie zachowania marginesu z akłóceń w stanie niskim O.1 VDD.
Parametry elektryczne i czasowe
Przewody SDA i SCL podłączone są do dodatniego punktu zasilania układu przez odpowiednie rezystory. Dla nie zajętej magistrali obie linie są w stanie wysokim. Urządzenia podłączane do magistrali powinny mieć układy wyjściowe z otwartym kolektorem lub otwartym drenem w celu realizacji funkcji iloczynu na drucie. Możliwe jest stosowanie układów wykonanych w różnych technologiach, tak więc nie stawia określonych wymagań na wartości napięć odpowiadających poziomom logicznym. Wartości te zależą od napięcia zasilania. Wartości napięć poziomów logicznych, wartości padów oraz inne parametry podano w tablicy 2.
Parametry czasowe sygnałów na liniach SDA i SCL
Wszystkie wartości w tablicy 3 podane są dla napięcia V.
Tablica 2. Parametry elektryczne
Parametry Symbol Jedn. Standardowy tryb pracy Szybki tryb pracy
Min. Max. Min. Max.
poziom wejściowy L:
– określony na stale
– określony w zależności od wartości nap. zasilania VDD VL V -0.5
-0.5 1.5
0.3VDD -0.5
-0.5 1.5
0.3VDD
poziom wejściowy H:
– określony na stałe
– określony w zależności od wartości nap. zasilania VDD VH V 3.0
0.7VDD (1) 3.0
0.7VDD (1)
histereza wejściowych bramek smitha:
– dla określonych na stałe wartości wejśdowych
– określona w zależności od wartości napięcia zasilania VDD Vhis V n/d n/d 0.2
0.05VDD –
–
czas trwania impulsów szpilkowych napięcia na magistrali, które muszą zostać stłumione TSP ns n/d n/d 0 50
poziom wejściowy wyjśaowy L (otwarty kolektor dren) dla prądu obciążenia:
3 mA
6 mA VOL1
VOL1 V
0
n/d 0.4
n/d 0
0 0.4
0.6
Czas opadania sygnalu wyjściowego wartości VIHmin do VIHmax przy pojemności na magistrali od 10pF do 2OpF, dla obciężenia:
3 mA przy VOL1
6 mA przy VOL2 tOF
ns
–
n/d 250
n/d
pobór prędu przez wejścia sterownika dla napięć od 0.4V do VDDmax Iix uA -10 10 -10 10
pojemność wejść sterownika dla każdej z linii C pF – 10 – 10
(1) VIH=VDD+0,5V
Cb pojemność jednej linii magistrali w pF.
Wejścia magistrali w trybie szybkim nie powinny być obciążane przy włączonym napięciu zasilania.
Tablica 3. Parametry czasowe sygnałów na magistrali I2CBUS
Parametry Symbol Jed. Standardowy tryb pracy Szybki tryb pracy
Min. Max. Min. Max.
Częstotliwość na magistrali SCL FSCL kHZ 0 100 0 400
Czas trwania transmisji ograniczony warunkami START i STOP tBUF uA 4,7 – 1.3 –
Czas podtrzymania linii SCL przed rozpoczęciem transmisji (liczony od warunku START) tHD,STA us 4.0 – 0.6 –
Czas stanu L dla impulsu zegara na lini SCL tLOW us 4,7 – 1.3 –
Czas stanu H dla impulsu zegara na lini SCL tHIGH us 4.0 – 0.6 –
Czas ustalenia przed powtórzeniem sygnału START tSU,STA us 4.0 _ 0.6 –
Czas utrzymania danych tHD,STA ns 0 – 0 0.9
Czas wyprzedzenia danych od sygnału zegara tSU,DAT ns 250 – 1 –
Czas narastajęcego zbocza sygnałów na liniach SDA i SCL tR ns – 1000 20+0.1 Cb 300
Czas opadającego zbocza sygnałów na liniach SDA i SCL tF ns – 300 20+0.1 Cb 300
Czas ustalenia przed wystaniem sygnału STOP kończęcego transmisję tSU,STO ns 4.0 – 0.6 –
Pojemność dla każdej linii magistrali Cb pF – 400 – 400
Urządzenie powinno wewnętrznie utrzymać dane przynajmniej przez 300 ns na linii SDA w celu uchwycenia opadającego zbocza sygnale zegara na linii SCL.
Wartość maksymalna jest istotna w przypadku gdy urządzenie nie wydłuża czasu i
Sterownik interfejsu I2CBUS
Budowa sterownika
Sterownik interfejsu I2CBUS przedstawiony zostanie na przykładzie kontrolera interfejsu szeregowego (SIO) w mikrokomputerach rodziny PCF84CXX [15]. Układ SIO pozwala na współpracę wielu urządzeń realizowaną poprzez wspólni magistralę szeregową złożoną z dwóch linii, przy czym komunikacja dwóch dowolnych rządzeń odbywa się bez zakłócania pracy pozostałych. Osiągnięto to przez przypisanie rządzeniom systemu indywidualnych adresów selekcyjnych, tak że urządzenie reaguje tylko komunikaty posiadające na początku jego adres lub też adres rozgłoszeniowy. Przy udawaniu sterownik samodzielnie dokonuje konwersji danych z postaci równoległej na szeregową, a przy odbiorze z szeregowej na równoległą, zapewnia konieczny sygnał synchronizujący, udostępnia mechanizm dla operacji w trybie master-slave, generuje stwierdzenia przy wyborze takiego trybu pracy, wreszcie, gdy system działa z wieloma masterami, rozstrzyga konflikty przy próbie sterowania magistrali przez kilka u rządzeń.
Komunikacja pomiędzy procesorem mikrokomputera a sterownikiem interfejsu odbywa ę poprzez wewnętrzną magistralę mikrokomputera oraz przerwanie SIR (Serial Interrupt equest), które pojawia się po skompletowaniu bajta (do nadania lub po odbiorze) zesłanie bajta do/z SIO wykonuje tylko jedna instrukcja. Do przechowywania danych oraz formacji sterujących działaniem interfejsu wykorzystuje się cztery rejestry:
rejestr przesuwający dane (SO),
rejestr statusu (S 1),
rejestr sterujący sygnałem clock (S2),
rejestr adresowy.
Rejestr przesuwający SO
Rejestr SO realizuje zamianę informacji z postaci równoległej na szeregową (przy nadawaniu) i szeregowej na równoległą (przy odbiorze). Pr zeznaczone do wysłania dane zostają przez procesor załadowane do S0, po c zym następuje ich szeregowe przesuwanie. Jako pierwszy wyprowadzany j est najbardziej znaczący bit. Dane odbierane z interfejsu są szeregowo wprowadzane do rejestru SO (jako pierwszy wprowadzany jest najbardzie j znaczący bit). Po nadaniu lub po odbiorze pełnego bajta (może to by bajt danych, adres selekcyjny lub adres rozgłoszeniowy) generowane je st przerwanie.
Rejestr statusu Sl
Rejestr statusu dostarcza procesorowi informacje o stanie interfejsu i przechowuje informacje sterujące interfejsem określane przez procesor. Bity kontrolne na h pozycjach mogą być tylko zapisywane przez procesor, podczas gdy bity stanu interfejsu procesor może tylko odczytać.
T i TRX – MST decyduje o sposobie sterowania pracą interfejsu. Rozróżnia się dwa rodzaje pracy sterownika interfejsu:
praca jako urządzenie nadrzędne (master, MST=1),
praca jako urządzenie podrzędne (slave, MST=0).
TRX określa kierunek transmisji danych: TRX=1, nadawanie, TRX=0, odbiór.
Na tablicy 4 przedstawiono cztery tryby pracy sterownika interfejsu. Odbiornik slave jest trybem, który odbiera sygnały d ata oraz clock wysyłane przez nadajnik master. Nadajnik jest układem, który został wyznaczony do nadawania przez nadajnik master. Nadajnik transmituje dane z taktem sygnału zegarowego dostarczanego przez odbiornik master bezpośrednio po zaadresowaniu urządzenia do nadawania, nadajnik master przechodzi do pracy odbiornik master w celu odebrania danych wysyłanych przez nadajnik slave nadajnik master jest jedynym trybem operacji, w którym można zainicjować transmisję przez spełnienie warunku startu nadawania.
Tablica 4. Tryby pracy sterownika interfejsu I2CBUS
MST | TRX | Tryb |
0 | 0 | odbiornik slave |
1 | 0 | odbiornik master |
0 | 1 | nadajnik slave |
1 | 1 | nadajnik master |
Zajętość magistrat (BB – Bus Busy) – znacznik BB sygnalizuje zajętość magistrali i jest ustawiany po każdym wykryciu warunku start. Skasowanie znacznika BB następuje po detekcji warunku stop. Przy pracy w trybie nadajnik master, znacznik BB wykorzystywany jest do generacji warunków start i stop. Jeżeli urządzenie próbowałoby wygenerować warunek start przy ustawionym znaczniku BB (co oznacza zajętość magistrat), ustawiony zostanie znacznik AL (wypadnięcie z arbitrażu) oraz pojawi się przerwanie. Warunek start nie zostanie wygenerowany.
Brak przerwania (PIN – Pending Interrupt Not) – PIN=0 oznacza becność przerwania, które spowoduje wygenerowanie sygnału SIR (żądanie obsługi interfejsu szeregowego) pod warunkiem, że odblokowane jest przerwanie od interfejsu szeregowego. P1N jest kasowane (tzn. usta wiane na 1) po każdym odczycie z lub zapisie do rejestru S0. Prz erwanie PIN jest generowane po wysłaniu całego bajtu, po wypadnięciu z procedury arbitrażowej, po odebraniu całego bajtu danych lub po w ykryciu ważnego adresu.
Uaktywnienie wyjścia szeregowego (ESO – Enable Serial Output) – bit ESO otwiera lub blokuje szeregowe wyjście sterownika interfejsu:
ESO = 1 – wyjście szeregowe odblokowane, wyprowadzenie 2 mikrokomputera pełni funkcję linii danych.
ESO = 0 – wyjście szeregowe zablokowane, wyprowadzenie 2 mikrokomputera pełni funkcję bitu P2.3 portu P2 (możliwe jest w tej sytuacji załadowanie rejestru adresowego poprzez zapis bajtu do SO).
SO jest ustawiane i kasowane programowo oraz nie może być odczytywane.
BCO, BC1 i BC2 – bity BCO, BC1 i BC2 tworzą licznik bitów w bajcie znaku nadawanego lub odbieranego. Licznik ten jest ustawiany przez p rocesor, który jednak nie może go odczytać. Zawartość licznika określa ilość bitów przypadających na jeden znak, z jednym wyjątkiem, że wart ść zero oznacza znak o długości ośmiu bitów. Aby wyeliminować możliwo ć inkrementacji licznika impulsami zakłócającymi w czasie gdy magistral a jest wolna, wprowadzono zerowanie licznika po każdym starcie nadawania . Powoduje to, że każdy pierwszy znak danych posiada długość ośmiu bit ów.
Wypadnięcie z arbitrażu (AL – Arbitration Lost) – znacznik AL jest ustawiany (sprzętowo), kiedy SIO pracując jako nadajnik master, wypadnie z procedury arbitrażowej. Interfejs automatycznie przechodzi w takiej sytuacji do pracy jako odbiornik, aby sprawdzić, czy nie zo tanie zaadresowany przez urządzenie, które wygrało arbitraż. Bezpośred nio po pobraniu bajtu, po którym nastąpiło wypadnięcie z procedury arbitrażow j, generowane jest przerwanie. Po odczytaniu słowa statusu i stwierdzeni u, że AL=1, procesor uzyskuje informację, że żądana transmisja nie odby ła się. Znacznik AL zostaje wyzerowany po zastosowaniu przerwania tPIN =1).
Adres rozgłoszeniowy (ADO – Address Zero) – znacznik ADO jest u stawiany (sprzętowo) wykryciu adresu rozgłoszeniowego w sytuacji, gdy interfejs pracuje w trybie rozpoznania adresu. Adres rozgłosz eniowy reprezentowany jest przez bajt złożony z samych zer.Adres zostaje skasowany po zwolnieniu magistrali, co następuje po wystąpieniu warunku ostatni odebrany bit (LRB – Last Received Bit) – bit LRB w r ejestrze S 1 zawiera ostatni pobrany bit, lub w przypadku urządzenia nadającego pracującego w trybie transmisji utwierdzeniem, stan sygnału potwierdzającego przesłanego przez odbiornik.
Rejestr sterujący sygnałem clock S2
Sygnał taktu transmisji powstaje po przez podział częstotliwości sygnału pomiarowego mikrokomputera, który wynosi jedną trzecią częstotliwości drgań oscylatora kwarcowego.
_
Tablica 5. Wartości współczynnika m
Rejestr S2 | m | |
bit 1 | bit 0 | |
0 | 0 | 5 |
0 | 1 | 6 |
1 | 0 | 7 |
1 | 1 | 8 |
Tablica 6. Wartości wspótcrynnika n
Rejestr S2 | n | ||
bit 4 | bit 3 | bit 2 | |
0 | 0 | 0 | 2 |
0 | 0 | 1 | 4 |
0 | 1 | 0 | 8 |
0 | 1 | 1 | 16 |
1 | 0 | 0 | 32 |
1 | 0 | 1 | 64 |
1 | 1 | 0 | 128 |
1 | 1 | 1 | 256 |
Potwierdzenie (ACK – Acknowledge) – przy pracy w trybie “z potwierdzeniem” zarówno nadajnik jak i odbiornik muszą mieć ustawiony bit ACK (ACK=1). Urządzenie master będzie w takim p rzypadku generować dodatkowy impuls zegarowy po skompletowaniu pełnego bajtu. Podczas tego impulsu, urządzenie nadające utrzymuje wysoki stan linii SDA umożliwiając urządzeniu odbierającemu wysłanie potwierdzenia odbioru. Potwierdzenie realizowane jest poprzez wymuszenie stanu niskiego na linii SDA. Urządzenie nadające zapamiętuje sygnał potwierdzenia na bicie LRB rejestru S1.
Rejestr adresowy
Adres urządzenia przechowywany jest w rejestrze adresowym na siedmiu starszych bitach, podczas gdy bit 0 (nazwany ALS – Always Selected) pełni rolę wskaźnika zaadresowania.
ALS=1 oznacza, że układ interfejsu będzie odpowiadał na wszystkie komunikaty, bez względu na adres.
ALS=0 sprawia, że SIO będzie odpowiadał tylko na komunikaty zawierające jego własny adres lub też adres rozgłoszeniowy. W tym trybie pracy (tryb z rozpoznawaniem adresu) najmniej znaczący bit pierwszego bajtu spełnia funkcję polecenia odczytu lub zapisu (zapis, gdy wartość bitu wynosi 0). Jeżeli sterownik wykryje swój własny adres lub adres rozgłoszeniowy, automatycznie ustawia bit TRX słowa statusu na wartość odebranego bitu polecenia odczyt zapis. Adres rozgłoszeniowy (złożony z ośmiu zer) jest więc w zasadzie adresem zawierającym siedem zer i bitem polecenia ustawionym na 0. Rejestr adresowy jest ładowany przez procesor poprzez wewnętrzni magistralę, co może nastąpić tylko w stanie zablokowania sterownika interfejsu (ESO=0). W tym przypadku instrukcja MOV SO,A prześle zawartość akumulatora do rejestru adresowego zamiast do rejestru S0, co ma miejsce w sytuacji, gdy ESO=1.
Układ przerwania
Odblokowanie układu zgłaszania przerwania od interfejsu szeregowego realizuje instrukcja EN SI, zablokowanie DIS SI. Przy aktywnym układzie zgłaszania przerwania do procesora wprowadzany jest sygnał SIO INT reprezentujący jedną z pięciu przyczyn przerwania od interfejsu szeregowego. Przerwanie to powoduje wykonanie rozkazu znajdującego się w komórce o adresie 5 pamięci programu, którym zazwyczaj jest rozkaz skoku do procedury obsługi przerwania pochodzącego od sterownika interfejsu. Przy zablokowanym układzie przerwania obsługa SIO p rzez procesor jest stale możliwa poprzez odczyt rejestru statusu SO i testowanie znacznika PIN.
Źródła przerwania
Przyczynami przerwania od interfejsu szeregowego są:
nadanie pełnego bajtu (danej lub adresu),
odebranie adresu rozgłoszeniowego,
odebranie adresu własnego,
odebranie ośmiu bitów przy ALS=1,
wypadnięcie z procedury arbitrażowej i odebranie pełnego znaku.
Kolejne zgłoszenia przerwania będą generowane po każdym skompletowaniu bajtu. Po wygenerowaniu przerwania, linia SCL jest utrzymywana w stanie L do chwili skalo-wania przerwania (ustawienie P1N=1). Oznacza to, że w systemie złożonym z wielu urodzeń zwolnienie linii SCL nast ąpi dopiero po skasowaniu przerwania we wszystkich urządzeniach, czyli że o szybkości transmisji decyduje urządzenie najwolniej o bsługujące przerwanie. Transmisja następnego bajtu może nastąpi ć tylko po zwolnieniu linii SCL.
Działanie sterownika interfejsu SIO
W interfejsie I2CBUS wygenerowanie warunku start przez jedno urządzenie powoduje ustawienie znaczników BB we wszystkich pozostały ch urządzeniach, co sprawia, że żadne z nich nie może rozpocząć nad awania do chwili zakończenia transmisji przez pierwsze urządzenie. Może się jednak zdarzyć, że kilka urządzeń będzie chciało jednocześni e rozpocząć nadawanie, tak że żadne nie będzie potrafiło rozpoznać w arunku startu wygenero-wanego przez pozostałe. W celu rozstrzygnięcia konfliktu powstającego w takiej sytuacji zaprojektowano procedurę arbitrażowa która zabezpiecza przed jednoczesnym nadawaniem wielu urządzeń (kolizji) i przydziela sterowanie magistrali tylko jedn emu urządzeniu.
Procedura arbitrażowa
Zastosowanie sterowania “z otwartym drenem” sprawia, że układy nadawcze spełniaj funkcję logicznego iloczynu (iloczyn “na drucie”). Procedura arbitrażowa wykorzystuje dane wprowadzane na magistralę przez urodzenia współzawodniczce ze sobą o sterowanie łączem. Kiedy nadajnik stwierdzi, że mimo wysokiego poziomu sygnału jaki starał się wprowadzić na linię jest na niej poziom niski, przełącza urządzenie do trybu odbiornik slave, ustawia znacznik .AL i generuje przerwanie po zakończeniu bajtu. Procedura arbitrażowa daje priorytet urządzeniu, które transmituje dane szeregowe o najniższej wartości binarnej. J eżeli dwa lub więcej urządzeń prześle identyczny pierwszy bajt, arbitraż jest kontynuowany na kolejnych bajtach. Gdyby strumienie danych wysyłane przez nadajniki były identyczne, rozstrzygnięcie arbitrażowe nie jest potrzebne.
Synchronizacja sygnałów zegarowych
W normalnych warunkach tylko jedno urządzenie master będzie generować sygnał zegarowy. Podczas procedury arbitrażowej są jednak dwa lub więcej źródła sygnału clock, co zmusza do ich synchronizacji w celu stworzenia możliwości porównywania danych. Połączenie wyjść zegarowych realizujące “iloczyn na drucie” sprawia, że urządzenie, które generuje niski poziom sygnału clock wymusza ten stan na linii. Opadające zbocze na linii SCL powoduje, że generatory pozostałych urządzeń rozpoczynaj generację swoich sygnałów zegarowych od niskiego poziomu. Tak więc nadal utrzymuje się na linii SCL poziom L, o którego czasie trwania decyduje urządzenie generujące takt o najdłużej trwającym poziomie niskim. Urządzenia, które chciałyby zmienić stan linii clock na H muszą czekać z rozpoczęciem generacji wysokiego poziomu aż do zaniknięcia stanu L, W ten sposób uzyskuje się synchronizowany sygnał zegarowy, w którym najwolniejsze urządzenie decyduje o czasie trwania stanu L sygnału clock, a najszybsze o czasie trwania stanu H.
Tryby pracy SIO
Interfejs szeregowy mikrokomputerów PCF84CXX ma trzy tryby pracy:
transfer danych bez rozpoznawania adresów,
transfer z rozpoznawaniem adresów,
transfer z asymetrycznym zegarem.
Ponadto w każdym z tych trybów można stosować potwierdzenie, co daje razem sześć różnych opcji transmisji. Po odebraniu lub nadaniu pełnego bajtu, generowane jest przerwanie do mikrokomputera. Do chwili skasowania znacznika PIN (co przypomnijmy realizowane jest przez odczyt lub zapis rejestru SO dokonywany w proc edurze obsługi przerwania) odbiornik slave utrzymuje niski poziom na linii SCL dla wstrzymania nadawania kolejnych bajtów ze względu na br ak gotowości do ich przyjęcia. Koniecznymi operacjami w procedurze obsługi przerwania od odebranego bajtu są ustawienie licznika b itów w rejestrze S 1 oraz odczyt S0. Nadawaną sekwencję bajtów kończy warunek stop generowany przez urządzenie master natychmiast po zakończeniu ostatniego bajtu. Transmisja z rozpoznawaniem adresu – w tym trybie urządzenie ma ter może wysłać jako pierwszy bajt siedmiobitowy adres urządzenia slave oraz bit polecenia zapisu lub odczytu, względnie adres rozgłoszeniowy zawierający osiem zer. Znaczniki ALS wszystkich urządzeń powinny być ustawione na zero. Po wysłaniu adresu urządzenia slave, tylko urządzenie które rozpoznało adres własny będzie odpowiadać. Bit TRX rejestru S 1 zostanie ustawiony zgodnie z wartością bitu polecenia zapisu/odczytu , tak że urządzenie zostaje odbiornikiem slave lub nadajnikiem slave. Linia SCL jest utrzymywana na niskim poziomie aż do obsłużenia przer wania zarówno w urządzeniu master jak i slave, po czym następuje transmisja bitów danych. Przy operacji zapisu (transmisja z urządz enia master do slave) bity są wprowadzane z linii SDA do rejestru przesuwającego slave, przy operacji odczytu (transmisja z urządzen ia slave do master) bity są wyprowadzane z rejestru przesuwającego slave i wprowadzane do linii SDA, co odbywa się pod kontroli sygnału clock z mastera. Jeżeli master zaadresował urządzenie slave rozka zem zlecającym transmisję z slave do master (´TRX=1 w slave), to sam ustawia swój bit TRX=0 przechodząc do odbioru danych w tryb ie odbiornik master. Po wysłaniu bajtu adresowego (zawsze pierws zy bajt) można wysłać dowolną ilość bajtów danych w sposób identy czny jak w trybie bez rozpoznawania adresu. Po wysłaniu adresu rozgłoszeniowego, wszystkie urządzenia przechodzi d o trybu odbiornik slave i oczekują na bajt danych z nadajnika master. Transmisja z niesymetrycznym sygnałem zegarowym – współczynnik wypełni enia 3:1 (H:L) niesymetrycznego sygnału zegarowego pozostawia urządze niu więcej czasu na próbkowanie linii SDA, co sprawia, że w sensie cz asowym operacja ta jest mniej krytyczna. Poza tym praca z niesymetryc znym zegarem jest taka sama jak transmisja bez rozpoznawania adresu.
Rozkazy mikrokomputera obsługujące SIO
Mikrokomputery rodziny PCF84CXX wykorzystują zestaw instrukcji mikroprocesora 8048 za wyjątkiem kilku, rzadko zazwyczaj stosowanych rozkazów. Dla obsługi sterownika interfejsu szeregowego wprowadzono natomiast pięć nowych rozkazów, których opis przedstawia tablica 7.
Tablica 7. Instrukcje obsługujące SIO
Mnemonik | Kod operacji | Bajty/cykle | Opis operacji | Funkcja |
MOV A,S | OCh ODh |
1/2 | Prześlij zawartość rejestru n SIO do A | (A) <- (SO) (A) <- (Si) |
MOV S,A | 3Ch 3Dh 3Eh |
1/2 | Prześlij zawartość A do rejestru n SIO | (SO) <- (A) (S1) <- (A) (S2) <- (A) |
MOV S,#data | 9Ch 9Dh 9Eh |
2/2 | Prześlij natychmiast dane do rejestru n SIO | (SO) <- (dane) (S1) <- (dane) (S2) <- (dane) |
EN SI | 85h | 1/1 | Odblokuj przerwania w SIO | |
DIS SI | 95h | 111 | Zablokuj przerwania w SIO |