Mikroprocesory i Mikrosterowniki Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com.
I2C a TWI Magistrala I2C wzięła swoją nazwę od skrótu: IIC : Inter Integrated Circuit bus. Zgodnie z tą nazwą, magistrala I2C służy do komunikowania się ze sobą układów scalonych w obrębie danego urządzenia. Właścicielem patentu na magistralę I2C jest koncern Philipsa, a I2C jest zastrzeżoną nazwą handlową. Producenci układów scalonych, których konstrukcja przewiduje komunikowanie się zgodne ze standardem I2C, robią to zazwyczaj w oparciu o licencję Philipsa.
TWI sterowanie Rejestry: TWCR (TWI Control Register) TWSR (TWI Status Register) TWBR (TWI Bit Rate Register) TWDR (TWI Data Register) TWAR (TWI Slave Address Register) 2 piny WE / WY Przerwanie: Flaga TWINT (TWCR) Włączanie TWIE (TWCR) Wektor 0x011
TWI struktura sieci Magistrala I2C składa się z dwóch linii: SDA ( - Serial Data) SCL ( - Serial Clock)
TWI struktura sieci Dwa typy układów: zarządzające (MASTER) - inicjuje cykl łączności, generuje przebieg zegarowy na linii SCL, zarządza transmisją podrzędne (SLAVE) - przyjmuje lub wysyła dane na polecenie MASTERA, w takt generowanego sygnału zegarowego SCL. Każdy SLAVE ma przypisany własny numer adresowy.
TWI w mikrokontrolerze ATmega8535 Komunikacja tryby pracy tryby pracy 7-bitowy rejestr adresowy (możliwość obsługi 128 różnych adresów Slave) arbitraż dla komunikacji Multi-master szybkość transmisji do dowolnie konfigurowalny adres dla pracy w trybie SLAVE oraz wsparcie dla komendy General Call rozpoznanie własnego adresu umożliwia wybudzenie ze stanu uśpienia
Parametry elektryczne Rezystancja wejściowa wyprowadzeń SDA i SCL jest na tyle duża, że nie wprowadza istotnych ograniczeń, co do liczby układów sterowanych z jednego wyjścia Ograniczenie takie wynika z dopuszczalnej pojemności Wyjścia gwarantują poprawną pracą z linią o pojemności do 400 pf Pojemność wejść poszczególnych układów I2C nie powinna przekraczać 10 pf Długość linii SDA i SCL nie powinna przekraczać kilku metrów.
Piny Piny SDA i SCL wszystkich układów mają konfigurację otwarty dren albo otwarty kolektor Stan na SDA / SCL będzie iloczynem stanów logicznych wszystkich podłączonych do nich wyjść PULL-UP
Protokół transmisji Dane przesyłane są w pakietach jedno bajtowych Liczba przesyłanych bajtów nie jest limitowana Transmisja od MSB Jeżeli odbiornik chwilowo nie może odebrać wysłanego bajtu danych może wymusić przejście nadajnika w stan oczekiwania (spowolnić transmisję)
Transmisja danych Stan bezczynności: 1 na SDA i SCL Gdy jeden układ przesyła dane pozostałe muszą zwolnić linię SDA (stan HIGH) Gdy na SDA i SCL jest stan wysoki magistrala jest wolna 1 2
Transmisja danych Odczyt bitu przez odbiornik gdy SCL jest w stanie Zmiany na SDA TYLKO gdy SCL jest w stanie
Sygnały START/STOP Pomiędzy START i STOP magistrala jest zajęta. Inne układy typu MASTER nie mogą przerwać transmisji. START: SDA gdy na SCL STOP: SDA gdy na SCL
Bity potwierdzenia - ACK Bit potwierdzenia Uzyskanie potwierdzenia upoważnia Brak potwierdzenia od odbiornika: * układ niegotowy do nawiązania łączności * układ niedołączony * układ niesprawny * wymuszenie końca transmisji (master odbiornik)
Bity potwierdzenia - ACK Potwierdzenie - wymuszenie stanu niskiego SDA w czasie dodatkowego impulsu SCL Stan wysoki oznacza brak potwierdzenia (negative acknowledge)
Adresowanie danych Każdy SLAVE posiada swój unikalny MASTER bezpośrednio po zainicjowaniu transmisji podaje MASTER ustala Kierunek przesyłania danych nie może się zmienić aż do
Adresowanie danych
Adresowanie danych - adresy specjalne
Adresowanie danych - adresy specjalne
Przykładowy cykl łączności: odczyt pojedynczego bajtu
Praca magistrali z kilkoma układami typu master Do jednej magistrali I2C może zostać podłączony więcej niż jeden układ master WTEDY Zapobiega utracie danych na skutek korzystania ze wspólnej magistrali
Arbitraż - Master ma prawo inicjować cykl łączności tylko wówczas, gdy - Prawo do transmisji zdobywa master, który - Brak zniekształcenia lub utraty danych - Master, który stracił arbitraż może generować sygnał zegarow do końca bajtu, w którym go stracił
Synchronizacja Synchronizacja zegarów - Zsynchronizowany sygnał zegarowy SCL posiada: poziom niski określony przez układ o najdłuższym '0' poziom wysoki określony przez układ o najkrótszym '1'
Budowa magistrali TWI (ATmega8535)
Rejestry magistrali TWI
TWI Control Register (TWCR) TWINT(7) praca zakończona; czekam na reakcję TWEA(6) TWI Enable Ack TWSTA(5) generuje TWSTO(4) TWWC(3) Write Collision TWEN(2) fizyczne TWIE(0) INT
TWI Control Register (TWCR) TWINT(7) praca zakończona; czekam na reakcję TWEA(6) Po wysłaniu TWI Enable Ack wirtualnie ON/OFF Po wysłaniu TWSTA(5) Po wysłaniu generuje START TWSTO(4) Po odebraniu STOP (M) lub przerywa transmisję (S) Po przegraniu TWWC(3) Po wykryciu Write na magistrali Collision swojego (wpis do SLA TWDR / General przy (7)=0) Call TWEN(2) Po wykryciu fizyczne na magistrali ON/OFF STOP lub REPEATED START Sygnalizacja błędu związanego z nielegalnym TWIE(0) INT ON/OFF START lub STOP
TWI Status Register (TWSR)
TWI Status Register (TWSR)
TWI Bit Rate Register (TWBR) TWBR powinno być > 10
TWI (Slave) Address Register (TWAR) 7-bitowy adres układu SLAVE Nie używane gdy układ jest Konieczne gdy w sieci jest TWGCE(0) ON/OFF rozpoznawania General Call
TWI Data Register (TWDR) Przechowuje obecny na magistrali (niezależnie od kierunku przepływu danych) Może być modyfikowany TWINT (TWCR) = 1 (=> m.in. nie można przed wysłaniem adresu SLA)
Algorytm programu