Programowanie mikroprocesorów ( mikrokontrolerów )

One Wire


1. Wstęp 

Protokół one wire jest protokołem pozwalającym na komunikacje tzn. wymianę naych przez urządzenia za pomocą jednoprzewodowej magistrali danych (jeden przewód). Urządzenia wykorzystujące protokół One Wire takie jak termometr cyfrowy DS1820 do komunikacji wykorzystuje jeden przewód. Przewodem tym przesyłane są dane w tzw. slotach (przedziałach) czasowych trwających przez ściśle określony czas. W protokole One Wire dwa urządzenia komunikujące się między sobą muszą być podzielone na urządzenie Master (pan) czyli urządzenie rządzące transmisją oraz urządzenia Slave (niewolnik) czyli urządzenia podporządkowane urządzeniu sterującemu przepływem danych. W transmisji One Wire powinno znajdować się jedno urządzenie Master sterujące transmisją danych oraz dowolna liczba urządzeń Slave (w zależnosci od dostępnej przestrzeni adresowej). 

2. Opis protokołu

Aby uruchomić transmisje danych w protokole One Wire musimy ściśle przestrzegać wartości przedziałów czasowych slotów odczytu i zapisu. Poniższy rysunek jest interpretacją graficzną protokołu One Wire.

Programowanie mikroprocesorów mikrokontrolerów - parametry czasowe one wire

W protokole One Wire występują cztery rodzaje slotów czasowych:

  • Wysłanie danej przez układ Master do układu Slave
  • Odebranie danej przez układ Master od układu Slave
  • Wysłanie danej przez układ Slave do Układu Master (najczęściej w odpowiedzi na zapytanie od Mastera)
  • Odebranie danej przez układ Slave od układu Master

3. Wysłanie zera przez układ Master do układu Slave

Na rysunku slot ten opisany jest jako MASTER WRITES "0" SLOT. Stanem wyjściowym jest wartość 1 na nóżce mikroprocesora mikrokontrolera. Aby wysłać zero do układu Slave należy na nóżce mikroprocesora mikrokontrolera wymusić stan zero przez czas slotu czasowego a następnie powrócić do wartości jeden na nóżce mikroprocesora mikrokontrolera. Czas slotu wynosić może minimum 60us a maksymalnie 120us. Przerwa pomiędzy kolejnymi slotami czasowymi wynosić musi przynajmniej 1us. Układ odbiorczy w tym przypadku DS1820 najszybciej po 15 us typowo po 30us powinien odczytać wartość wystawianą na magistrale. Jeden slot jest jednym bitem danych tak więc do przesłania całego bajtu potrzebujemy wysłac 8 slotów.

4. Wysłanie jedynki przez układ Master do układu Slave

Aby wysłać na magistrale jedynkę należy na magistrale podać zero przez minimum 1us ale nie dłuzej niż 15us. Po czasie tym należy ustawić jedynkę na nóżkę mikroprocesora mikrokontrolera gdyż wówczas układ Slave zaczyna próbkować wartość przesyłanego bitu. Należy zapewnić aby suma czasów zera i jedynki trwała dokładnie tyle ile przyjęliśmy czas trwania slotu.

5. Odebranie zera przez układ Master z układu Slave (układ Slave wysyła wartość zero do układu Master)

Odczyt wartości przez układ master następuje najczęściej po wysłaniu jakiegoś zapytania do układu Slave. Aby odczytać wartość z magistrali One Wire którą wystawia nam Slave należy zainicjować Slot przez wystawienie zera na magistrale danych przez Mastera na czas minimum 1us a typowo na 3-5us następnie nóżkę Mastera przestawiamy w tryb wejścia z rezystorem podciągającym. Przed upływem 15us odczytujemy wartość magistrali danych (np po 13-14us od zainicjalizowania slotu) jeśli układ Slave wysyła zero wartość napięcia podawanego z rezystora podciągającego na nóżce mikroprocesora mikrokontrolera ściągnie do zera i odczytamy zero z magistrali. Po upływie 15us lub dłuższym Slave zwalnia wymuszanie zera i magistrala przez rezystor podciągający ładuje się do logicznej jedynki. Nóżka mikroprocesora mikrokontrolera powinna pozostać w stanie odczytu tak długo aby wartość Slotu była równa przyjętemu czasowi jego trwania.

6. Odebranie jedynki przez układ Master z układu Slave (układ Slave wysyła wartość jeden do układu Master)

Odczyt jedynki z układu Slave przebiega analogicznie jak w powyższym przypadku z ta różnicą że po przełączeniu nóżki mikroprocesora po 3-5us w stan odczytu (wejścia) i podłaczenie do magistrali danych rezystora podciągającego przez mikroprocesor mikrokontroler układ Slave nie bedzie ściągał magistrali do zera i naładuje się ona od razu do wartości logicznej jedynki tak że po 15us przy odczytywaniu stanu lini danych będzie ona naładowana do napiecia logicznej jedynki i zostanie odczytana jedynka przez mikroprocesor mikrokontroler. Po odczytaniu wartości należy zapewnić odpowiednią długość trwania slotu.

 To są tylko podstawowe informacje na temat slotów czasowych i sposobu transmisji danych przez magistralę One Wire. Więcej informacji możecie usyzkać przyglądając się opisowi termometra DS1820 gdzie szczegułowo opisana została zasada działa tej magistrali na praktycznym przykładzie wraz z inicjalizacją urządzenia w artykule "Czujnik temperatury DS1820" i jego obsługą oraz implementacją programową pełnej obsługi protokołu One Wire na przykładzie programu obsługi termometru DS1820 w artykule "Uruhomienie DS1820".







 
Wszelkie prawa zastrzeżone! Kopiowanie, powielanie i wykorzystywanie zdjęć, treści oraz jej fragmentów bez zgody autora zabronione.
© mikroprocesory.info.pl@gmail.com 2013.