23
16. Szeregowy interfejs SPI Szeregowy interfejs SPI (Serial Peripherial Interface) sluży do dwukierunkowej (full-duplex), synchronicznej transmisji danych pomiędzy mikrokontrolerem, a zewnętrznymi ukladami 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, sklada się z dwóch linii synchronicznie przesylających dane w przeciwnych kierunkach oraz linii z sygnalem taktującym synchronizującym transfer danych. Transfer danych przez interfejs SPI odbywa się w ukladzie master-slave. Jeżeli w systemie znajduje się więcej niż 1 mikrokontroler, to tylko jeden z nich w danej chwili pelni rolę urządzenia master. Sposób polączenia ukladu nadrzędnego (master) z ukladem podrzędnym (slave) przedstawiono na rysunku. Rys.24. Transmisja danych po liniach magistrali SPI [1] Interfejs SPI sklada się z dwóch rejestrów przesuwnych polączonych w licznik pierścieniowy i generatora sygnalu taktującego (rys.24). Generator sygnalu taktującego znajduje się zawsze w ukladzie 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 ukladu slave oraz wyjściem dla master. Sygnal taktujący jest zawsze generowany przez uklad nadrzędny (master) bez względu na to czy dane są przez niego nadawane czy też odbierane. Sygnal taktujący jest nadawany jedynie podczas transmisji. Transmisje na liniach magistrali SPI są zawsze dwukierunkowe. Nadawaniu danych na linii MOSI przez uklad master towarzyszy zawsze nadawanie danych na linii MISO przez uklad 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.

Magistrale - podstawy teoretyczne

  • Upload
    xxxx900

  • View
    243

  • Download
    1

Embed Size (px)

DESCRIPTION

Magistrale w mikrokontrolerach.

Citation preview

Page 1: 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.

Page 2: Magistrale  - podstawy teoretyczne

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:

Page 3: Magistrale  - podstawy teoretyczne

− 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 (narastające)

Odbiór (opadające) 1

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.

Page 4: Magistrale  - podstawy teoretyczne

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

Page 5: Magistrale  - podstawy teoretyczne

Wybór częstotliwości taktującej SCK [1]

SPR1 SPR0 SCK

0 0 fOSC/4

0 1 fOSC/16

1 0 fOSC/64

1 1 fOSC/128

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

Page 6: Magistrale  - podstawy teoretyczne

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 źró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 liniami zegara DS1305)

Linie 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.

Page 7: Magistrale  - podstawy teoretyczne

Rejestry zegara czasu rzeczywistego DS1305 [7]

Adres szesnastkowy

Odczyt Zapis

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Zakres (BCD)

$00 $80 0 dziesiątki sekund sekundy 00-59

$01 $81 0 dziesiątki minut minuty 00-59

P 12

A

01-12 + P/A $02 $82 0

24 10

dziesiątki godzin

godziny

00-23

$03 $83 0 0 0 0 dni tygodnia 1-7

$04 $84 0 0 dziesiątki dni

miesiąca dni miesiąca 1-31

$05 $85 0 0 Dziesiątki miesięcy

Miesiące 01-12

$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* 12

A* 01-

12+P/A $09 $89 M

24 10

10 godziny

godzina alarmu

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 12

A 01-

12+P/A $0D $8D M

24 10

10 godziny

godzina alarmu

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 – $1F

$92 –$9F

Zarezerwowane -

$20 – $7F

$A0 –$FF

96 bajtów pamięci RAM 00-FF

* M – bit maski, P – po południu, A – przed południem

Page 8: Magistrale  - podstawy teoretyczne

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

Page 9: Magistrale  - podstawy teoretyczne

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.

Page 10: Magistrale  - podstawy teoretyczne

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 2µs. Impulsy na magistrali SPI (np. impuls taktujący) nie mogą być krótsze niż 0.5µs. 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.

Page 11: Magistrale  - podstawy teoretyczne

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<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<SPR0)

Page 12: Magistrale  - podstawy teoretyczne

18. Magistrala I 2C 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.

Page 13: Magistrale  - podstawy teoretyczne

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.

Page 14: Magistrale  - podstawy teoretyczne

Rys.35. Sekwencja potwierdzenia odbioru znaku[9]

19. Pamięć EEPROM AT24CXX na magistrali I 2C 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 wyprowadzenia

Funkcja 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

Page 15: Magistrale  - podstawy teoretyczne

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 pamięci

Liczba bajtów na stronę

Długość słowa 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.

Page 16: Magistrale  - podstawy teoretyczne

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 I 2C 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.

Page 17: Magistrale  - podstawy teoretyczne

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.

Page 18: Magistrale  - podstawy teoretyczne

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.

Page 19: Magistrale  - podstawy teoretyczne

Rys.42. Odczyt dowolnej liczby słów danych [9]

Page 20: Magistrale  - podstawy teoretyczne

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 1µs. 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.

Page 21: Magistrale  - podstawy teoretyczne

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 1µs. 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]

Page 22: Magistrale  - podstawy teoretyczne

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.0625°C. 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)

+85.0°C 0000 0101 0101 0000 $0550

+25.0625°C 0000 0001 1001 0001 $0191

+10.125°C 0000 0000 0010 1010 $002A

+0.5°C 0000 0000 0000 1000 $0008

– 0°C 0000 0000 0000 0000 $0000

–0.5°C 1111 1111 1111 1000 $FFF8

–10.125°C 1111 1111 0101 1110 $FF5E

–25.0625°C 1111 1110 0110 1111 $FE6F

Zasilanie układu DS18B20 Układ DS18B20 może być zasilany z zewnętrznego źró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 źró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

Page 23: Magistrale  - podstawy teoretyczne

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 URZĄDZENIA

MASTER

DANE (NAMŁODSZY BIT

JAKO 1-SZY)

KOMENTARZ

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