Systemy Wbudowane

Transkrypt

Systemy Wbudowane
Systemy Wbudowane - Laboratorium
Informatyka III rok studia dzienne
Ćwiczenie 1a:
Pamięci w systemach mikroprocesorowych
Cel ćwiczenia
Celem ćwiczenia jest zapoznanie się z podstawowymi cechami charakterystycznymi,
działaniem i wykorzystaniem różnych rodzajów pamięci w systemach
mikroprocesorowych.
•
•
•
•
•
Wymagane wiadomości
Budowa mikrokontrolera BasicStamp2
Zestaw edukacyjny StampInClass – budowa i obsługa
Język PBASIC.
Rodzaje i podstawowe własności pamięci w systemach mikroprocesorowych.
Magistrala I2C. Warstwa fizyczna i protokół wymiany informacji.
Wykorzystywany sprzęt
Komputer PC z oprogramowaniem do obsługi zestawu BasicStamp.
Zestaw edukacyjny StampInClass firmy Parallax Inc. wraz z niezbędnym wyposażeniem
dodatkowym.
Literatura:
www.parallaxinc.com
www.stampsinclass.com
http://www.atmel.com/dyn/resources/prod_documents/doc0180.pdf
http://www.semiconductors.philips.com/acrobat/datasheets/PCF8583_5.pdf
Mielczarek W.: Szeregowe interfejsy cyfrowe. Wyd. Helion 1993
Baranowski J., Kalinowski B., Nosal Z.: Układy elektroniczne cz. III Układy i systemy
cyfrowe. WNT Warszawa 1994.
1
Wprowadzenie
W systemach mikroprocesorowych wykorzystuje się różne rodzaje pamięci. Generalnie podział
przeprowadzany jest na pamięci o dostępie swobodnym (RAM) i pamięci stałe (ROM).
Pamięci o dostępie swobodnym charakteryzują się tym, ze użytkownik może w dowolnym
momencie odczytywać lub modyfikować zawartość takiej pamięci. Ujemna strona takich
pamięci jest fakt, że tracą one swoją zawartość wraz z zanikiem napięcia zasilającego. Istnieją 2
rodzaje pamięci typu RAM:
- statyczne cechujące się tym, ze raz wpisana informacja jest przechowywana do momentu jej
zmiany lub zaniku napięcia zasilania
- dynamiczne cechujące się tym, ze wpisana informacja zanika (dość szybko) z upływem
czasu i z celu zapobiegnięcia temu zjawisku wymagane jest odświeżanie jej zawartości.
Najważniejszą cecho pamięci typu ROM jest jej nieulotność.
Do niedawna były to pamięci których zawartość była programowana na etapie produkcji ROM,
lub wymagała specjalistycznego urządzenia (programatora) do zaprogramowania jej zawartości
(PROM,EPROM).
W chwili obecnej sytuacja uległa znaczącym zmianom. Konstruktorom udało się wyeliminować
większość niedogodności związanych z programowaniem tego typu pamięci zachowując jej
najważniejszą cechę – nieulotność.
Innym podziałem jaki można wprowadzić to sposób dostępu do informacji zapisanej w
pamięci. Podział jaki tu można wprowadzić to pamięci o dostępie równoległym –
jednocześnie mamy dostęp do całego bajtu (lub innej jednostki), oraz pamięci o dostępie
szeregowym – w danej chwili mamy dostęp do pojedynczego bitu. Skompletowanie całej
informacji wymaga wielokrotnego odwoływania się do pamięci poprzez system
nadrzędny.
Z powodu ograniczeń możliwości zestawu Basic Stamp w trakcie ćwiczenia
zaprezentowane zostaną wybrane rodzaje i cechy pamięci stosowanych w systemach
mikroprocesorowych.
2
1. Statyczna pamięć równoległa
Zapoznanie się z pamięciami rozpoczniemy od zbadania układu statycznej pamięci o
organizacji 1024x4 bity typu 2114. Układ wyprowadzeń pamięci typu 2114 przedstawia
rysunek
Linie A0-A9 służą do podawania adresu komórki z której/ do
której chcemy skorzystać.
Linie I/O0-IO3 tworzą 4-biową magistral danych.
Linie CE i WE sterują kierunkiem przepływu informacji.
Aktywny (niski stan) na linii CE przy nieaktywnym stanie na
linii WE oznacza, że odbywa się odczyt z pamięci. Jeśli oba
sygnały CE i WE są aktywne to oznacza że dane są do pamięci
zapisywane.
Wyprowadzenia VCC i GND służą do podłączenia napięcia
zasilającego i masy.
Ponieważ BS2 dysponuje 20 wyprowadzeniami, pamięć będzie podłączona tak, ze
możliwy będzie dostęp do 256 lokacji
Przed przystąpieniem do jakichkolwiek prac odłączyć zasilanie od płytki testowej
!!
Podłączenie zasilania może nastąpić po sprawdzeniu poprawności montażu przez
prowadzącego zajęcia.
Przystępując do badania pamięci 2114 należy za pomocą dostępnych przewodów
przygotować następujący układ połączeń:
a) połączyć wyprowadzenie GND układu 2114 z gniazdami VSS płytki testowej.
b) linie I/O1-IO4 połączyć odpowiednio z liniami P0-P3
c) linie adresowe A0-A7 podłączyć odpowiednio do linii P8-P15
d) linie adresowe A8 i A9 połączyć z gniazdem Vss
e) sygnał CE połączyć do linii P6
f) sygnał WE połączyć do linii P7
g) Linie zasilania VCC połączyć do gniazd oznaczonych Vdd.
Poniżej zamieszczony jest program realizujący funkcje zapisania i odczytania
pojedynczego bajtu. Pamięć po włączeniu zasilania ma zawartość nieokreśloną.
'{$STAMP BS2}
dane VAR Nib
' szyna danych dla pamieci 2114
adres VAR Byte ' linie adresu
'pamiec 2114 podalczona
' D0-D3 podlaczone do P0-P3 (nibble A)
' A0-A7 do P8-P15
' WE - P7
' CS - P6
cs CON 6
we CON 7
'ustawiamy kierunek lini
start:
3
DIRH =255
DIR6=1
DIR7=1
DIRA=$f
' bedziemy sterowac liniami adresu
' CS jako wyjscie
' WE jako wyjscie
'linie danych do zapisu
HIGH we
' linie sterujace w stan nieakywny
HIGH cs
'ustalamy wartości danych i adresu
adres=$55
dane=$a
'zapis do pamieci
OUTH =adres 'wystawiamy adres na szyne adresowa
OUTA =dane 'wystawiamy dane na szyne danych
'wypelnienie pamieci
LOW we 'aktywujemy linie sterujace
LOW cs '
DEBUG "zapis: adres = ",HEX adres ," wartosc = ",HEX dane,CR
HIGH cs 'dezaktywujemy linie sterujace.
HIGH we
'odczyt zapisanej danej
dane=0 'zerujemy zeby nie bylo ze zostalo w programie
OUTA=$f ' ustawiamy wyjscia w stan nieaktywny
DIRA=0 'zmieniamy kierunek szyny danych
OUTH=adres ' ustawiamy ponownie adres
LOW cs 'aktywujemy strob do odczytu
dane=INA 'odczytujemy zaadresowany bajt
DEBUG "odczyt: adres = ",HEX adres," wartosc = ",HEX dane,CR
HIGH cs ' i dezaktywujemy linie sterujace
END
ZADANIE 1
Przebudować program tak, aby zapis i odczyt pamięci realizowane były niezależnymi
procedurami wywoływanymi za pomocą instrukcji GOSUB.
Przy pomocy tak przygotowanych procedur przygotować 2 programy:
Program A realizujący wypełnienie dostępnych komórek pamięci wartościami $5 , $A
Program B wyświetlający zawartość całej dostępnej pamięci.
Uruchomić program A wypełniając pamięć zadanymi wartościami.
Uruchomić program B sprawdzając poprawność pracy programu A.
Odłączyć na chwile zasilanie układu i podłączyć ponownie.
Uruchomić program B sprawdzając zawartość pamięci po chwilowym zaniku zasilania.
Zanotować ogólne spostrzeżenia z obserwacji.
2. Szeregowa pamięć statyczna RAM
Układ PCF 8583 jest przykładem statycznej pamięci o RAM o pojemności 256 bajtów i
szeregowym dostępie do danych. Dostęp szeregowy jest realizowany za pośrednictwem
magistrali I2C.
Obok funkcji pamięci RAM układ może jeszcze pełnić inne funkcje. Nie jest to jednak
przedmiotem obecnych rozważań.
Więcej informacji na temat magistrali I2C można znaleźć w książce: Mielczarek W.:
Szeregowe interfejsy cyfrowe. Wyd. Helion 1993
4
Opis wyprowadzeń:
OSCI, OCSO – wyprowadzenie niewykorzystywane w
ćwiczeniu.
A0 – wejście ustawiania adresu urządzenia dla
magistrali I2C
Vss – ujemny biegun zasilania.
SDA – dwukierunkowa szeregowa linia danych
SCL – wejście impulsów zegara
INT – wyprowadzenie nie wykorzystywane w ćwiczeniu
Vdd dodatni biegun zasilania.
Do przeprowadzenia badania układu pamięci należy zmontować odpowiedni układ.
Przed przystąpieniem do czynności montażowych odłączyć napięcie zasilania od płytki
testowej!
Za pomocą dostępnych przewodów zrealizować następujące połączenia:
a) wyprowadzenie Vss połączyć ze złączem Vss
b) wyprowadzenie A0 podłączyć do gniazda Vdd
c) Wyprowadzenie SDA podłączyć do P1
d) Wyprowadzenie SCL podłączyć do P0
e) Wyprowadzenie Vdd podłączyć do gniazda Vdd
f) Rezystorem R1 o wartości 10kohm (brązowy, czarny, pomarańczowy) połączyć
wyprowadzenie SDA z gniazdem Vdd
g) Rezystorem R2 o wartości 10kohm (brązowy, czarny, pomarańczowy) połączyć
wyprowadzenie SCL z gniazdem Vdd
Przed ponownym podłączeniem zasilania przedstawić układ do sprawdzenia
prowadzącemu zajęcia.
W przykładowym programie zawarte są gotowe procedury realizujące wymianę danych
z układem PCF 8583 za pomocą protokołu magistrali I2C.
' pcf8583.bs2
' procedury obslugi pamieci PCF8583
' dla BasicStamp 2
' adres urzadzenia I2C $A2,$A3
'{$STAMP BS2}
SDA_PIN
SCL_PIN
SDA_OUT
SCL_OUT
SDA_IN
SDA_DIR
CON
CON
VAR
VAR
VAR
VAR
1 'linia SDA podlaczona do pin1
0 'linia SCL podlaczona do pin0
OUT1
OUT0
IN1
DIR1
OUT CON 1
IN CON 0
o_byte VAR Byte
i_byte VAR Byte
ack_bit VAR Bit
n VAR Byte
b VAR Bit
' ZAPIS
'
'
'
'
'
bajt przeznaczony do wyslania
bajt odczytywany
bit potwierdzenia
zm sterujaca petla
bit
pcf
5
GOSUB i2c_start
' warunek startu na magistrale
o_byte=$a2
GOSUB i2c_out_byte
GOSUB i2c_nack
' adres urządzenia na magistrale
o_byte=$55
GOSUB i2c_out_byte
GOSUB i2c_nack
' ustawiamy adres komorki
o_byte=$aa
GOSUB i2c_out_byte
GOSUB i2c_nack
' dana $aa do komorki 55
GOSUB i2c_stop
'warunek stopu
'ODCZYT pcf
GOSUB i2c_start
o_byte=$a2
GOSUB i2c_out_byte
GOSUB i2c_nack
'
' adres urządzenia
o_byte=$55
GOSUB i2c_out_byte
GOSUB i2c_nack
' ustawiamy adres komorki
' do odczytu
GOSUB i2c_start
'
'
'
'
o_byte=$a3
GOSUB i2c_out_byte
GOSUB i2c_nack
GOSUB i2c_get_byte
GOSUB i2c_stop
przy odczycie protokol wymaga jeszcze
raz warunku startu
i czytamy z urzadzenia o adresie o 1
wiekszym wartosc bajtu z
' w zmiennej I-byte mamy odczytana wartosc
'i konczymy transmisje warunkiem stopu
DEBUG "Wynik = ",HEX i_byte,CR
STOP
'
***************************************************************************
'
Procedury obslugi magistrali i2c
'
***************************************************************************
i2c_start
' wysyla na magistrale I2C warunek startu
HIGH SDA_PIN
HIGH SCL_PIN
DEBUG "START"
DEBUG $0d
LOW SDA_PIN
'przejscie na linii SDA ze stanu wysokiego w stan
niski podczas wysokiego stanu na SCL
LOW SCL_PIN
RETURN
i2c_stop
' wysyla na magistrale I2C warunek stopu
LOW SDA_PIN
HIGH SCL_PIN
PAUSE 10
HIGH SDA_PIN
'przejscie na lini SDA ze stanu nisiego w wysoki
gdzy SCL w stanie wysokim
DEBUG "STOP"
DEBUG $0d
6
RETURN
i2c_nack
'oczekiwanie na potwierdzenie odebrania bajtu przez SLAVE
SDA_DIR=IN
' zmiana kierunku lini SDA na wejscie aby odebrac
bit potwierdzenia
ack_bit=1
HIGH SCL_PIN
PAUSE 100
ack_bit=SDA_IN
DEBUG "A"
DEBUG DEC ack_bit
DEBUG $0d
LOW SCL_PIN
PAUSE 50
SDA_DIR=OUT
' output
RETURN
i2c_ack_in
'wystawienie potwierdzenia przy odbieraniu danych przez mastera
LOW SDA_PIN
HIGH SCL_PIN
DEBUG "A0"
DEBUG $0d
PAUSE 100
LOW SCL_PIN
PAUSE 100
RETURN
i2c_get_byte
' procedura zwaraca wartosc odebranego bajtu przez i2c do zmiennej i_byte
SDA_DIR=IN
'SDA jako wejscie
i_byte=0
FOR n=0 TO 7
PAUSE 200
HIGH SCL_PIN
PAUSE 100
i_byte=(i_byte << 1) | SDA_IN
DEBUG DEC SDA_IN
LOW SCL_PIN
NEXT
SDA_DIR=OUT
RETURN
'output
i2c_out_byte
' procedura wyslania bajtu przekazanego przez zmienna o_byte na magistrale
I2C
LOW SDA_PIN
FOR n=0 TO 7
b= (o_byte >> 7) & 1
IF (b=1) THEN out_one
SDA_DIR=OUT
DEBUG "0"
_clk
HIGH SCL_PIN
7
PAUSE 100
LOW SCL_PIN
PAUSE 100
o_byte=o_byte << 1
NEXT
SDA_DIR=IN
RETURN
out_one
SDA_DIR=IN
DEBUG "I"
GOTO _clk
ZADANIE 2
Na podstawie przykładu przygotować program C który będzie realizował wyłącznie
funkcje odczytu określonej lokalizacji pamięci PCF8583. Zadbać o to aby program
przykładowy dokonywał zapisu do tej samej lokalizacji pamięci.
Załadować do BS2 program przykładowy, a następnie program C.
Odłączyć na około 1sek zasilanie układu. Po załączeniu powinien automatycznie
wykonać się program odczytujący zawartość wybranej komórki. Jeśli tak nie jest
wymusić odpowiednia akcje za pomocą przycisku reset.
Manipulując czasem odłączenia zasilania określić po jakim czasie informacja zawarta w
komórce pamięci ulegnie zniszczeniu. (czas ten nie powinien być dłuższy niż 30 sek).
Wynik zanotować.
ZADANIE 3
Na podstawie dokumentacji do układu PCF8583 przygotować procedurę blokowego
zapisu i blokowego odczytu całej lub części pamięci układu.
Znając orientacyjny czas zaniku pojedynczej komórki powtórzyć test określający czas
utraty danych przy braku zasilania sprawdzając tym razem zawartość całej pamięci.
Wynik testu zanotować.
3. Szeregowa pamięć stała EEPROM typu 24c02
Pamięć 24c02 jest szeregową pamięcią typu EEPPROM o pojemności 256 bajtów.
Podobnie jak PCF8583 do współpracy z systemem mikroprocesorowym wykorzystuje
interfejs I2C. Rozkład wyprowadzeń przedstawia rysunek.
Funkcje wyprowadzeń są następujące:
A0-A2 – adres urządzenia na magistrali I2C.
GND – ujemny biegun zasilania
SDA – szeregowa dwukierunkowa linia danych
SCL – szeregowa linia zegara
Vcc – dodatni biegun zasilania.
WP – zabezpieczenie przed zapisem. Jeśli na tej linii
podany jest stan wysoki nie ma możliwości zmiany
zawartości komórki pamięci w układzie. Jeśli jest stan
niski można zmieniać zawartość pamięci.
Korzystając z faktu, że układ wyposażony jest w interfejs I2C dołączymy go do już
zbudowanego obwodu z pamięcią PCF8583.
Przed rozpoczęciem zmian w układzie należy odłączyć zasilanie !
8
Umieszczamy układ 24c02 w podobny sposób jak PCF8583 w gnieździe testowym.
Przy pomocy przewodów realizujemy następujące połączenia:
a) Wyprowadzenie GND podłączamy do Vss
b) Wyprowadzenie Vcc podłączamy do Vdd
c) Wejścia A0-A2 łączymy ze sobą i podłączamy do wyprowadzenia GND – ustalamy w
ten sposób adres urządzenia na A0. Szczegółowe informacje na ten temat można
znaleźć w odpowiednim pliku pdf.
d) Wejście WP łączymy z wyprowadzeniem Vss lub GND
e) Linie SDA podłączamy do linii SDA układu PCF8583
f) Linie SCL podłączamy do linii SCL układu PCF8583
Przed ponownym podłączeniem zasilania prowadzący powinien sprawdzić poprawność
połączeń.
Aby dostosować procedury wymiany informacji z pamięcią wystarczy w przykładach
zamienić adres urządzenia I2C z $a2 na $a0 i Z $a3 na $a1. I już mamy gotowe
procedury obsługi pamięci 24c02.
Należy mieć na uwadze, że procedura zapisu wartości do pamięci EEPROM jest dość
czasochłonna i po jej zainicjowaniu pamięć jest niedostępna dla użytkownika.
Drugim ważnym ograniczeniem jest maksymalna ilość bajtów które można zapiać w
trybie blokowym. Dla układu 24c02 wynosi ona 8 bajtów.
ZADANIE 4
Dokonać modyfikacji procedur obsługi pamięci PCF8583 tak aby poprawnie
współpracowały z pamięcią 24c02.
Wykonać test ulotności informacji. Czas wyłączenia zasilania ograniczyć do kilku minut.
Określić doświadczalnie czas trwania operacji zapisu. Wystarczy w tym celu ustalić jaka
jest minimalna przerwa niezbędna do przeprowadzenia 2 po sobie następujących
operacji zapisu nie wykonywanych w trybie przesłania blokowego.
Wyniki zanotować.
Wnioski
Na podstawie przeprowadzonych obserwacji porównać badane układy pamięci pod
względem szybkości i sposobu dostępu i innych uznanych za stosowne cech.
9

Podobne dokumenty