Wysyłanie danych 0 | |
Bajt 1 ► -« Bajt 2 |
—► -« Bajt (n+1) —► |
Odczyt danych 1 | |
Bajt 1 ► M Bajt 2 ►
Tryb mieszany (kolejne transmisje bez warunku STOP)
wysoki. Tylko między warunkami STOP i START możliwe jest utrzymanie innego ich stanu.
Ponieważ na tej samej magistrali może współpracować do 128 układów, zaraz po rozpoczęciu transmisji konieczne jest wysłanie adresu układu, do którego chcemy uzyskać dostęp, oraz informacji, czy chcemy dokonać zapisu, czy odczytu. Zaadresowany element zgłasza swoją gotowość poprzez wystawienie impulsu ACK (ACKnowlcdge - potwierdzenie). Polega to na wystawieniu 0 na jeden takt sygnału zegarowego. Podczas transmisji to zawsze odbiorca potwierdza odbiór danych (tak więc przy odczycie jest to MASTER, przy zapisie będzie to SLAVE). Po odczytaniu ostatniej danej, przed wygenerowaniem warunku STOP, nic należy generować potwierdzenia. Brak sygnału ACK powinien powodować przerwanie transmisji.
Rysunek 30 przedstawia sposób przesyłania potwierdzenia. Na rysunku 31 natomiast przedstawiam wygląd podstawowych ramek danych stosowanych podczas transmisji. Rysunek ten na pierwszy rzut oka może straszyć swoim wyglądem. Postaram się krótko rozwiać wszelkie wątpliwości. Widzimy tutaj, że zgodnie z powyższym opisem, po warunku START wysyłamy na magistralę siedem bitów adresu. Ósmy bit w przesyłanym, pierwszym bajcie musi mieć wartość: 1 - jeśli chcemy odczytać dane; 0 - jeśli chcemy doko-
Pełny standard definiuje możliwość wystąpienia w systemie kilku układów typu MASTER. Stworzono specjalny protokół umożliwiający bezkonfliktową ich współpracą. W rzeczywistych układach najczęściej jednak chcemy mieć dostęp tylko do wybranych układów wykonawczych. Umożliwia to znaczne uproszczenie algorytmu: Po pierwsze, znika konieczność badania, czy linia jest wolna albo czy nasza transmisja nie została przerwana: Po drugie, możemy zrezygnować z linii SCL w trybie otwartego kolektora -tylko nasz procesor może generować sygnał zegarowy. Upraszczając nasze rozwiązanie, odejdziemy jeszcze troszkę od standardu. Zrezygnujemy z zewnętrznego rezystora podciągającego na korzyść wewnętrznego podciągania portów mikrokontrolera. Praktyka wykazuje, że takie rozwiązanie nie zakłóca działania dołączonego układu.
Podczas przesyłania danych linia SDA nie może się zmieniać, gdy na linii SCL znajduje się stan wysoki (rysunek 28). Zmiana linii danych podczas wysokiego stanu na wyprowadzeniu zegarowym ma specjalne znaczenie i umożliwia generowanie tak zwanych warunków START i STOP - pokazuje to rysunek 29. Stanem spoczynkowym obu linii jest stan
Rysunek 28 - transmisja jednego bitu
Rysunek 29 - generowanie warunku START i STOP
H MASTER ►SLAVE [Ś] START
fjj) SLAVE ►MASTER [|| STOP
□ Kierunek zależny od R/W
[71 Potwierdzenie (ACK) m Brak potwierdzenia (NACK)
Rysunek 31 - ramki danych
nać zapisu. Układ powinien potwierdzić prawidłowy adres sygnałem ACK. Niezależnie od tego, czy dokonujemy zapisu, czy odczytu, to MASTER generuje sygnał zegarowy. Przy zapisie na wyprowadzenie SDA podajemy kolejne bity danych, od najstarszego do najmłodszego. Każdy prawidłowo zapisany bajt SLAVE potwierdza sygnałem ACK. Jeśli ACK się nie pojawi, oznaczać to może koniec rejestrów przeznaczonych do zapisu, zapełnienie pamięci lub błąd transmisji. Jeśli dane chcemy odczytywać, na linii SDA należy utrzymywać stan wysoki - będzie ona wyste-rowywana przez urządzenie SLAVE. Wczasie odczytu to na nas spoczywa odpowiedzialność za generowanie sygnału ACK. Ostatniego odczytanego bajtu nie potwierdzamy!
Zwykle transmisja kończy się warunkiem STOP. Przyjrzyj się jednak ostatniej ramce. Okazuje się, że transmisja może być także „zakończona” kolejnym STARTem. Umożliwia to, przede wszystkim, zmianę trybu odczyt/zapis bez zwalniania magistrali.
Uff... Tyle jeśli chodzi o sam sposób transmisji. Jeśli jeszcze coś jest dla Ciebie niejasne, spróbuj przyjrzeć się ponownie rysunkom, przeczytaj ponownie opis. Nie śpiesz się. Trudniejsze zagadnienia powinny stać się jasne, gdy pojawią się kody źródłowe.
Standard definiuje aktualnie trzy możliwe prędkości transmisji: standard (lOOkbps), fast (400kbps) oraz high speed (3,4Mbps). W każdym przypadku ograniczona jest jedynie maksymalna prędkość przesyłanych danych, tak więc bezpiecznie możemy korzystać z układów typu high speed, taktując transmisję z częstotliwością choćby 1kHz. Jednak próba transmisji z większą prędkością niż ta, do której układ został przystosowany, najpradpo-dobnicj zakończy się błędami transmisji. Podsumowując, w prostym przypadku, moglibyśmy stworzyć procedury obsługi I2C dla najwolniejszego przypadku i nie przejmować się resztą. Jednak nie zapominajmy o tym, że naszym podstawowym celem nie jest
40 Grudzień 2005 Elektronika dla Wszystkich