Magistrale podstawy teoretyczne


16. Szeregowy interfejs SPI
Szeregowy interfejs SPI (Serial Peripherial Interface) służy do dwukierunkowej
(full-duplex), synchronicznej transmisji danych pomiędzy mikrokontrolerem, a zewnętrznymi
układami peryferyjnymi (np. przetwornik A/C i C/A, szeregowa pamięć zewnętrzna, zegar,
potencjometr cyfrowy lub inny mikrokontroler) [1, 17]. Interfejs SPI jest trójprzewodowy,
składa się z dwóch linii synchronicznie przesyłających dane w przeciwnych kierunkach oraz
linii z sygnałem taktującym synchronizującym transfer danych.
Transfer danych przez interfejs SPI odbywa się w układzie master-slave. Jeżeli w systemie
znajduje się więcej niż 1 mikrokontroler, to tylko jeden z nich w danej chwili pełni rolę
urządzenia master. Sposób połączenia układu nadrzędnego (master) z układem podrzędnym
(slave) przedstawiono na rysunku.
Rys.24. Transmisja danych po liniach magistrali SPI [1]
Interfejs SPI składa się z dwóch rejestrów przesuwnych połączonych w licznik pierścieniowy
i generatora sygnału taktującego (rys.24). Generator sygnału taktującego znajduje się zawsze
w układzie nadrzędnym (master). Linia MISO jest wejściem danych dla urządzenia master, a
wyjściem dla slave, natomiast linia MOSI jest wyjściem dla urządzenia master, a wejściem
dla slave. Linia SCK jest wejściem taktującym dla układu slave oraz wyjściem dla master.
Sygnał taktujący jest zawsze generowany przez układ nadrzędny (master) bez względu na to
czy dane są przez niego nadawane czy też odbierane.
Sygnał taktujący jest nadawany jedynie podczas transmisji.
Transmisje na liniach magistrali SPI są zawsze dwukierunkowe. Nadawaniu danych na linii
MOSI przez układ master towarzyszy zawsze nadawanie danych na linii MISO przez układ
slave. Nie wszystkie nadawane dane niosą informacje, najczęściej w jednym kierunku są
nadawane dane niosące informacje, podczas gdy w drugim są nadawane dane puste.
Rys.25. System składający się z urządzenia Master i kilku urządzeń Slave na magistrali SPI
[17]
Układ nadrzędny (master) wybiera poszczególne układy podrzędne (slave) przez jedną z
równoległych linii portu dołączonych do wyprowadzeń SS układów podrzędnych (rys.25).
Urządzenie slave zostanie wybrane, gdy na jego wejście SS zostanie podany określony stan
(istnieją urządzenia wybierane stanem niskim oraz stanem wysokim). W czasie transmisji, w
celu uniknięcia kolizji, tylko jeden układ podrzędny może być aktywny na liniach interfejsu.
16.1. Tryby pracy interfejsu SPI
Polaryzacja i faza sygnału taktującego układu master musi być dostosowana do
sposobu pracy układu slave.
Polaryzacja sygnału taktującego jest określana przez wartość logiczną tego sygnału w stanie
spoczynkowym. Gdy:
- CPOL=0 w stanie spoczynku linia taktująca jest w stanie niskim,
- CPOL=1 w stanie spoczynku linia taktująca jest w stanie wysokim.
Rys.26. Przebiegi czasowe interfejsu SPI dla sygnału zegarowego o CPHA=0 [1]
Faza sygnału taktującego definiuje zależność pomiędzy zboczami sygnału taktującego , a
momentami odbioru (próbkowania) danych wejściowych i nadawania (przesuwania w
rejestrze) danych wyjściowych. Gdy:
- CPHA=0 pierwsze zbocze sygnału taktującego próbkuje dane wejściowe, drugie zbocze
przesuwa dane w rejestrze (dane są próbkowane, a następnie przesuwane i wysyłane)
(rys.26)
- CPHA=1 pierwsze zbocze sygnału taktującego przesuwa dane w rejestrze  wyprowadza
je z rejestru, drugie zbocze próbkuje dane wejściowe (dane są przesuwane i wysyłane, a
następnie próbkowane i wpisywane do rejestru) (rys.27).
Rys.27. Przebiegi czasowe interfejsu SPI dla sygnału zegarowego o CPHA=1[1]
Wartości bitów CPOL i CPHA decydują o wyborze jednego z 4-ch trybów pracy interfejsu
SPI, oznaczonych jako 0, 1, 2 lub3.
Wybór trybu pracy interfejsu SPI [1]
Zbocze narastające Zbocze opadające Tryb pracy SPI
CPOL = 0, CPHA = 0 Odbiór (narastające) Nadawanie (opadające) 0
CPOL = 0, CPHA = 1 Nadawanie Odbiór (opadające) 1
(narastające)
CPOL = 1, CPHA = 0 Odbiór (opadające) Nadawanie (narastające) 2
CPOL = 1, CPHA = 1 Nadawanie (opadające) Odbiór (narastające) 3
Tryb pracy interfejsu SPI należy dostosować do wymagań urządzenia zewnętrznego
podłączonego do linii magistrali przez dokonanie odpowiednich wpisów rejestrze kontrolnym
SPCR.
16.2. Sterowanie interfejsem SPI
Z interfejsem SPI skojarzone są trzy rejestry mikrokontrolera, które zapewniają dostęp
do wszystkich funkcji interfejsu:
- Rejestr kontrolny SPCR służy do konfiguracji interfejsu i sterowania jego pracą
- Rejestr statusu SPSR zawiera flagi sygnalizujące stan interfejsu.
- Rejestr danych SPDR służy do wpisywania bajtu danych do wysłania oraz do odczytu
odebranego bajtu danych.
Rejestr kontrolny interfejsu SPI - SPCR
Bit 7 6 5 4 3 2 1 0
Nazwa SPIE SPE DODR MSTR CPOL CPHA SPR1 SPR0
Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W
Wartość początkowa 0 0 0 0 0 0 0 0
Bit 7  SPIE: maska przerwania interfejsu SPI
Gdy bit 7 jest logiczną 1, wówczas zakończenie transmisji znaku po magistrali SPI i
ustawienie bitu SPIF w rejestrze SPSR spowoduje skok do procedury obsługi przerwania
rozpoczynającego się od adresu $008 pod warunkiem ustawienia bitu I w rejestrze
statusowym.
Bit 6  SPE: włączenie interfejsu
Ustawienie bitu 6 umożliwia transmisje po magistrali SPI.
Bit 5  DODR: kolejność przesyłu danych
Bit 5 decyduje o kolejności przesyłania danych, gdy bit 5 zostanie ustawiony w stan logicznej
1 dane będą przesyłane od bitu najmłodszego do najstarszego, gdy bit 5 zostanie wyzerowany
dane będą przesyłane od bitu najstarszego do najmłodszego.
Bit 4  MSTR: wybór trybu master/slave
Ustawienie bitu 4 powoduje przejście urządzenia do pracy w trybie nadrzędnym master
(wyzerowanie bitu spowoduje przejście do pracy w trybie podrzędnym slave). Bit ten jest
zerowany poziomem niskim na linii SS.
Bit 3  CPOL: wybór polaryzacji sygnału taktującego
Bit 3 umożliwia wybór polaryzacji sygnału taktującego. Gdy na pozycji 3 zostanie wpisana
logiczna 1 sygnał taktujący w stanie spoczynku będzie miał poziom wysoki, zaś gdy 0 sygnał
taktujący w stanie spoczynku będzie miał poziom niski.
Bit 2  CPHA: wybór fazy próbkowania
Bit 2 dokonuje wyboru fazy próbkowania. Kiedy CPHA = 0 wówczas pierwsze zbocze
sygnału taktującego próbkuje dane wejściowe, a drugie zbocze przesuwa je w rejestrze i
nadaje (dane są próbkowane, a następnie przesuwane i wysyłane). W przypadku gdy bit ten
zostanie ustawiony w stan logicznej 1, wówczas pierwsze zbocze sygnału taktującego
przesuwa dane w rejestrze i wysyła, a drugie zbocze próbkuje dane wejściowe (dane są
przesuwane i wysyłane a następnie próbkowane i wpisywane do rejestru).
Bit 1  SPR1, bit 0  SPR0: wybór częstotliwości taktującej
Bity 1 i 0 określają częstotliwość sygnału taktującego interfejsu pracującego w trybie master.
Wartości bitów 1 i 0 nie mają wpływu na pracę urządzenia skonfigurowanego w trybie slave.
Rejestr statusowy interfejsu SPI - SPSR
Bit 7 6 5 4 3 2 1 0
Nazwa SPIF WCOL - - - - - -
Odczyt/zapis R R R R R R R R
Wartość początkowa 0 0 0 0 0 0 0 0
Wybór częstotliwości taktującej SCK [1]
SPR1 SPR0 SCK
fOSC/4
0 0
fOSC/16
0 1
fOSC/64
1 0
fOSC/128
1 1
Bit 7  SPIF: flaga sygnalizująca zakończenie transferu danej
Bit 7 informuje o zakończeniu przesyłania danych. Gdy transfer jest kompletny (nastąpi
przepisanie rejestru szeregowego do bufora) flaga ta zostaje ustawiona i następuje skok do
adresu $008 rozpoczynającego procedurę przerwania (jeśli maska SPIE w rejestrze SPCR
została ustawiona). Flaga SPIF jest zerowana sprzętowo po wyjściu z obsługi przerwania, jak
również po odczycie danych z rejestru SPDR. Do rejestru SPDR można wprowadzić kolejny
bajt danych wyłącznie w przypadku, gdy flaga SPIF jest wyzerowana.
Bit 6  WCOL: flaga sygnalizująca kolizję podczas transferu danej
Bit 6 kolizji zostaje ustawiony w stan logicznej 1, gdy zawartość rejestru danych zostanie
zmieniona podczas transmisji.
Rejestr danych interfejsu SPI - SPDR
Bit 7 6 5 4 3 2 1 0
Nazwa MSB - - - - - - LSB
Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W
Wartość początkowa X X X X X X X X
X  niezdefiniowana
17. Zegar czasu rzeczywistego DS1305 na magistrali SPI
Zegar czasu rzeczywistego DS1305 [7] pełni rolę zegara i kalendarza podającego czas
oraz datę w systemie BCD na liniach magistrali SPI. Układ zlicza sekundy, minuty, godziny,
dni, miesiące (uwzględniając różną liczbę dni w miesiącu) oraz lata (uwzględniając lata
przestępne).
Zegar czasu rzeczywistego DS1305 może pracować w trybie 12-sto lub 24-ro godzinnym.
Zegar czasu rzeczywistego DS1305 jest wyposażony w układ ładowania baterii kontrolowany
programowo. Bateria ładowalna może zostać wykorzystana jako rezerwowe zródło energii dla
zegara.
Dodatkowo zegar czasu rzeczywistego DS1305 posiada 96 bajtów pamięci RAM ogólnego
przeznaczenia.
Zegar czasu rzeczywistego DS1305 może generować dwa niezależne alarmy. Stan alarmowy
jest sygnalizowany stanem niskim na liniach odpowiednio: INT0 oraz INT1. Linie te mogą
zostać połączone z wejściami przerwań zewnętrznych mikrokontrolera.
W układzie ewaluacyjnym EVB-503 linie zegara czasu rzeczywistego są wyprowadzone na
złącze AUX3. Należy dokonać połączeń wg tabeli.
Połączenie linii zegara DS1305 i linii mikrokontrolera wyprowadzonych na złącze AUX3
płytki EVB-503 [5]
Linie zegara DS1305 Linie złącza AUX3 (połączone z Linie
liniami zegara DS1305) mikro-
kontrolera
CE  linia wyboru Chip Enable ES (SS) Chip Select (Slave Select) PORTB, 4
SDI  wejście danych Serial Data Input SI (MOSI) Master Output Slave Input PORTB, 5
SDO  wyjście danych Serial Data Output SO (MISO)  Master Input Slave Output PORTB, 6
SCLK  linia taktująca Serial Lock SCK  Serial Lock PORTB, 7
INT0  linia przerwania Interrupt 0 /IR (INT0)  Interrupt 0 PORTD, 2
17.1. Rejestry zegara czasu rzeczywistego DS1305
Rejestry czasu i alarmów
Rejestry czasu są dostępne w trybie odczytu pod adresami od $00 (rejestr sekund) do
$06 (rejestr lat). W trybie zapisu najstarszy bit adresu rejestru musi być ustawiony, stąd
rejestry czasu są zapisywane pod adresami od $80 (rejestr sekund) do $86 (rejestr lat).
Po resecie bit 6 w rejestrze godzin jest wyzerowany i zegar startuje w trybie 24-godzinnym.
Rejestry zegara DS1305 są zapisywane w formacie BCD, np. rejestr sekund
przechowuje pojedyncze sekundy na młodszym półbajcie i dziesiątki sekund na starszym
półbajcie. Wyświetlenie odczytanego czasu na wyświetlaczu LCD wymaga zamiany formatu
BCD liczby na format ASCII. W tym celu należy rozdzielić i obrócić półbajty, aby uzyskać
zapis binarny cyfr, a następnie do każdej cyfry w zapisie binarnym dodać wartość 48 w celu
przeniesienia w zakres ASCII.
Rejestry zegara czasu rzeczywistego DS1305 [7]
Adres
Zakres
szesnastkowy Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
(BCD)
Odczyt Zapis
$00 $80 0 dziesiątki sekund sekundy 00-59
$01 $81 0 dziesiątki minut minuty 00-59
P 01-12 +
12
dziesiątki
godziny P/A
$02 $82 0
A
godzin
24 10 00-23
$03 $83 0 0 0 0 dni tygodnia 1-7
dziesiątki dni
$04 $84 0 0 dni miesiąca 1-31
miesiąca
Dziesiątki
$05 $85 0 0 Miesiące 01-12
miesięcy
$06 $86 dziesiątki lat Lata 00-99
ALARM 0
$07 $87 M* 10 sekund alarmu sekundy alarmu 00-59
$08 $88 M 10 minut alarmu minuty alarmu 00-59
P*
01-
12
10
12+P/A
$09 $89 M godzina alarmu
A*
godziny
24 10 00-23
$0A $8A M 0 0 0 dzień alarmu 01-07
ALARM 1
$0B $8B M 10 sekund alarmu sekundy alarmu 00-59
$0C $8C M 10 minut alarmu minuty alarmu 00-59
P
01-
12
10
12+P/A
$0D $8D M godzina alarmu
A
godziny
24 10 00-23
$0E $8E M 0 0 0 dzień alarmu 01-07
$0F $8F Rejestr kontrolny -
$10 $90 Rejestr statusowy -
$11 $91 Rejestr układu ładującego baterię -
$12  $92 
Zarezerwowane -
$1F $9F
$20  $A0 
96 bajtów pamięci RAM 00-FF
$7F $FF
* M  bit maski, P  po południu, A  przed południem
Etapy konwersji z zapisu BCD na zapis ASCII
Starszy półbajt Młodszy półbajt Formatowanie Zawartość
b7 b6 b5 b4 b3 b2 b1 b0 BCD Dziesiątki na starszym półbajcie
Jednostki na dolnym półbajcie
0 0 0 0 b7 b6 b5 b4 binarne dziesiątki
0 0 0 0 b3 b2 b1 b0 binarne jednostki
0 0 1 1 b7 b6 b5 b4 ASCII dziesiątki
0 0 1 1 b3 b2 b1 b0 ASCII jednostki
W zegarze DS1305 można zaprogramować dwa alarmy: Alarm0 i/lub Alarm1 przez wybór
dnia i czasu alarmu oddzielnie dla każdego z alarmów:
- w rejestrach $87 do $8A dokonuje się ustawień warunków Alarmu 0,
- w rejestrach $8B do $8E dokonuje się ustawień warunków Alarmu 1.
Bity masek w rejestrach alarmów[7]
Bity masek w rejestrach alarmów (7-me bity)
sekundy minuty godziny dni
1 1 1 1 Alarm co sekundę
0 1 1 1 Alarm co minutę
0 0 1 1 Alarm co godzinę
0 0 0 1 Alarm codziennie
0 0 0 0 Alarm co tydzień
Bit 7 każdego z rejestrów alarmu (od $87 do $8E) jest bitem M maski.
Gdy 7-me bity (bity masek) we wszystkich rejestrach alarmu zostaną wyzerowane, alarm
będzie generowany raz w tygodniu.
Gdy bit maski rejestru dnia alarmu zostanie ustawiony w stan logicznej 1, alarm będzie
generowany codziennie.
Gdy dodatkowo bit maski rejestru godziny alarmu zostanie ustawiony w stan logicznej 1,
alarm będzie generowany co godzinę.
Gdy dodatkowo bit maski rejestru minuty alarmu zostanie ustawiony w stan logicznej 1,
alarm będzie generowany co minutę.
Gdy dodatkowo bit maski rejestru sekundy alarmu zostanie ustawiony w stan logicznej 1,
alarm będzie generowany co sekundę.
Rejestry specjalnego przeznaczenia
Rejestr kontrolny (czytany pod adresem $0F, zapisywany pod adresem $8F).
Bit 7 6 5 4 3 2 1 0
Nazwa EOSC WP 0 0 0 INTCN AIE1 AIE0
Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W
Wartość początkowa 0 n/a 0 0 0 0 0 0
Bit 7  EOSC: włączenie/wyłączenie oscylatora
Wyzerowanie bitu EOSC rozpoczyna pracę oscylatora. Ustawienie bitu EOSC zatrzymuje
pracę oscylatora i DS1305 wchodzi w tryb pracy energooszczędnej.
Bit 6  WP: zabezpieczenie przed nieuprawnionym zapisem
Przed każdą operacją zapisu do rejestru zegara lub RAM-u bit WP musi zostać wyzerowany.
Ustawiony w stan logicznej 1 bit WP zapobiega operacji zapisania do rejestrów, w tym
również na pozycje 1, 2 i 7 rejestru kontrolnego. Po resecie stan bitu WP jest nieustalony,
dlatego przed operacją zapisu bit WP musi zostać wyzerowany.
Bit 2  INTCN: bit kontrolny przerwania
Bit INTCN kontroluje zależność miedzy alarmem, a stanem niskim na linii przerwania. Gdy
bit INTCN jest ustawiony w stan logicznej 1, zrównanie rejestrów czasu i alarmu 0 zeruje
linię INT0 (pod warunkiem uaktywnienia alarmu 0), a zrównanie rejestrów czasu i alarmu 1
zeruje linię INT1 (pod warunkiem uaktywnienia alarmu 1). Kiedy bit INTCN jest
wyzerowany, zrównanie rejestrów czasu i alarmu 0 lub alarmu 1 zeruje linię INT0 (pod
warunkiem uaktywnienia alarmów), podczas gdy linia INT1 nie pełni żadnej funkcji.
Bit 1  AIE1: maska alarmu 1
Gdy bit masi AIE1 jest ustawiony w stan logicznej 1, ustawienie flagi przerwania 1 (IRQF1)
w rejestrze statusowym wywołuje stan niski na linii INT1 (gdy INTCN=1) lub na linii INT0
(gdy INTCN=0). Gdy bit AIE1 jest wyzerowany, ustawienie flagi przerwania 1 (IRQF1) w
rejestrze statusowym nie wywołuje zmiany na żadnej linii.
Bit 0  AIE0: maska alarmu 0
Gdy bit maski AIE0 jest ustawiony w stan logicznej 1 ustawienie flagi przerwania 0 (IRQF0)
w rejestrze statusowym wywołuje stan niski na linii INT0. Gdy bit AIE0 jest wyzerowany
ustawienie flagi przerwania 0 (IRQF0) w rejestrze statusowym nie wywołuje żadnej zmiany
na linii INT0.
Rejestr statusowy (czytany pod adresem $10)
Bit 7 6 5 4 3 2 1 0
Nazwa 0 0 0 0 0 0 IRQF1 IRQF0
Odczyt/zapis R R R R R R R R
Wartość początkowa 0 0 0 0 0 0 0 0
Bit 1  IRQF1: flaga przerwania 1
Flaga IRQF1 zostanie ustawiona sprzętowo, gdy nastąpi zrównanie rejestrów czasu i alarmu1.
Spowoduje to wyzerowanie linii INT1 pod warunkiem, że bit maski AIE1 jest ustawiony w
stan logicznej 1. Wyzerowanie flagi IRQF1 następuje, gdy którykolwiek z rejestrów Alarmu 1
zostanie odczytany lub zapisany.
Bit 0  IRQF0: flaga przerwania 0
Flaga IRQF0 zostanie ustawiona sprzętowo, gdy nastąpi zrównanie rejestrów czasu i alarmu
0. Spowoduje to wyzerowanie linii INT0 pod warunkiem, że bit maski AIE0 jest ustawiony w
stan logicznej 1. Wyzerowanie flagi IRQF0 następuje, gdy którykolwiek z rejestrów Alarmu 0
zostanie odczytany lub zapisany.
17.2. Transfer danych po magistrali SPI
Układ DS1305 rozpoznaje polaryzację zegara przez próbkowanie linii SCLK w stanie
wysokim CE. Na skutek tego każda polaryzacja zegara SCLK jest akceptowana przez układ
DS1305.
Wybór układu DS1305 następuje stanem wysokim na linii CE.
Częstotliwość taktująca nie powinna przekraczać wartości 2MHz, przy napięciu zasilania 5V.
Zbocze impulsu CE powinno wyprzedzać 1-sze zbocze taktujące o co najmniej 2s. Impulsy
na magistrali SPI (np. impuls taktujący) nie mogą być krótsze niż 0.5s.
Dane są przesyłane po linii SDI podczas operacji zapisu (rys.28) i po linii SDO podczas
operacji odczytu (rys.29).
W trakcie transferu bajt adresowy jest nadawany jako pierwszy. Najstarszy bit (7-my bit)
bajtu adresowego determinuje rodzaj operacji. Jeśli bit 7 jest logiczna 1 , to nastąpi operacja
zapisu jednego lub kilku bajtów. Jeśli bit 7 jest logicznym 0 , to nastąpi operacja odczytu
jednego lub kilku bajtów.
Rys.28. Zapis pojedynczego słowa po magistrali SPI [7]
Rys.29. Odczyt pojedynczego słowa po magistrali SPI [7]
W przypadku transferu pojedynczego słowa (bajtu) po dokonaniu zapisu lub odczytu linia CE
ponownie jest ustawiana w stan niski.
W przypadku transferu wielu bajtów, w trybie seryjnym, po podaniu adresu może nastąpić
zapis lub odczyt wielu bajtów danych (rys.30).
Każdy z cykli zapisu lub odczytu powoduje automatyczną inkrementację adresu rejestru RTC
(Real Time Clock) lub RAM-u. Inkrementacja jest kontynuowana dopóki trwa transfer.
Podczas transferu do RTC adres powraca do wartości $00 po wzroście do $1F (podczas
odczytu) i powraca do wartości $80 po wzroście do $9F (podczas zapisu).
Podczas transferu do RAM-u adres powraca do wartości $20 po wzroście do $7F (podczas
odczytu ) i powraca do wartości $A0 po wzroście do $FF (podczas zapisu).
Rys.30. Transfer danych w trybie seryjnym po magistrali SPI [7]
Przykład konfiguracji magistrali SPI
SPCR = (1< 18. Magistrala I2C
Magistrala szeregowa I2C umożliwia dwukierunkową, simpleksową, synchroniczną
transmisję danych między mikrokontrolerem, a zewnętrznymi układami peryferyjnymi.
Magistrala I2C składa się z dwóch linii:
- linią SCL przesyłane są impulsy zegarowe synchronizujące transmisję,
- linia SDA transmituje dane w dwóch kierunkach (rys.31).
Rys.31. Przykładowa konfiguracja magistrali I2C[17]
Urządzenia podłączone do magistrali mogą być skonfigurowane jako MASTER
(urządzenie nadrzędne) lub SLAVE (urządzenie podrzędne). W danej sesji łączności tylko
jeden mikrokontroler podłączony do magistrali może być skonfigurowany jako MASTER,
chociaż każde z urządzeń może pracować zarówno jako nadajnik jak i odbiornik (rys.32).
Mikrokontroler MASTER generuje przebieg zegarowy SCL taktujący transmisję oraz inicjuje
łączność z wybranym urządzeniem SLAVE podając programowo jego adres. Wybrany
SLAVE potwierdza odbiór bajtu adresowego, pozostałe urządzenia SLAVE pozostawiają
linię SDA w stanie wysokiej impedancji.
Rys.32. Połączenie urządzeń z magistralą I2C[17]
Układy podłączone do linii SCL i SDA muszą być wyposażone w wyjścia z otwartym
drenem podciągnięte do zasilania przez rezystor. Liczba urządzeń SLAVE, jaka może być
dołączona do jednego urządzenia MASTER jest ograniczona od strony sprzętowej
pojemnością wejściową tych urządzeń i nie może przekroczyć wypadkowej wartości 400pF.
Stabilność i zmiana danych
W stanie bezczynnym  idle obie linie SCL i SDA znajdują się w stanie logicznym wysokim.
Stan linii SDA może ulegać zmianom jedynie przy niskim stanie sygnału zegarowego, stan
linii SDA musi być stabilny przy wysokim stanie linii SCL (rys.33). Naruszenie tej zasady w
dwóch wyjątkowych sytuacjach pozwala na określenie początku i końca transmisji.
Rys.33. Impulsy na liniach SCL i SDA w trakcie transmisji danych [9]
Sekwencja startu i stopu
Zmiana stanu na linii SDA z wysokiego na niski podczas wysokiego poziomu na linii SCL
oznacza sekwencję startu (rys.34), zaś zmiana w kierunku przeciwnym  sekwencję stopu
(rys.34). Sekwencje startu i stopu generuje urządzenie MASTER.
Rys.34. Sekwencja startu i stopu [9]
Sesja transmisji danych
Sesja połączeniowa inicjowana jest przez urządzenie typu MASTER przez wymuszenie stanu
niskiego na linii SDA i wygenerowanie w ten sposób sekwencji startu.
Następnie MASTER przesyła linią SDA osiem bitów słowa adresowego. Ósmy bit wybiera
rodzaj operacji: logiczne 0 dla zapisu, logiczna 1 dla odczytu danych. Zaadresowane
urządzenie SLAVE wymusza stan niski na zwolnionej przez MASTER linii SDA w trakcie
dziewiątego impulsu zegarowego, co oznacza potwierdzenie odebrania słowa adresowego.
Dalsza transmisja danych przebiega podobnie. Urządzenie nadające przesyła osiem bitów
danych do urządzenia odbierającego synchronicznie z 8-ma impulsami zegarowymi na linii
SCL, a w czasie 9-tego impulsu SCL (rys.35) oczekuje na potwierdzenie w postaci
logicznego 0. Sekwencja stopu kończy sesję transmisji danych.
Rys.35. Sekwencja potwierdzenia odbioru znaku[9]
19. Pamięć EEPROM AT24CXX na magistrali I2C
W rodzinie pamięci EEPROM AT24CXX występuje 5 typów pamięci różniących się
pojemnością i liczbą linii adresowych A2, A1, A0.
16.1. Charakterystyka pamięci EEPROM AT24CXX
Rys.36. Konfiguracja wyprowadzeń pamięci EEPROM AT24C01/02/04/08/16[9]
Funkcje wyprowadzeń pamięci EEPROM AT24C01/02/04/08/16 [9]
Linia Funkcja
wyprowadzenia Linii
A0-A2 Wejścia adresowe
SCL Wejście zegarowe
SDA Linia danych
WP Zabezpieczenie przed
nieuprawnionym zapisem
SCL (serial clock)  wejście zegara taktującego transmisję danych. Maksymalna
częstotliwość zegara taktującego nie może przekroczyć 400kHz.
SDA (serial data)  dwukierunkowa linia transmisji danych (linia jest typu  otwarty
kolektor i może być łączona z dowolną liczbą innych linii tego samego typu).
Linie adresowe (A0, A1, A2)  wejściowe linie adresowe podłączane do masy lub zasilania,
konfigurują sprzętowy adres pamięci na magistrali. Liczba linii adresowych determinuje
liczbę urządzeń jednakowego typu (np. pamięci EEPROM), które mogą zostać podłączone do
magistrali I2C mikrokontrolera.
Liczba pamięci jednego typu możliwa do podłączenia w systemie
Typ pamięci Linie adresowe Liczba pamięci
jednego typu w
systemie
AT24C01 A2, A1, A0 8
AT24C02 A2, A1, A0 8
AT24C04 A2, A1 4
AT24C08 A2 2
AT24C16 Brak 1
WP (write protect)  zabezpieczenie przed zapisem  gdy linia WP jest w stanie wysokim,
nie można przeprowadzić operacji zapisu ani odczytu pamięci, gdy linia WP jest w stanie
niskim, operacje zapisu i odczytu są dozwolone.
Pamięci AT24CXX są stronicowane, przy czym liczba stron i liczba bajtów na stronę są różne
dla poszczególnych typów pamięci, co implikuje zróżnicowanie długości słowa adresowego.
Liczba wyprowadzeń A2, A1, A0, których konfiguracja sprzętowa jest częścią słowa
adresowego również zależy od typu pamięci. W efekcie konstrukcja słów adresowych jest
nieco odmienna dla każdego typu pamięci.
Układ danych w pamięciach AT24CXX
Typ pamięci Liczba stron Liczba bajtów Długość słowa
pamięci na stronę adresowego w
bitach
AT24C01 16 8 7
AT24C02 32 8 8
AT24C04 32 16 9
AT24C08 64 16 10
AT24C16 128 16 11
Adres pamięci EEPROM AT24CXX (rys.37) składa się z:
- adresu rodziny urządzeń podłączonych na magistrali I2C (pamięci EEPROM
posługują się adresem rodzinnym 4-ro bitowym o wartości1010),
- pola adresowego o zmiennej długości pozwalającego rozróżnić urządzenia tego
samego typu podłączone do magistrali (pole to zawiera nie więcej niż 3 bity o
wartościach zgodnych z podłączeniem linii adresowych A2, A1, A0  do masy lub
zasilania),
- adresu strony pamięci o długości między 7 a 11 bitów w zależości od typu pamięci.
W szczególności:
o W pamięciach o pojemności 1k i 2k adres sprzętowy składa się z bitów A2, A1, A0
o W pamięci o pojemności 4k adres sprzętowy składa się z bitów A2, A1, linia A0 nie
jest podłączona, a odpowiadający jej bit jest najstarszym bitem adresu strony
pamięci.
o W pamięci o pojemności 8k adres sprzętowy składa się z bitu A2. Linie A1 i A0 nie
są podłączone, a odpowiadające im bity są wykorzystane jako najstarsze bity
adresu strony pamięci.
o W pamięci o pojemności 16k nie ma adresu sprzętowego. Linie A2, A1 i A0 nie są
podłączone, a odpowiadające im bity są wykorzystane jako najstarsze bity adresu
strony pamięci.
Bit 7 6 5 4 3 2 1 0
AT24C01/02 1 0 1 0 A2 A1 A0 R/W
AT24C04 1 0 1 0 A2 A1 P0 R/W
AT24C08 1 0 1 0 A2 P1 P0 R/W
AT24C16 1 0 1 0 P2 P1 P0 R/W
Rys.37. Adresowanie pamięci serii AT24CXX  adres urządzenia [9]
19.2. Transfer po magistrali I2C
W pamięci AT24CXX można zapisywać lub odczytywać pojedyncze słowa danych lub strony
danych zgodne z zasadami stronicowania danego typu pamięci.
Zapis słowa danych  porządek transmisji (rys.38):
! Sekwencja startu,
! 1-sze słowo adresowe - adres urządzenia (rys.37),
Potwierdzenie od pamięci EEPROM,
! 2-gie słowo adresowe - adres komórki pamięci EEPROM,
Potwierdzenie od pamięci EEPROM,
!8-mio bitowa dana dla komórki pamięci EEPROM,
Potwierdzenie od pamięci EEPROM,
! Sekwencja stopu.
Potwierdzenie polega na ustawieniu przez pamięć EEPROM linii SDA w stan logicznego 0 i
jest wysyłane pod warunkiem prawidłowego zaadresowania pamięci przez mikrokontroler.
Jeśli adres nie jest prawidłowy pamięć EEPROM wraca w stan  czuwania .
Wewnętrzny cykl zapisu pamięci EEPROM trwa około 10ms, w tym czasie wejścia
pamięci są nieaktywne.
Testowanie zakończenia procesu zapisu wewnetrznego  porządek transmisji:
! Sekwencja startu,
! 1-sze słowo adresowe - adres urządzenia (rys.37),
odczyt linii SDA, pamięć EEPROM odpowie bitem logicznego 0 po zakończeniu procesu
zapisu.
Rys.38. Zapis słowa danych po magistrali I2C [9]
Zapis strony danych
W pamięciach EEPROM o pojemności 1k, 2k strona liczy 8 słów, natomiast w pamięciach
EEPROM o pojemności 4k, 8k, 16k strona liczy 16 słów.
Początek transmisji (rys.39) jest taki sam, jak podczas zapisu jednego baju, ale po zapisaniu
1-go bajtu danych mikrokontroler może jeszcze wysłać nie więcej niż 7 kolejnych bajtów
danych w przypadku pamięci EEPROM 1k/2k lub nie więcej niż 15 bajtów danych w
przypadku pamięci EEPROM 4k/8k/16k. Każdy bajt danych jest potwierdzany przez
EEPROM bitem potwierdzenia (logiczne 0). Mikrokontroler musi zakończyć transmisję
wysyłając sekwencję stopu.
W trakcie zapisu strony inkrementacji sprzętowej podlegają:
- 3 najmłodsze bity adresu danych w pamięciach EEPROM o pojemności 1k i 2k
- 4 najmłodsze bity adresu danych w pamięciach EEPROM o pojemności
4k/8k/16k.
Gdy inkrementowany w ten sposób adres strony dojdzie do końca strony, wówczas kolejny
bajt danych zostanie zapisany na początku tej samej strony.
Rys.39. Zapis strony danych po magistrali I2C [9]
Odczyt słowa danych z podaniem adresu odczytu
Odczyt słowa danych (rys.40) musi być poprzedzony:
- sekwencją startu,
- zapisem adresu urządzenia (najmłodszy bit adresu jest logicznym 0, co oznacza
operację zapisu)
- zapisem adresu danej.
Po otrzymaniu potwierdzenia od pamięci EEPROM mikrokontroler generuje:
- kolejną sekwencję startu
- ponownie podaje adres urządzenia, tym razem jednak najmłodszy bit jest
logiczną 1 (wybór operacji odczytu).
Pamięć EEPROM potwierdza odbiór adresu urządzenia, po czym następuje odbiór słowa
danych od pamięci EEPROM. Mikrokontroler nie potwierdza odbioru słowa danych, lecz
generuje sekwencję stopu.
Rys 40. Odczyt słowa danych z podaniem adresu odczytu [9]
Odczyt słowa danych spod ustalonego adresu
Jeśli adres komórki pamięci został ustawiony w toku poprzedniej łączności, to w kolejno
realizowanym odczycie (rys. 41) można pominąć proces wyboru adresu komórki pamięci. W
takim przypadku odczyt rozpoczyna się sekwencją startu, następnie przesłaniem adresu
urządzenia z najmłodszym bitem ustawionym w stan logicznej 1, po czym następuje odbiór
słowa danych. Odbiór danej nie jest potwierdzany przez mikrokontroler, który zamiast
potwierdzenia generuje sekwencję stopu.
Rys. 41.Odczyt słowa danych spod ustalonego adresu [9]
Odczyt dowolnej liczby słów danych
Początek transmisji (rys.42) jest taki sam, jak podczas odczytu jednego słowa danych. Po
otrzymaniu słowa danych od pamięci mikrokontroler potwierdza logicznym 0. Dopóki
mikrokontroler potwierdza odbiór, pamięć EEPROM wysyła kolejne słowa inkrementując
sprzętowo adres pobierania danych.
Po osiągnięciu adresu ostatniej komórki pamięci adres zeruje się i kolejny odczyt następuje
spod adresu zerowego pamięci EEPROM.
Zakończenie odczytu następuje, jeśli mikrokontroler nie potwierdzi odbioru kolejnego słowa,
lecz wygeneruje sekwencję stopu.
Rys.42. Odczyt dowolnej liczby słów danych [9]
20. Magistrala 1-wire
Magistrala 1-wire składa się z pojedynczej linii. Na magistrali 1-wire jedno urządzenie
MASTER nadzoruje pracę jednego lub wielu urządzeń SLAVE. Urządzenie MASTER oraz
wszystkie SLAVE są podłączone do magistrali wyjściem tranzystora  otwarty dren lub
bramką trójstanową. Takie podłączenie umożliwia  zwolnienie linii przez każde z urządzeń
po zakończeniu transmisji. Magistrala 1-wire wymaga zewnętrznego rezystora
podciągającego do zasilania o wartości około 5k&!. Stanem bezczynnym magistrali jest stan
wysoki.
Układ DS18B20 jest zawsze urządzeniem typu SLAVE. Wszystkie komendy i dane są
nadawane do DS18B20 po magistrali począwszy od najmłodszego bitu.
Rys.43. Impuls resetu i obecności [8]
Sekwencja inicjalizacji
Komunikacja po magistrali 1-wire rozpoczyna się od sekwencji inicjalizacji, która składa się z
impulsu resetu (rys.43) nadawanego przez urządzenie MASTER (mikrokontroler)
potwierdzanego impulsem obecności przez urządzenie SLAVE (termometr DS18B20). W
czasie impulsu resetu MASTER zwiera magistralę do masy na czas co najmniej 480 s. Po
tym czasie MASTER zwalnia magistralę, która wskutek podciągnięcia rezystorem 5k
przechodzi w stan wysoki. DS18B20 dokonuje detekcji zbocza narastającego, czeka 15  60
s, po czym nadaje impuls obecności zwierając magistralę do masy na czas 60  240 s.
Ramka nadawcza
Nadawanie stanów logicznych 0 i 1 przez urządzenie MASTER odbywa się w ramkach
czasowych (rys.44). Każda ramka czasowa trwa co najmniej 60 s, z odstępem między
ramkami co najmniej 1s. Ramki obu stanów logicznych rozpoczynają się od zbocza
opadającego.
Nadanie stanu logicznej 1 polega na zwarciu magistrali do zera przez urządzenie MASTER
na czas 15 s, a następnie zwolnieniu magistrali. Po zwolnieniu rezystor podciągający 5k
przywróci magistrali stan logicznej 1.
Nadanie stanu logicznego 0 polega na zwarciu magistrali do zera przez urządzenie MASTER
i podtrzymanie tego stanu przez czas co najmniej 60 s.
DS18B20 próbkuje magistralę w czasie od 15 do 60 s licząc od zbocza opadającego
rozpoczynającego stan logiczny. Jeśli odczytany stan jest wysoki DS18B20 rozpoznaje
logiczną 1, jeśli odczytany stan jest niski DS18B20 rozpoznaje logiczne0.
Ramka odbiorcza
Urządzenie SLAVE może transmitować dane po magistrali tylko w ramkach odbiorczych
zainicjowanych przez urządzenie MASTER (rys.45). MASTER powinien wygenerować
ramkę odbiorczą po nadaniu rozkazu Konwersji temperatury ($44) lub innych rozkazów
obsługiwanych przez termometr DS18B20.
Rys.44. Stany logiczne na magistrali w trybie TX urządzenia MASTER [8]
Każda ramka czasowa trwa co najmniej 60 s, z odstępem między ramkami co najmniej 1s.
Ramki obu stanów logicznych rozpoczynają się od stanu niskiego wygenerowanego przez
urządzenie MASTER i trwającego co najmniej 1 s. Po tym czasie MASTER zwalnia
magistralę, a DS18B20 rozpoczyna transmisję logicznej 1 pozostawiając magistralę w stanie
wysokim lub logicznego 0 zwierając ją do masy. Stan logiczny transmitowany przez
DS18B20 jest utrzymywany na magistrali przez 15 s, po czym urządzenie SLAVE zwalnia
magistralę, która wraca na stan wysoki za sprawą rezystora podciągającego 5k. MASTER
musi sprawdzić stan magistrali przed upływem 15 s od rozpoczęcia ramki odbiorczej.
Rys.45. Stany logiczne magistrali w trybie RX urządzenia MASTER [8]
21. Termometr cyfrowy DS18B20 na magistrali 1-wire
Układ DS18B20 zawiera czujnik temperatury i przetwornik A/C o rozdzielczości 12-sto
bitowej, co odpowiada pomiarowi temperatury z krokiem 0.0625C. Pomiar temperatury i
konwersja analogowo-cyfrowa rozpoczyna się na rozkaz $44 wydany przez urządzenie
MASTER (mikrokontroler) i trwa około 750ms. Wynik pomiaru jest zapamiętywany w 2-
bajtowym rejestrze. Jeśli bezpośrednio po wydaniu rozkazu $44 MASTER będzie generował
ramki odbiorcze, to DS18B20 będzie odpowiadał logicznym 0 dopóki trwa konwersja, a po
jej zakończeniu odpowie logiczną 1 (opcja ta jest dostępna pod warunkiem zapewnienia
zewnętrznego zasilania).
Pomiar temperatury jest kalibrowany w stopniach Celsjusza i zapamiętywany w postaci liczby
16-sto bitowej ze znakiem w kodzie uzupełnienia do dwóch. Bit S umieszczony na starszym
bajcie jest znakiem liczby: 0 oznacza liczbę dodatnią, 1 liczbę ujemną.
Rejestr temperatury (LS byte)
Bit 7 6 5 4 3 2 1 0
Nazwa 23 22 21 20 2-1 2-2 2-3 2-4
Rejestr temperatury (MS byte)
Bit 15 14 13 12 11 10 9 8
Nazwa S S S S S 26 25 24
Format zapisu temperatury [8]
TEMPERATURA FORMAT ZAPISU (BINARNY) FORMAT ZAPISU (HEX)
0000 0101 0101 0000 $0550
+85.0C
0000 0001 1001 0001 $0191
+25.0625C
0000 0000 0010 1010 $002A
+10.125C
0000 0000 0000 1000 $0008
+0.5C
0000 0000 0000 0000 $0000
 0C
1111 1111 1111 1000 $FFF8
 0.5C
1111 1111 0101 1110 $FF5E
 10.125C
1111 1110 0110 1111 $FE6F
 25.0625C
Zasilanie układu DS18B20
Układ DS18B20 może być zasilany z zewnętrznego zródła podłączonego do pinu VDD lub
bezpośrednio z linii 1-wire. W trybie zasilania przez magistralę 1-wire moc jest dostarczana
do układu w stanie wysokim magistrali. W tym samym czasie jest ładowany kondensator,
który służy jako zródło energii w stanie niskim magistrali. W trybie zasilania przez magistralę
1-wire linia VDD musi być zwarta do masy.
Kod urządzenia
Każde urządzenie na magistrali 1-wire posiada unikalny 64-bitowy zapisany w pamięci stałej
ROM. Kod urządzenia składa się z 8-mio bitowego kodu rodziny urządzeń ($10 dla rodziny
DS18B20) zajmującego najmłodsze 8 bitów, 48-bitowego unikalnego numeru seryjnego
urządzenia oraz 8-mio bitowego kodu CRC obliczonego z poprzedzających 56 bitów.
Pamięć urządzenia DS18B20
Pamięć układu DS18B20 składa się z 8-miu rejestrów, temperatura jest zapisywana na dwóch
pierwszych rejestrach: 0-wy rejestr zawiera młodszy bajt pomiaru temperatury, 1-szy rejestr
zawiera starszy bajt pomiaru temperatury. Podczas transmisji na magistrali dane są nadawane
począwszy od najmłodszego bitu 0-wego słowa (bajtu).
Przykładowa sesja komunikacyjna po magistrali w celu pomiaru temperatury
TRYB DANE KOMENTARZ
URZDZENIA (NAMAODSZY BIT
MASTER JAKO 1-SZY)
TX Impuls resetu Master generuje impuls resetu
RX Impuls obecności DS18B20 odpowiada impulsem obecności
TX $CC Master wydaje rozkaz pominięcia odczytu
pamięci ROM
TX $44 Master wydaje rozkaz pomiaru temperatury
TX Podciągnięcie linii Master utrzymuje magistralę w stanie wysokim
w czasie pomiaru
TX Impuls resetu Master generuje impuls resetu
RX Impuls obecności DS18B20 odpowiada impulsem obecności
TX $CC Master wydaje rozkaz pominięcia odczytu
pamięci ROM
TX $BE Master wydaje rozkaz odczytu pamięci RAM
urządzenia
RX Odczyt 2-ch słów Master odczytuje wynik pomiaru temperatury


Wyszukiwarka

Podobne podstrony:
02 16PF PODSTAWY TEORETYCZNE I ANALIZA WYNIKÓW
Walidacja metod analitycznych Cz I Podstawy teoretyczne
01 Podstawy teoretyczne
Bazy Danych Podstawy Teoretyczne
Podstawy teoretyczne Gotowanie i wędzenie produktów mięsnych
Podstawy teoretyczne środek masy momenty bezwładności(1)
I SIECI PODSTAWY TEORETYCZNE
PODSTAWY TEORETYCZNE PROCESU WYMIANY CZYNNIKA ROBOCZEGO
Terapia energotonowa – podstawy teoretyczne i zastosowanie w wybranych schorzeniach

więcej podobnych podstron