Samouczek dotyczący protokołu magistrali I2C, Interfejs z aplikacjami

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W dzisiejszych czasach protokoły odgrywają istotną rolę w projekt systemu wbudowanego . Bez przechodzenia do protokołów, jeśli chcesz rozszerzyć funkcje peryferyjne mikrokontrolera, zwiększy się złożoność i zużycie energii. Dostępne są różne typy protokołów magistrali, takie jak USART, SPI, CAN, Protokół magistrali I2C itp., które służą do przesyłania danych między dwoma systemami.

Protokół I2C

Co to jest magistrala I2C?




Przesyłanie i odbieranie informacji między dwoma lub więcej niż dwoma urządzeniami wymaga ścieżki komunikacyjnej nazywanej systemem magistrali. Magistrala I2C jest dwukierunkową dwuprzewodową magistralą szeregową, która służy do przesyłania danych między układami scalonymi. I2C oznacza „Inter Integrated Circuit”. Po raz pierwszy została wprowadzona przez półprzewodniki Philipsa w 1982 r. Magistrala I2C obejmuje trzy szybkości przesyłania danych, takie jak standardowa, szybka i szybka. Magistrala I2C obsługuje 7-bitowe i 10-bitowe urządzenie przestrzeni adresowej, a jej działanie różni się przy niskich napięciach.

Protokół magistrali I2c

Protokół magistrali I2c



Linie sygnałowe I2C

Linie sygnałowe I2C

Linie sygnałowe I2C

I2C to protokół magistrali szeregowej składający się z dwóch linii sygnałowych, takich jak linie SCL i SDL, które służą do komunikacji z urządzeniami. SCL oznacza „szeregową linię zegara” i ten sygnał jest zawsze sterowany przez „urządzenie główne”. SDL oznacza „szeregową linię danych”, a sygnał ten jest sterowany przez urządzenie główne lub urządzenia peryferyjne I2C. Obie linie SCL i SDL są w stanie otwartego drenu, gdy nie ma transferu między urządzeniami peryferyjnymi I2C.

Wyjścia Open-Drain


Otwarty odpływ to koncepcja tranzystora FET gdzie końcówka spustowa tranzystora jest w stanie otwartym. Piny SDL i SCL urządzenia master są zaprojektowane z tranzystorami w stanie otwartym, więc przesyłanie danych jest możliwe tylko wtedy, gdy te tranzystory są prowadzone. Stąd te linie lub zaciski drenu są podłączone do rezystorów podciągających do VCC w trybie przewodzenia.

Interfejsy I2C

Wiele urządzenia slave są połączone z mikrokontrolerem za pomocą magistrali I2C poprzez układ scalony przesuwnika poziomu I2C do przesyłania informacji między nimi. Protokół I2C używany do podłączenia maksymalnie 128 urządzeń, z których wszystkie są podłączone do komunikacji z liniami SCL i SDL jednostki głównej, a także z urządzeniami podrzędnymi. Obsługuje komunikację Multimaster, co oznacza, że ​​do komunikacji z urządzeniami zewnętrznymi używane są dwa mastery.

Szybkość przesyłania danych I2C

Protokół I2C obsługuje trzy tryby, takie jak: tryb szybki, tryb wysokiej szybkości i tryb standardowy, w którym prędkość danych w trybie standardowym wynosi od 0 Hz do 100 Hz, a dane w trybie szybkim mogą być przesyłane z szybkością od 0 Hz do 400 kHz, a tryb wysokiej prędkości z 10 KHz do 100 KHz. 9-bitowe dane są wysyłane dla każdego transferu, przy czym 8 bitów jest wysyłanych przez MSB nadajnika do LSB, a 9-ty bit jest bitem potwierdzenia wysłanym przez odbiornik.

Szybkość przesyłania danych I2C

Szybkość przesyłania danych I2C

Komunikacja I2C

Protokół magistrali I2C jest najczęściej używany w komunikacji typu master i slave, gdzie master jest nazywany „mikrokontrolerem”, a slave jest nazywany innymi urządzeniami, takimi jak ADC, EEPROM, DAC i podobne urządzenia w systemie wbudowanym. Liczba urządzeń slave jest podłączona do urządzenia master za pomocą magistrali I2C, przy czym każdy slave składa się z unikalnego adresu do komunikacji. Poniższe kroki służą do komunikacji urządzenia master z slave:

Krok 1: Najpierw urządzenie główne wysyła warunek startowy, aby poinformować wszystkie urządzenia podrzędne, aby nasłuchiwały na szeregowej linii danych.

Krok 2: Urządzenie master wysyła adres docelowego urządzenia slave, który jest porównywany z adresami wszystkich urządzeń slave podłączonych do linii SCL i SDL. Jeśli którykolwiek adres pasuje, to urządzenie jest wybierane, a pozostałe wszystkie urządzenia są odłączane od linii SCL i SDL.

Krok 3: Urządzenie slave z dopasowanym adresem otrzymanym od mastera, odpowiada potwierdzeniem do mastera, po czym zostaje nawiązana komunikacja między urządzeniami master i slave na magistrali danych.

Krok 4: Zarówno master, jak i slave odbierają i przesyłają dane w zależności od tego, czy komunikacja jest odczytywana, czy zapisywana.

Krok 5: Następnie master może przesłać 8-bitowe dane do odbiornika, który odpowie 1-bitowym potwierdzeniem.

Samouczek I2C

Przesyłanie i odbieranie informacji krok po kroku w odniesieniu do impulsów zegara jest nazywane protokołem I2C. Jest to protokół międzysystemowy i krótkodystansowy, co oznacza, że ​​jest używany na płytce drukowanej do komunikacji między urządzeniami nadrzędnymi i podrzędnymi.

Podstawy protokołu I2C

Ogólnie rzecz biorąc, system magistrali I2C składa się z dwóch przewodów, które można łatwo wykorzystać do rozszerzenia funkcji peryferyjnych wejścia i wyjścia, takich jak ADC, EEROM i RTC, oraz inne podstawowe elementy stworzyć system, którego złożoność jest bardzo mniejsza.

Przykład: Ponieważ mikrokontroler 8051 nie ma wbudowanego ADC - więc jeśli chcemy podłączyć jakiekolwiek czujniki analogowe do mikrokontrolera 8051 - musimy użyć urządzeń ADC, takich jak ADC0804-1 kanałowy ADC, ADC0808- 8 kanałowy ADC itp. Używając tych ADC, możemy połączyć czujniki analogowe z mikrokontrolerem.

Bez korzystania z protokołu do rozszerzenia funkcji I / O dowolnego mikrokontrolera lub procesora, możemy przejść do 8-pinowego urządzenia 8255 ICit. Plik Mikrokontroler 8051 to 40-pinowy mikrokontroler wykorzystując układ 8255 IC, możemy rozszerzyć 3 porty I / O o 8 pinów w każdym porcie. Dzięki zastosowaniu wszystkich urządzeń, takich jak RTC, ADC, EEPROM, Timery itp. - do rozbudowy obwodów peryferyjnych - zwiększa się również złożoność, koszt, zużycie energii i rozmiar produktu.

Aby przezwyciężyć ten problem, pojawia się koncepcja protokołu w celu zmniejszenia złożoności sprzętu i zużycia energii. Możemy rozszerzyć więcej funkcji, takich jak urządzenia peryferyjne I / 0, ADC, T / C i urządzenia pamięci do 128 urządzeń za pomocą tego protokołu I2C.
Terminologia używana w protokołach I2C

Nadajnik: Urządzenie wysyłające dane do magistrali nazywane jest nadajnikiem.

Odbiorca: Urządzenie odbierające dane z magistrali nazywane jest odbiornikiem.

Mistrz: Urządzenie, które inicjuje transfery w celu wygenerowania sygnałów zegarowych i zakończenia transferu, nazywane jest urządzeniem głównym.

Niewolnik: Urządzenie adresowane przez mastera nazywane jest slave.

Multimaster: Więcej niż jeden master może próbować sterować magistralą w tym samym czasie bez uszkodzenia wiadomości. Nazywa się to Multimaster.

Arbitraż: Procedura zapewniająca, że ​​jeśli więcej niż jeden master jednocześnie próbuje sterować magistralą - tylko jeden może to zrobić, wygrywająca wiadomość nie zostanie uszkodzona.

Synchronizacja: Procedura synchronizacji pojedynczych zegarów dwóch lub więcej urządzeń nosi nazwę synchronizacji.

Sekwencja poleceń podstawowych I2C

  1. Warunek bitu początkowego
  2. Stan bitu stopu
  3. Warunek potwierdzenia
  4. Operacja zapisu z master do slave
  5. Przeczytaj Operation Slave na Master

Warunek bitu startu i stopu

Gdy master (mikrokontroler) chce rozmawiać z urządzeniem slave (na przykład ADC), rozpoczyna komunikację, wysyłając warunek startu na magistrali I2C, a następnie wydaje warunek zatrzymania. Poziomy logiczne start i stop I2C są pokazane na rysunku.

Warunek początkowy I2C definiuje się jako przejście z wysokiego do niskiego stanu linii SDA, podczas gdy linia SCL jest wysoka. Stan zatrzymania AN I2C występuje, gdy linia SDA przełącza się z niskiego na wysoki, podczas gdy linia SCL jest wysoka.

Master I2C zawsze generuje warunki S i P. Gdy master I2C zainicjuje stan START, magistrala I2c jest traktowana jako zajęta.

Warunek bitu startu i stopu

Warunek bitu startu i stopu

Programowanie:

Warunek START:

sbit SDA = P1 ^ 7 // zainicjalizuj piny SDA i SCL mikrokontrolera //
sbit SCL = P1 ^ 6
void delay (unsigned int)
void main ()
{
SDA = 1 // przetwarzanie danych //
SCL = 1 // zegar jest wysoki //
opóźnienie()
SDA = 0 // wysłał dane //
opóźnienie()
SCL = 0 // sygnał zegara jest niski //
}
Void delay (int p)
{
unsignedinta, b
Dla (a = 0a<255a++) //delay function//
Dla (b = 0b}

Stan STOP:

void main ()
{
SDA = 0 // Zatrzymaj przetwarzanie danych //
SCL = 1 // zegar jest wysoki //
opóźnienie()
SDA = 1 // Zatrzymano //
opóźnienie()
SCL = 0 // sygnał zegara jest niski //
}
Void delay (int p)
{
unsignedinta, b
Dla (a = 0a<255a++) //delay function//
Dla (b = 0b}

Stan potwierdzenia (ACK) i braku potwierdzenia (NCK)

Po każdym bajcie przesyłanym przez magistralę I2C następuje stan potwierdzenia z odbiornika, co oznacza, że ​​po tym, jak master obniży poziom SCL w celu zakończenia transmisji 8-bitowej, SDA zostanie wciągnięta w stan niski przez odbiornik do urządzenia głównego. Jeśli po transmisji odbiornik nie ciągnie, linia SDA LOW jest uważana za stan NCK.

Potwierdzenie (ACK)

Potwierdzenie (ACK)

Programowanie

Potwierdzenie
void main ()
{
SDA = 0 // Linia SDA przechodzi na niski //
SCL = 1 // zegar od wysokiego do niskiego //
opóźnienie (100)
SCL = 0
}
Brak potwierdzenia:
void main ()
{
SDA = 1 // Linia SDA przechodzi w stan wysoki //
SCL = 1 // zegar od wysokiego do niskiego //
opóźnienie (100)
SCL = 0
}

Operacja Master to Slave Writes

Protokół I2C przesyła dane w postaci pakietów lub bajtów. Po każdym bajcie następuje bit potwierdzenia.

Format przesyłania danych

Format przesyłania danych

Format przesyłania danych

Początek: Przede wszystkim sekwencja przesyłania danych zainicjowana przez mastera generującego warunek startowy.

Adres 7-bitowy: Następnie master wysyła adres slave w dwóch formatach 8-bitowych zamiast pojedynczego adresu 16-bitowego.

R / W: Jeśli bit odczytu i zapisu jest wysoki, wykonywana jest operacja zapisu.

NIESTETY: Jeżeli operacja zapisu jest wykonywana w urządzeniu slave, to odbiornik wysyła 1-bitowy ACK do mikrokontrolera.

Zatrzymać: Po zakończeniu operacji zapisu w urządzeniu podrzędnym mikrokontroler wysyła stan zatrzymania do urządzenia podrzędnego.

Programowanie

Operacja zapisu

voidwrite (unsigned char d)
{
Unsigned char k, j = 0x80
Dla (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
opóźnienie (4)
SCL = 0
}
SDA = 1
SCL = 1
opóźnienie (2)
c = SDA
opóźnienie (2)
SCL = 0
}

Operacja odczytu Master to Slave

Dane są odczytywane z urządzenia slave w postaci bitów lub bajtów - najpierw odczytaj najbardziej znaczący bit, a najmniej znaczący bit na końcu.

Format odczytu danych

Format odczytu danych

Format odczytu danych

Początek: Przede wszystkim sekwencja przesyłania danych jest inicjowana przez mastera generującego warunek startowy.

Adres 7-bitowy: Następnie master wysyła adres slave w dwóch formatach 8-bitowych zamiast pojedynczego adresu 16-bitowego.

R / W: Jeśli bit odczytu i zapisu jest niski, wykonywana jest operacja odczytu.

NIESTETY: Jeżeli operacja zapisu jest wykonywana w urządzeniu slave, to odbiornik wysyła 1-bitowy ACK do mikrokontrolera.

Zatrzymać: Po zakończeniu operacji zapisu w urządzeniu podrzędnym mikrokontroler wysyła stan zatrzymania do urządzenia podrzędnego.

Programowanie

Nieważne przeczytaj ()
{
Unsigned char j, z = 0x00, q = 0x80
SDA = 1
dla (j = 0j<8j++)
{
SCL = 1
opóźnienie (100)
flaga = SDA
if (flaga == 1)
q)
q = q >> 1
opóźnienie (100)
SCL = 0

Praktyczny przykład podłączenia ADC do mikrokontrolera 8051

ADC to urządzenie służące do konwersji danych analogowych na postać cyfrową i cyfrową na analogową. Mikrokontroler 8051 nie ma wbudowanego ADC, więc musimy dodać go zewnętrznie poprzez protokół I2C. PCF8591 jest oparty na I2C analogowo na cyfrowe i przetwornik cyfrowo-analogowy. To urządzenie może obsługiwać maksymalnie 4 analogowe kanały wejściowe wraz z napięciami 2,5 do 6 V.

Wyjścia analogowe

Wyjścia analogowe mają postać napięć. Na przykład czujnik analogowy 5 V daje logikę wyjściową od 0,01 V do 5 V.
Maksymalna wartość cyfrowa 5 V = 256.
Wartość 2,5 V = 123 zgodnie z maksymalną wartością napięcia.

Wzór na wyjście analogowe to:

Formuła wyjść cyfrowych:

Łączenie ADC z mikrokontrolerem 8051

Łączenie ADC z mikrokontrolerem 8051

Powyższy rysunek przedstawia transmisję danych za pomocą protokołu I2C z urządzenia ADC do mikrokontrolera 8051. Piny ADC SCL i SDA są podłączone do pinów 1.7 i 1.6 mikrokontrolera w celu nawiązania komunikacji między nimi. Gdy czujnik podaje wartości analogowe do ADC, konwertuje je na cyfrowe i przesyła dane do mikrokontrolera za pomocą protokołu I2C.

Chodzi o samouczek dotyczący protokołu magistrali I2C z odpowiednimi programami. Mamy nadzieję, że podane treści przedstawi Państwu praktyczną koncepcję współpracy kilku urządzeń z mikrokontrolerami wykorzystującymi komunikację I2C. Jeśli masz jakiekolwiek wątpliwości co do procedury łączenia tego protokołu, możesz skontaktować się z nami, komentując poniżej.