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