Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny20

Interfejs TWI

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Cechy interfejsu TWI


Na początek:  podrozdziału   strony 

Przegląd interfejsu TWI

obrazek

Interfejs dwuprzewodowy (ang. Two Wire Interface, TWI) jest dwukierunkowym interfejsem komunikacyjnym, który używa tylko dwóch przewodów. TWI jest kompatybilny z I2C z pewnymi ograniczeniami oraz z magistralą SMBus. Mikrokontroler podłączony do tej magistrali musi pełnić rolę nadrzędną master lub podrzędną slave. Układ master  inicjuje transakcję danych przez zaadresowanie układu slave na magistrali oraz określenie, czy chce nadawać lub odbierać dane. Jedna magistrala może posiadać kilka układów master, a proces arbitrażowy obsługuje pierwszeństwo, jeśli dwa lub więcej układy master próbują przesyłać dane w tym samym czasie. Moduł TWI w ATtiny20 implementuje tylko funkcje układu slave. Utrata arbitrażu, błędy, kolizje i wstrzymanie zegara na magistrali są wykrywane sprzętowo i sygnalizowane w osobnych znacznikach stanu. Sprzętowo zaimplementowano rozpoznawanie 7-bitowych oraz ogólnych wywołań adresowych. Obsługiwane jest również adresowanie 10-bitowe. Specjalny rejestr maski adresowej może pełnić rolę drugiego rejestru zgodności adresu lub rejestru maski dla adresu układu slave przy zgodności z zakresem adresów. Sieć logiczna układu slave kontynuuje pracę we wszystkich trybach uśpienia, łacznie z trybem wyłączenia zasilania. Pozwala to wybudzić układ slave ze stanu uśpienia przy zgodności adresu TWI. Możliwe jest wyłączenie porównywania adresów i wykonywanie tej operacji programowo. Pozwala to układowi slave wykrywać i odpowiadać na kilka adresów. Można włączyć tryb inteligentny (ang. Smart Mode) do automatycznego wyzwalania operacji i zredukować przez to złożoność programu. Moduł TWI zawiera logikę stanu magistrali, która zbiera informację w celu wykrywania stanów START/STOP, kolizji na magistrali oraz błędów. Logika stanu magistrali kontynuuje pracę we wszystkich trybach uśpienia, łącznie z trybem wyłączenia zasilania.


Na początek:  podrozdziału   strony 

Ogólne założenia magistrali TWI

Interfejs dwuprzewodowy (TWI) udostępnia dwukierunkową magistralę złożoną z linii zegara szeregowego (ang. Serial Clock Line, SCL) oraz linii danych szeregowych (ang. Serial DAta line, SDA). Obie te linie są liniami typu otwarty kolektor (z iloczynem montażowym, ang. wired-AND) i oporniki podciągające (ang. pull-up resistors, Rp) są jedynymi zewnętrznymi elementami potrzebnymi do wysterowania tej magistrali. Oporniki podciągające wymuszą stan wysoki na liniach, gdy żadne z podłączonych urządzeń nie steruje magistralą. Źródło prądowe może zostać użyte w zastępstwie oporników podciągających. Magistrala TWI jest prostą i efektywną metodą połączenia ze sobą wielu urządzeń na magistrali szeregowej. Urządzenie połączone z tą magistralą może być układem master lub slave, gdzie master steruje magistralą i całą wymianą danych.

Topologia magistrali TWI
obrazek

Unikalne adresy są przydzielane wszystkim układom slave połączonym z magistralą, a master będzie wykorzystywał je do adresowania układów slave i rozpoczynania transakcji danych. Można używać adresowania 7- lub 10-bitowego.

Kilka układów master może być podłączonych do tej samej magistrali. Udostępniony jest mechanizm arbitrażowy do rozstrzygania posiadania magistrali pomiędzy układami master, ponieważ tylko jeden z nich może w danej chwili posiadać magistralę.

Urządzenie TPI może jednocześnie zawierać logikę master i slave oraz może emulować wiele urządzeń slave przez reagowanie na więcej niż jeden adres.

Układ master zaznacza początek transakcji przez wytworzenie stanu START (S) na magistrali. W następnej kolejności zostaje wysłany pakiet adresowy z adresem układu slave (ADDRESS) oraz znacznikiem, czy master życzy sobie odczytu lub zapisu danych (R/W). Po przesłaniu wszystkich pakietów danych (DATA) master wytwarza stan STOP (P) na magistrali, aby zakończyć transakcję. Odbiorca musi potwierdzić (A) lub nie potwierdzić (A) odbiór każdego bajtu.

Schemat topologii podstawowej transakcji TWI
obrazek

Master dostarcza sygnał zegarowy dla transakcji, lecz urządzenie podłączone do magistrali może rozciągnąć w czasie niski poziom okresu zegarowego w celu zmniejszenia szybkości transmisji.

Stany START i STOP

Dwa unikalne stany magistrali są używane do oznaczania początku (START) i końca (STOP) transakcji. Master tworzy stan START (S) przez przejście ze stanu wysokiego w niski na linii SDA, gdy linia SCL jest utrzymywana w stanie wysokim. Master kończy transakcję przez wytworzenie stanu STOP sygnalizowanego przez przejście ze stanu niskiego w wysoki na linii SDA, gdy linia SCL jest utrzymywana w stanie wysokim.

Stany START i STOP
obrazek

Podczas jednej transakcji może zostać wytworzonych wiele stanów START. Stan START, po którym bezpośrednio nie następuje stan STOP, nazywa się powtórzonym stanem START (Sr).

Przesył bitów

Jak pokazuje poniższy rysunek, bit przesyłany na linii SDA musi być stabilny przez cały okres wysoki linii SCL. W konsekwencji wartość SDA może być zmieniana tylko w czasie niskiego okresu zegara. Zapewniane jest to sprzętowo przez moduł TWI.

Ważność danych
obrazek

Łączenie przesyłu bitów tworzy pakiety adresu i danych. Pakiety te składają się z 8 bitów danych (jeden bajt) z najbardziej znaczącym bitem przesyłanym jako pierwszy plus pojedynczy bit odpowiedzi braku potwierdzenia (NACK) lub potwierdzenia (ACK). Zaadresowane urządzenie sygnalizuje ACK przez wymuszenie stanu niskiego na linii SCL i NACK przez pozostawienie linii SCL w stanie wysokim podczas dziewiątego cyklu zegarowego.

Pakiet adresu

Po utworzeniu stanu START wysyłany jest 7-bitowy adres, po którym następuje bit odczytu/zapisu (R/W). To zawsze wysyłane jest przez układ master. Układ slave rozpoznający swój adres potwierdzi jego odbiór przez wymuszenie stanu niskiego na linii danych przy następnym cyklu SCL, natomiast wszystkie pozostałe układy slave powinny zwolnić linie TWI i czekać na następny START i adres. 7-bitowy adres, bit R/W oraz bit potwierdzenia tworzą wspólnie pakiet adresu. Dla każdego stanu START przekazywany jest tylko jeden pakiet adresu, również gdy używane jest adresowanie 10-bitowe.

Bit R/W określa kierunek transakcji. Jeśli bit R/W ma stan niski, to oznacza transakcję zapisu przez układ master, który rozpocznie przesyłanie danych po uzyskaniu potwierdzenia przyjęcia adresu przez układ slave. Przy stanie przeciwnym transakcja dotyczy odczytu danych z układu slave, który rozpocznie przesył po potwierdzeniu przyjęcia swojego adresu.

Pakiet danych

Pakiety danych następują po pakiecie adresu lub po innym pakiecie danych. Wszystkie pakiety danych mają długość dziewięciu bitów i składają się z jednego bajtu danych oraz bitu potwierdzenia. Bit kierunku w poprzednim pakiecie adresu określa kierunek przesyłu danych.

Transakcja

Transakcja jest pełnym przesłaniem od stanu START do STOP, łącznie z powtórzonymi stanami START, które mogą wystąpić pomiędzy nimi. Standard TWI definiuje trzy podstawowe tryby transakcji: zapis przez układ master (ang. Master Write), odczyt przez układ master (ang. Master Read) i transakcję mieszaną (ang. combined transaction).

Poniższy rysunek przedstawia transakcję zapisu przez układ master. Master inicjuje transakcję przez wysłanie stanu START (S), po którym następuje pakiet adresu z bitem kierunku ustawionym na zero (ADDRESS+W).

Transakcja zapisu przez master
obrazek

Pod warunkiem akceptacji adresu przez układ slave master może rozpocząć przesyłanie danych (DATA), a slave potwierdzi ACK lub nie potwierdzi NACK każdy bajt. Jeśli żaden pakiet danych nie ma być przesłany, to master zakończy transakcję przez wysłanie stanu STOP (P) bezpośrednio po pakiecie adresu. Nie ma ograniczenia liczby pakietów danych, które można przesłać. Jeśli slave sygnalizuje brak potwierdzenia NACK odbioru danych, to master musi założyć, że slave nie jest w stanie przyjąć więcej danych, transakcję należy zatem zakończyć.

Poniższy rysunek ilustruje transakcję odczytu przez układ master. Master inicjuje transakcję przez wysłanie stanu START, po którym następuje pakiet adresu z bitem kierunku ustawionym na jeden (ADRESS+R). Aby układ master mógł kontynuować transakcję, slave musi potwierdzić adres.

Transakcja odczytu przez master
obrazek

Pod warunkiem potwierdzenia adresu przez układ slave, master może rozpocząć przyjmowanie danych. Nie ma ograniczeń liczby przesyłanych pakietów danych. Slave przesyła dane, dopóki master potwierdza je lub nie bitem ACK/NACK po każdym bajcie danych. Master kończy przesył bitem NACK i wysłaniem stanu STOP.

Rysunek poniżej przedstawia transakcję mieszaną. Składa się ona z kilku transakcji odczytu i zapisu rozdzielonych powtórzonymi stanami START (Sr).

Transakcja mieszana
obrazek

Zegar i rozciąganie taktów zegarowych

Wszystkie urządzenia połączone z magistralą TWI mogą rozciągać niski okres impulsów zegarowych w celu zmniejszenia częstotliwości zegara lub wstawienia stanów oczekiwania podczas przetwarzania danych. Urządzenie wymagające rozciągnięcia taktu zegarowego może to zrobić przez podtrzymanie w stanie niskim linii SCL po wykryciu na niej stanu niskiego. Poniższy rysunek definiuje trzy rodzaje rozciągania taktów zegarowych.

Rozciąganie taktów zegarowych
obrazek

Jeśli dane urządzenie znajduje się w stanie uśpienia i zostanie wykryty stan START, to takt zegarowy jest rozciągany podczas okresu wybudzania tego urządzenia.

Urządzenie może okresowo zwolnić częstotliwość magistrali przez rozciąganie taktów zegarowych na poziomie bitów. Pozwala to urządzeniu slave pracować przy niższej częstotliwości zegara systemowego. Jednakże wtedy zostanie odpowiednio zmniejszona całkowita wydajność magistrali. Oba urządzenia master i slave mogą swobodnie rozciągać takt zegarowy na poziomie bajtów przed lub po bicie ACK/NACK. Daje to czas na przetworzenie przyjętych danych lub przygotowanie danych do wysłania albo na wykonanie innych zadań krytycznych czasowo.

Gdy slave rozciąga takt zegarowy, układ master zostaje zmuszony do przejścia w stan oczekiwania aż slave będzie gotowy i vice versa.

Arbitraż

Układ master może rozpocząć transakcję na magistrali tylko wtedy, gdy wykryje, że magistrala jest niezajęta. Ponieważ magistrala TWI zezwala na podłączenie kilku układów master, możliwe jest, iż dwa z nich rozpoczną transakcję w tym samym czasie.  Spowoduje to jednoczesne przejęcie magistrali przez wiele układów master. Jest to rozwiązywane przez schemat arbitrażowy, w którym układ master traci kontrolę nad magistralą, jeśli nie potrafi przesłać wysokiego poziomu na linii SDA. Układy master przegrywające arbitraż muszą czekać, aż magistrala stanie się ponownie niezajęta (tj. muszą czekać na stan STOP), zanim spróbują ponownie ją przejąć. Układy slave nie uczestniczą w procedurze arbitrażu.

Arbitraż TWI
obrazek

Powyższy rysunek przedstawia przykład, gdzie dwa urządzenia TWI master próbują utrzymać posiadanie magistrali. Oba urządzenia są w stanie wytworzyć stan START, lecz URZĄDZENIE1 przegrywa arbitraż, gdy próbuje przesłać bit o poziomie wysokim (bit 5), a URZĄDZENIE2 przesyła bit o poziomie niskim while DEVICE2.

Arbitraż pomiędzy powtórzonym stanem START a bitem danych, stanem STOP a bitem danych lub powtórzonym stanem START a stanem STOP nie jest dozwolony i będzie wymagał specjalnej obsługi w programie.

Synchronizacja

Algorytm synchronizacji zegara jest niezbędny w sytuacji, gdy więcej niż jedno urządzenie master próbuje kontrolować linię SCL w tym samym czasie. Algorytm ten oparty jest na tych samych zasadach co opisane wcześniej rozciąganie cykli zegarowych.

Poniższy rysunek pokazuje przykład, gdy dwa urządzenia master rywalizują o kontrolę nad zegarem magistrali. Linia SCL tworzy iloczyn montażowy (ang. wired-AND) wyjść zegarowych tych dwóch urządzeń master.

Synchronizacja zegara
obrazek

Przejście z poziomu wysokiego w niski na linii SCL wymusi stan niski dla wszystkich układów master na magistrali i zaczną one odliczać okres niskiego poziomu taktu zegara. Długość tego odliczania może być różna dla różnych układów master. Gdy jeden z nich (w tym przypadku URZĄDZENIE 1) zakończy swój niski okres, zwolni linię SCL. Jednakże linia ta nie powróci do stanu wysokiego, aż wszystkie układy master ją zwolnią. W konsekwencji linia SCL będzie utrzymywana w stanie niskim przez urządzenie o najdłuższym okresie poziomu niskiego (URZĄDZENIE 2). Urządzenia z krótszymi okresami poziomu niskiego muszą przejść w stan oczekiwania aż zegar zostanie uwolniony. Gdy linia SCL zostanie zwolniona przez wszystkie urządzenia i przejdzie w stan wysoki, to wszystkie układy master rozpoczną swoje okresy wysokie sygnału zegarowego. Urządzenie, które jako pierwsze zakończy swój okres wysoki (URZĄDZENIE 1) wymusi stan niski na linii zegarowej i procedura się powtarza. W wyniku czas trwania stanu wysokiego na linii SCL jest określany przez urządzenie o najkrótszym okresie zegarowym, natomiast czas trwania stanu niskiego określa urządzenie o najdłuższym okresie zegarowym.

Kompatybilność z SMBUS

Jak z każdym innym urządzeniem zgodnym z interfejsem I2C istnieją znane problemy kompatybilności, które projektant powinien znać, zanim połączy urządzenie TWI z urządzeniami SMBUS. W środowisku SMBUS należy brać pod uwagę:


Na początek:  podrozdziału   strony 

Praca układu slave

Układ slave TWI jest zorientowany na bajty z opcjonalnymi przerwaniami po każdym bajcie. Są osobne znaczniki przerwań dla przerwania danych (ang. Data Interrupt) i przerwania Adresu/STOP (ang. Address/Stop Interrupt). Znaczniki przerwań mogą być ustawiane w celu wyzwolenia przerwania TWI, które ma być użyte do operacji określania źródła przerwania. Istnieją specjalne znaczniki stanu do oznaczania odebranych potwierdzeń ACK/NACK, wstrzymania zegara, kolizji, błędu magistrali oraz kierunku odczytu/zapisu.

Gdy zostanie ustawiony znacznik przerwania, na linii SCL zostaje wymuszony stan niski. Daje to czas układowi slave na odpowiedź lub przetworzenie danych, co w większości przypadków będzie wymagało współdziałania ze strony programu. Poniższy rysunek pokazuje działanie układu slave TWI. Romby SW oznaczają miejsca, w których wymagana jest współpraca z oprogramowaniem.

 

Liczba generowanych przerwań utrzymywana jest na minimalnym poziomie przez automatyczną obsługę większości przypadków. Można uaktywnić szybkie rozkazy, aby automatycznie wyzwalać operacje i zmniejszyć złożoność oprogramowania.

Tryb nieograniczony (ang. Promiscuous Mode) może być włączony, aby umożliwić układowi slave odpowiadanie na wszystkie odebrane adresy.

Odbieranie pakietów adresu

Gdy układ Slave TWI zostanie właściwie skonfigurowany, będzie oczekiwał na wykrycie stanu START. Gdy to się stanie, zostanie pobrany nadchodzący bajt adresu i sprawdzony przez logikę porównywania adresów, po czym układ slave potwierdzi bitem ACK poprawny adres. Jeśli otrzymany adres nie zgadza się z adresem układu slave, to potwierdzenia nie nastąpi i slave będzie oczekiwać na nowy stan START.

Znacznik przerwania adresu/STOP zostanie ustawiony, gdy slave wykryje stan START z następującym po nim właściwym pakietem adresu. Wywołanie adresu ogólnego również ustawi ten znacznik przerwania.

Stan START, po którym natychmiast następuje stan STOP jest nielegalną operacją, która ustawia znacznik błędu magistrali (ang. Bus Error flag).

Znacznik kierunku odczytu/zapisu (ang. R/W Direction flag) odzwierciedla bit kierunku otrzymany wraz z adresem. Może on zostać odczytany programowo w celu określenia rodzaju bieżącej operacji.

W zależności od tego bitu kierunku oraz stanu magistrali pojawia się jeden z czterech przypadków, które mogą wystąpić za pakietem adresu. Przypadki te muszą być obsługiwane przez program.

Przypadek 1: pakiet adresu zaakceptowany – bit kierunku ustawiony

Jeśli znacznik kierunku zostanie ustawiony, to oznacza to operację odczytu przez układ master. Linia SCL zostaje ustawiona w stan niski, co wydłuża takt zegara magistrali. Jeśli układ slave wyśle potwierdzenie ACK, to sprzętowo zostanie ustawiony znacznik przerwania danych (ang. Data Interrupt Flag), oznaczający potrzebę przygotowania danych do przesłania. Jeśli układ slave wyśle potwierdzenie negatywne NACK, to slave będzie oczekiwać na nowy stan START i zgodność adresu.

Przypadek 2: pakiet adresu zaakceptowany – bit kierunku wyzerowany

Jeśli znacznik kierunku jest wyzerowany, to oznacza to operację zapisu przez układ master. Linia SCL zostaje ustawiona w stan niski, wydłużając takt zegara magistrali. Jeśli slave wyśle potwierdzenie ACK, to będzie czekać na otrzymanie danych. Mogą następnie wystąpić dane, powtórzone stany START lub stan STOP. W przypadku potwierdzenia negatywnego NACK układ slave będzie oczekiwał na nowy stan START i zgodność adresu.

Przypadek 3: kolizja

Jeśli układ slave nie jest w stanie wysłać wysokiego poziomu lub NACK, to zostanie ustawiony znacznik kolizji (ang. Collision flag), co zablokuje logikę układu slave wyjścia danych i potwierdzeń. Wstrzymywanie zegara zostaje zwolnione. Akceptowany jest stan START lub powtórzony stan START.

Przypadek 4: odebranie stanu STOP

Działanie jest takie samo jak w powyższych przypadkach 1 lub 2 z jednym wyjątkiem. Gdy otrzymany zostanie stan STOP, znacznik adresu/STOP będzie ustawiony, oznaczając wystąpienie stanu STOP, a nie zgodności adresu.

Odbieranie pakietów danych

Układ slave będzie wiedział, że został odebrany z sukcesem pakiet adresu z wyzerowanym bitem kierunku odczytu/zapisu. Po potwierdzeniu adresu, układ slave musi być gotowy na przyjęcie danych. Po przyjęciu pakietu danych zostaje ustawiony znacznik przerwania danych (ang. Data Interrupt Flag), a układ slave musi go potwierdzić wysyłając ACK lub NACK. Po wysłaniu NACK, slave musi spodziewać się stanu STOP lub powtórzonego stanu START.

Wysyłanie pakietów danych

Układ slave będzie wiedział, że został odebrany z sukcesem pakiet adresu z ustawionym bitem kierunku odczytu/zapisu. Może on następnie rozpocząć wysyłanie danych przez zapis do rejestru danych slave (ang. Slave Data register). Po zakończeniu przesyłania pakietu danych zostaje ustawiony znacznik przerwania danych (ang. Data INterrupt Flag). Jeśli układ master prześle negatywne potwierdzenie NACK, slave musi przestać przesyłać dane i spodziewać się stanu STOP lub powtórzonego stanu START.


Na początek:  podrozdziału   strony 

Opis rejestrów

TWSCRA – TWI Slave Control Register A – Rejestr A sterujący układem slave TWI

Bit 7 6 5 4 3 2 1 0  
0x2D TWSHE - TWDIE TWASIE TWEN TWSIE TWPME TWSME TWSCRA
Zapis/Odczyt Z/O O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – TWSHE: TWI SDA Hold Time Enable – Włączenie czasu przetrzymania danych

Gdy bit ten zostanie ustawiony, to każde ujemne zbocze na linii SCL wyzwoli dodatkowe wewnętrzne opóźnienie, zanim układ będzie mógł zmienić stan linii SDA. To dodatkowe opóźnienie ma długość około 50 ns. Może to być przydatne w systemach SMBus.

Bit 6 – Zarezerwowany

Ten bit jest zarezerwowany i przy odczycie zawsze daje zero.

Bit 5 – TWDIE: TWI Data Interrupt Enable – Włączenie przerwań od danych TWI

Gdy bit ten zostanie ustawiony i przerwania są włączone, to będzie generowane przerwanie TWI przy ustawieniu znacznika przerwania TWDIF w rejestrze TWSSRA.

Bit 4 – TWASIE: TWI Address/Stop Interrupt Enable – Włączenie przerwań od adresu/stanu STOP

Gdy bit ten zostanie ustawiony i przerwania są włączone, to będzie generowane przerwanie TWIprzy ustawieniu znacznika przerwania TWASIF w rejestrze TWSSRA.

Bit 3 – TWEN: Two-Wire Interface Enable – Uaktywnienie interfejsu TWI

Gdy ten bit zostanie ustawiony, uaktywnia się interfejs TWI.

Bit 2 – TWSIE: TWI Stop Interrupt Enable – Usktywnienie przerwania od stanu STOP

Ustawienie tego bitu spowoduje ustawianie bitu TWASIF w rejestrze TWSSRA, gdy zostanie wykryty stan STOP.

Bit 1 – TWPME: TWI Promiscuous Mode Enable – Włączenie trybu nieograniczonego TWI

Po ustawieniu tego bitu logika rozpoznawania adresu slave TWI odpowiada twierdząco na wszystkie odebrane adresy. Gdy bit jest wyzerowany, logika rozpoznawania adresu używa rejestru TWSA do określenia, który adres ma zostać rozpoznany jako własny.

Bit 0 – TWSME: TWI Smart Mode Enable – Włączenie trybu Smart

Gdy bit ten zostanie ustawiony, układ slave TWI przechodzi w tryb Smart, w którym potwierdzenie wysyłane jest natychmiast po odczycie rejestru danych TWI (TWSD). Rodzaj potwierdzenia zdefiniowany jest za pomocą bitu TWAA w rejestrze TWSCRB.

Gdy bit jest wyzerowany, potwierdzenie zostanie wysłane po ustawieniu na 1 bitów TWCMDn w rejestrze TWSCRB.

TWSCRB – TWI Slave Control Register B – Rejestr B sterujący układem slave TWI

Bit 7 6 5 4 3 2 1 0  
0x2C - - - - - TWAA TWCMD1 TWCMD0 TWSCRB
Zapis/Odczyt O O O O O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:3 – Zarezerwowane

Te bity są zarezerwowane i przy odczycie zwracają zawsze stan 0.

Bit 2 – TWAA: TWI Acknowledge Action – Rodzaj potwierdzenia TWI

Ten bit definiuje zachowanie się układu slave po odebraniu bajtu adresu lub bajtu danych z układu master. W zależności od bitu TWSME w rejestrze TWSCRA operacja potwierdzenia jest wykonywana albo gdy do bitów TWCMDn zostanie wpisany poprawny rozkaz, albo gdy nastąpił odczyt rejestru danych. Operacja potwierdzenia TWI jest również wykonywana przy zerowaniu znacznika TWAIF po stwierdzeniu zgodności adresu lub znacznika TWDIF flag podczas przesyłania przez układ master. Szczegóły podaje poniższa tabelka.

TWAA Operacja TWSME Gdy
0 Wysłanie ACK 0 Bity TWCMDn są zapisane stanem 10 lub 11
1 Odczyt rejestru danych TWSD
1 Wysłanie NACK 0 Bity TWCMDn są zapisane stanem 10 lub 11
1 Odczyt rejestru danych TWSD

Bity 1:0 – TWCMD[1:0]: TWI Command – Rozkaz TWI

Zapis tych bitów wyzwala działanie układu slave zgodnie z poniższą tabelką. Rodzaj operacji zależy od znaczników przerwań układu slave TWI – TWDIF i TWASIF. Potwierdzenie jest wykonywane tylko wtedy, gdy układ slave otrzymuje bajty danych lub bajt adresu z układu master.

TWCMD[1:0] TWDIR Operacja Zastosowanie
00 X Brak Żadne
01 X Zarezerwowane
10 0 Wykonanie potwierdzenia i oczekiwanie na stan START Zakończenie transakcji
1 Oczekiwanie na stan START
11 0 Wykonanie potwierdzenia i odebranie następnego bajtu W odpowiedzi na bajt adresu
(ustawiony znacznik TWASIF)
1 Wykonanie potwierdzenia i ustawienie TWDIF
0 Wykonanie potwierdzenia i oczekiwanie na następny bajt W odpowiedzi na bajt danych
(ustawiony znacznik TWDIF)
1 Brak

Zapis bitów TWCMDn automatycznie zwolni linię SCL oraz wyzeruje bit TWCH (wstrzymywanie zegara) i znaczniki przerwań układu slave. Bity TWAA i TWCMDn można zapisać w tym samym czasie. W takim wypadku operacja potwierdzenia zostanie wykonana przed uaktywnieniem rozkazu TWI. Bity TWCMDn są strobami i przy odczycie zawsze dają wartość zero.

TWSSRA – TWI Slave Status Register A – Rejestr A stanu układu slave

Bit 7 6 5 4 3 2 1 0  
0x2B TWDIF TWASIF TWCH TWRA TWC TWBE TWDIR TWAS TWSSRA
Zapis/Odczyt Z/O Z/O O O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – TWDIF: TWI Data Interrupt Flag – Znacznik przerwania danych TWI

Znacznik ten jest ustawiany, gdy został poprawnie odebrany bajt danych, tzn. w trakcie operacji nie było błędów magistrali ani kolizji. Po ustawieniu znacznika układ slave wymusza stan niski na linii SCL, co wydłuża okres zegarowy TWI. Linia SCL zostaje zwolniona przez wyzerowanie znaczników przerwań.

Zapis jedynki do tego bitu spowoduje wyzerowanie znacznika. Znacznik jest również automatycznie zerowany po zapisaniu poprawnego rozkazu do bitów TWCMDn w rejestrze TWSCRB.

Bit 6 – TWASIF: TWI Address/Stop Interrupt Flag – Znacznik przerwania adresu/STOP

Ten znacznik jest ustawiany, gdy układ slave wykryje odebranie poprawnego adresu lub gdy zostanie wykryta kolizja w transmisji. Gdy znacznik jest ustawiony, układ slave wymusza stan niski linii SCL, wydłużając okres zegarowy TWI. Linia SCL zostaje zwolniona przez wyzerowanie znaczników przerwań.Jeśli bit TWASIE w rejestrze TWSCRA jest ustawiony, to stan STOP na magistrali również ustawi TWASIF. Stan STOP ustawi ten znacznik tylko wtedy, jeśli zegar systemowy jest szybszy od minimalnego czasu wolnego magistrali pomiędzy STOP a START.
Zapis jedynki do tego bitu spowoduje wyzerowanie znacznika. Znacznik jest również automatycznie zerowany po zapisaniu poprawnego rozkazu do bitów TWCMDn w rejestrze TWSCRB.

Bit 5 – TWCH: TWI Clock Hold – Wstrzymywanie zegara TWI

Bit ten jest ustawiany, gdy układ slave utrzymuje linię SCL w stanie niskim.
Bit można tylko odczytywać, natomiast zostaje on ustawiony po ustawieniu bitu TWDIF lub TWASIF. Bit może zostać pośrednio wyzerowany przez wyzerowanie znaczników przerwań i zwolnienie linii SCL.

Bit 4 – TWRA: TWI Receive Acknowledge – Potwierdzenie odbioru TWI

Bit ten zawiera ostatni bit potwierdzenia otrzymany od układu master. Bit jest bitem tylko do odczytu. Gdy ma wartość zero, to ostatnim potwierdzeniem od master było ACK. Gdy ma wartość jeden, to ostatnim potwierdzeniem od master było NACK.

Bit 3 – TWC: TWI Collision – Kolizja TWI

Bit jest ustawiany, gdy układ slave nie był w stanie przesłać bitu danych o stanie wysokim lub bitu NACK. Gdy zostanie wykryta kolizja, układ slave rozpocznie swoje normalne działanie i zablokuje wyjście danych i potwierdzeń. Na linię SDA nie będą przesyłane wartości o niskim poziomie.

Bit jest zerowany po zapisie w nim jedynki. Bit jest również zerowany automatycznie po wykryciu stanu START lub powtórzonego stanu START.

Bit 2 – TWBE: TWI Bus Error – Błąd magistrali TWI

Ten bit zostaje ustawiony, jeśli podczas przesłanie będzie wykryty nielegalny stan magistrali. Stan nielegalny powstaje, jeśli wykryty zostanie powtórzony stan START lub stan STOP, a liczba bitów od poprzedniego staanu START nie jest wielokrotnością dziewięć.

Bit jest zerowany po zapisie w nim jedynki.

Aby błędy magistrali mogły być wykrywane, częstotliwość zegara systemowego musi wynosić co najmniej czterokrotną wartość częstotliwości SCL.

Bit 1 – TWDIR: TWI Read/Write Direction – Kierunek odczytu/zapisu TWI

Bit ten oznacza bit kierunku z ostatniego pakietu adresu odebranego od układu master. Gdy ma wartość jeden, master jest w trakcie operacji odczytu. Gdy ma wartość zero, master jest w trakcie operacji zapisu.

Bit 0 – TWAS: TWI Address or Stop – Adres lub stan STOP TWI

Ten bit wskazuje przyczynę ostatniego ustawienia znacznika TWASIF. Jeśli ma wartość zero, to ustawienie TWASIF było spowodowane przez stan STOP. Jeśli ma wartość jeden, to znacznik TWASIF został ustawiony w wyniku wykrycia adresu.

TWSA – TWI Slave Address Register – Rejestr adresu slave TWI

Bit 7 6 5 4 3 2 1 0  
0x2A TWSA[7:0] TWSA
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr adresu slave zawiera adres slave TWI używany przez logikę rozpoznawania adresu do określania, czy układ master zaadresował ten układ slave. Gdy używany jest tryb rozpoznawania adresów 7- lub 10-bitowych, to 7 najstarszych bitów tego rejestru reprezentuje adres układu slave. Najmniej znaczący bit (TWSA0) wykorzystywany jest do rozpoznawania wywołania z adresem ogólnym. Ustawienie TWSA0 uaktywnia logikę rozpoznawania wywołania adresem ogólnym.

Gdy używane jest adresowanie 10-bitowe, to logika rozpoznawania adresu obsługuje jedynie sprzętowe rozpoznawanie pierwszego bajtu adresu 10-bitowego. Jeśli TWSA[7:1] jest ustawione na "0b11110nn", to 'nn' będzie reprezentować bity 9 i 8 adresu slave. Następny odebrany bajt będzie zawierał wtedy bity od 7 do 0 adresu 10-bitowego, lecz to musi zostać obsłużone programowo.

Gdy logika rozpoznawania adresu wykryje odbiór właściwego bajtu adresu, zostanie ustawiony znacznik TWASIF, a znacznik kierunku TWDIR będzie uaktualniony.

Jeśli bit TWPME w rejestrze TWSCRA jest ustawiony, to logika rozpoznawania adresu akceptuje wszystkie adresy transmitowane na magistrali TWI. W tym trybie rejestr TWSA nie jest wykorzystywany.

TWSD – TWI Slave Data Register – Rejestr danych TWI slave

Bit 7 6 5 4 3 2 1 0  
0x28 TWSD[7:0] TWSD
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr danych jest używany przy wysyłaniu lub przy odbiorze danych. Podczas transmisji dane są przesuwane z/do rejestru TWSD i do/z magistrali. Dlatego nie ma dostępu do rejestru danych podczas przesyłu bajtu. Jest to zabezpieczone sprzętowo. Dostęp do rejestru jest możliwy tylko wtedy, gdy układ slave wymusza stan niski na linii SCL, tzn. gdy jest ustawiony bit wstrzymywania zegara TWCH.

Gdy układ master odczytuje dane z układu slave, dane do przesłania muszą zostać wpisane do rejestru TWSD. Przesłanie bajtu rozpoczyna się, gdy układ master uruchamia zegar w celu taktowania bajtu danych z układu slave. Po bajcie slave otrzymuje bit potwierdzenia od master. Następnie są ustawiane bity TWDIF i TWCH.

Gdy układ master zapisuje dane do slave, znaczniki TWDIF i TWCH zostają ustawione, gdy jeden bajt został odebrany w rejestrze danych. Jeśli został uaktywniony tryb Smart, to odczyt rejestru danych wyzwoli operację na magistrali zgodnie z ustawieniem bitu TWAA w rejestrze TWSCRB. Dostęp do rejestru TWSD w trybie Smart wyzeruje znacznik przerwania danych slave oraz bit TWCH.

TWSAM – TWI Slave Address Mask Register – Rejestr maski adresu układu slave TWI

Bit 7 6 5 4 3 2 1 0  
0x29 TWSAM[7:0] TWAE TWSAM
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:1 – TWSAM[7:1]: TWI Address Mask – Maska adresu TWI

Bity te mogą pełnić rolę drugiego rejestru adresu lub rejestru maski adresu w zależności od ustawienia bitu TWAE.

Jeśli bit TWAE jest wyzerowany, to do TWSAM można załadować 7-bitową maskę adresu slave. Każdy bit w TWSAM może maskować (wyłączyć) odpowiadający mu bit adresu w rejestrze TWSA. Jeśli bit maski jest ustawiony na 1, to zgodność pomiędzy nadchodzącym bitem adresu a odpowiadającym mu bitem w TWSA jest ignorowana. Innymi słowy wymaskowane bity zawsze będą pasować.

Jeśli bit TWAE jest ustawiony na 1, to do TWSAM można załadować drugi adres slave jako dodatek do rejestru TWSA. W tym trybie układ slave będzie reagował na 2 różne adresy, jeden w TWSA i drugi w TWSAM.

Bit 0 – TWAE: TWI Address Enable – Uaktywnienie adresu TWI

Standardowo bit ten jest wyzerowany i TWSAM pełni rolę maski adresu dla rejestru TWSA. Jeśli bit zostanie ustawiony na 1, to logika rozpoznawania adresu będzie reagować na dwa różne adresy, jeden w TWSA i drugi w TWSAM.


Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.