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