Bogusław Wiśniewski - Poznańskie Warsztaty Telekomunikacyjne

Transkrypt

Bogusław Wiśniewski - Poznańskie Warsztaty Telekomunikacyjne
Bogusław Wiśniewski
Barbara Szecówka-Wiśniewska
Jacek Ostrowski
Akademia Górniczo-Hutnicza w Krakowie
Al. Mickiewicza 30
30-059 Kraków
[email protected]
2006
Poznańskie Warsztaty Telekomunikacyjne
Poznań 7 - 8 grudnia 2006
TESTOWANIE APLIKACJI Z MIKROKONTROLERAMI
Streszczenie: W referacie dokonano klasyfikacji
mikrokontrolerów, ze szczególnym uwzględnieniem
miejsca lokacji pamięci kodu i sposobów dostępu.
Przedstawiono wbudowane środki wspomagające i
rozwiązania
systemów
przerwań.
Porównano
charakterystyczne
aplikacje
systemów
uruchomieniowych. Na końcu omówiono trendy
rozwojowe mikrokontrolerów.
1.
OGÓLNA KLASYFIKACJA
MIKROKONTROLERÓW
Kiedy na początku lat 80-tych, w kilku czołowych
firmach,
na
bazie
produkowanych
już
mikroprocesorów
(µP)
powstawały
pierwsze
mikrokontrolery jednoukładowe, ich twórcy nie
spodziewali się, że w przyszłości stanowić będą one
większość aplikacji w układach programowalnych. O
ile pierwsze mikrokontrolery (µC), nazywane też
niekiedy mikrosterownikami (µS), były rozwiązaniami
bardzo do siebie zbliżonymi (lista instrukcji,
architektura, przestrzeń adresowa, wyposażenie) - to
ich obecny rozwój doprowadził do wyodrębnienia się
różnych klas, wynikających z obszaru zastosowań.
Także w poszczególnych klasach, µC mogą różnić się
architekturą, koncepcją listy rozkazów, czy
szczegółowymi rozwiązaniami wbudowanych układów
peryferyjnych. W szczególności możemy dokonać
następujących podziałów:
I. Według „pamięci programu”
a. wyłącznie zewnętrzna- stała bądź RAM na
etapie uruchomień (np. W65C816- Western
Digital, µPD78XXXX- NEC, M68HC16Motorola/Freescale, MCF5XXX- Freescale),
b. wyłącznie wewnętrzna (TLC5870, TMP470Toshiba, LPT210X- Philips, MAXQ-
Dallas Semiconductor, XC164- Infinenon,
ATMEGA- Atmel, PIC10, ’12, ’14, ‘16 Microchip, 68HC08- Freescale). Są to
przeważnie różne rodzaje pamięci stałej, ale
niekoniecznie np. w PIC18C601- Microchipobszar kodu jest obsadzony pamięcią RAM,
c. rozwiązania mieszane (H8/300- Hitachi, ST9Thomson, 8051 i pochodne- Intel/Atmel,
68HC12- Freescale).
d. typy określone nazwą ROM-less odnoszą się „z
definicji” do punktu ‘a’, lecz i w punkcie ‘b’
wspomniany PIC18C601 jest tak klasyfikowany.
II. Według struktury magistrali (rys.1.):
a. struktura von Neumanna (np. CR16 – National
Semiconductor, ST9 – Thomson, MAXQ –
Dallas Semiconductor i większość µC). Odpowiada to
zwykle jednolitej przestrzeni adresowej.
b. struktura Harvard (np. MSP430 – Texas
Instruments, PIC16, ’18 – Microchip, Z8 - Zilog)
Należy zauważyć, iż wielu producentów
nadużywa określenia Harvard. Obowiązuje ono
tylko wtedy, gdy:
- we wnętrzu µC są oddzielne magistrale:
• z pamięci kodu do dekodera instrukcji
• z pamięci danych do jednostki (jednostek)
przetwarzania
- µC nie korzysta z pamięci zewnętrznych.
Nie ma natomiast rozwiązania, w którym
zdecydowano by się na dwie oddzielne
magistrale zewnętrzne (liczba linii) - w tych µC,
które dysponują magistralą jest ona generalnie
multipleksowana (adres/dane).
c. struktura pseudoharvard (MCF5XXXX- Freescale).
Jest
to
rozwiązanie
przyjęte
z
µP
rys.1. Organizacja przestrzeni adresowych mikrokontrolerów a) typ von Neumana b) typ Harvard c) typ pseudohravard
„stacjonarnych”, w tym przypadku z układu 68040/60.
Jeżeli pamięci podręczne są wystarczająco obszerne, to
przeważają trafienia dla kodu i danych. Przypadki
równoczesnego chybienia i związany z tym konflikt
wspólnej magistrali pojawia się sporadycznie.
III. Według zakresu częstotliwości zegara:
a. statyczne (praktycznie wszystkie µC)
b. dynamiczne (np. 8050/52 – Intel)
Układy statyczne, gdzie zegar może zostać zatrzymany,
zdecydowanie przeważają. Wynika to z możliwości
zmniejszenia poboru mocy, przy zwolnieniu zegara. Z
tych samych względów praktycznie wszystkie µC
posiadają jeden lub więcej stopni obniżania poboru
prądu zasilania (wyłączenie CPU, interfejsów
wbudowanych, pamięci RAM przy istniejącym
niskonapięciowym
podtrzymaniu
zewnętrznym).
Budzenie µC zwykle jest już wbudowane przez
podtrzymywany zegar czasu rzeczywistego, bądź układ
przerwania periodycznego.
Rozwiązania wyższej klasy dysponują
układem nadzoru zegara (clock monitor) zgłaszającym
stan wyjątkowy bądź zerującym µC, gdy częstotliwość
zegara spadnie poniżej pewnej określonej wartości .
Należy podkreślić, że działania te na nic się nie zdadzą,
gdy zegar się „zatrzyma”. Stąd np. w 68HCS12
(Freescale) w tej sytuacji załączany jest awaryjnie
zegar wewnętrzny.
2.
WBUDOWANE ŚRODKI
WSPOMAGAJĄCE
Zanim powstanie ostateczna wersja aplikacji, sprzęt
współpracujący z µC i oprogramowanie są wielokrotnie
zmieniane i ulepszane. Dlatego też producent każdej
rodziny µC oferuje szereg, odpowiednio przystosowanych
wersji danego układu. Możemy je sklasyfikować
następująco:
a. układy uruchomieniowe,
b. układy docelowe odwracalne,
c. układy docelowe nieodwracalne.
Zbiorcze zestawienie z zachowaniem porządku
chronologicznego przedstawiono na rys.2. Obecnie
większość firm koncentruje się, oprócz wersji
programowanych na etapie produkcji (zamawiamy wzór
„maski”) - na układach wyposażonych w pamięć flash
(plus ewentualnie E2PROM). Układy te dysponują
różnymi standardami do:
- ładowania/ weryfikacji i odczytu kodu,
- przejścia
do
wykonywania
wprowadzonego kodu
- nadzoru uruchamianego programu.
Generalnie są to różne typy portów szeregowych typu:
- SCI (UART)
- SPI
- Microwire
- ICSP/ICD
- OnCE
- JTAG
- BDM
- USB
Funkcją realizowaną zawsze jest zapis i weryfikacja kodu.
Odczyt, jeżeli jest uwzględniony, zależy od dosłania
wpisanego wcześniej kodu zabezpieczającego.
rys.2. Etapy projektu aplikacji (na rysunkach wyłącznie pamięć programu)
Alternatywą,
przy
braku
znajomości
kodu
bezpieczeństwa, jest skasowanie całej pamięci flash i
ponowny zapis. Zabezpieczenia są konieczne, gdyż
często przy produkcji małoseryjnej pozostajemy przy
µC z pamięcią flash jako ostatecznej wersji.
I jeszcze kilka uwag :
- Jeśli zainstalowany w µC (ROM) tzw. bootloader
nie dysponuje funkcją kasowania, to procedurę
kasującą można załadować do obszaru RAM (nie jest
chroniony) i zarządzić jej wykonanie.
- Programowane bity bezpieczeństwa występują też
w układach z pamięcią EPROM,
zabezpieczając
przed jakimkolwiek odczytem. Ich usunięcie jest
połączone z wymazaniem całej zawartości pamięci
EPROM.
- Pewna część pamięci zapisywanej przy pomocy
bootloadera może być też typu E2PROM. Wynika
to z ich właściwości długoterminowych. Otóż dla
pamięci flash podaje się typowo 10 lat i 100 000
zaprogramowań, zaś dla pamięci E2PROM
odpowiednio 40 lat i 1 000 000 cykli (cykle
sprawdzane, czas prognozowany).
- Czasem, gdy bootloader obsługuje dwa porty:
JTAG i BDM (względnie UART), wtedy poprzez
JTAG kontrolowane są „piny”, a drugi z portów
zapewnia dostęp do pamięci i ewentualny nadzór
pracy.
- Układy z EPROM programowane są zwykle po
przeniesieniu do oddzielnych programatorów.
Funkcje dostępu do pamięci „otwierają się” poprzez
podniesienie wyróżnionego pinu do napięcia
wyższego niż 5V.
Producenci µC stosują różne strategie, których
ostatecznym celem jest maksymalizacja zysku. I tak
polecenia bootloadera mogą być utajnione i producent
µC sam lub poprzez firmy współpracujące,
monopolizuje płatne środki uruchamiania. Informację o
poleceniach bootloadera mogą zawierać: dedykowany
µC w swojej pamięci ROM lub specjalnie
zaprojektowany układ - umieszczone w adapterze
pomiędzy µC a kontrolerem nadrzędnym. Drugi biegun
to producenci ujawniający jeśli nie całość poleceń,
(część służy do testów produkcyjnych) to przynajmniej
zbiór niezbędny do posłużenia się portem łączącym µC
z komputerem. Informacje takie są konieczne dla
niezależnych
firm
producentów
środków
wspomagania. Środki te może opracować także
producent µC i udostępniać darmowo (pełne lub w
wersji demo) co w ostatecznym rozrachunku wydaje
się strategią najrozsądniejszą.
3.
ROZWIĄZANIA SYSTEMÓW
PRZERWAŃ
W systemach przerwań możemy dokonać dwóch
klasyfikacji:
a. adres
procedury
obsługi
określony
bezpośrednio lub pośrednio,
b. system przerwań jednopoziomowy lub
wielopoziomowy.
Przed szczegółowym omówieniem należy przedstawić
funkcjonalny podział przestrzeni adresowej. Dla
uproszczenia wybierzemy strukturę von Neumanna
(przestrzeń jednolita) - rys.3.
rys.3. Przykładowe organizacje przestrzeni adresowych
Należy wspomnieć, że w wielu µC po podaniu
sygnału reset, następuje wybór konfiguracji przestrzeni
adresowej, związanej z trybem pracy. Zwykle jest do
dyspozycji:
- tryb ładujący (nadrzędny)
- tryb wykonawczy (program wewnętrzny).
Jeśli magistrala jest wyprowadzona na zewnątrz to można
jeszcze wybrać (zamiast ładującego):
- tryb pobierania zewnętrznego.
We wszystkich µC kontakt z wbudowanymi
układami peryferyjnymi (porty równoległe i szeregowe,
układy czasowe, przetworniki a/c itp.) realizuje się
poprzez blok rejestrów specjalnego przeznaczenia (SFRSpecial Function Register). Są to lokacje:
- sterujące (do zapisu),
- statusowe (do odczytu),
- danych (operacje w zależności od potrzeb).
Technika ta umożliwia stworzenie wielu wersji tego
samego µC (prawie sto – 68HC08 Freescale), różniących
się wyposażeniem i pojemnością pamięci (oraz oczywiście
ilością pinów obudowy). Jeśli nawet zastosujemy układ
bardziej rozbudowany niż potrzeba, to należy pamiętać, że
wszystkie niezaprogramowane interfejsy sprzętowe
pozostaną w stanie uśpienia - przypisane im linie
pozostają zwykłymi liniami we-wy (po sygnale reset
wszystkie linie ustawiają się jako wejścia).
Część przestrzeni oznaczona na rys.3. jako tablica
przerwań, może zawierać początki procedur obsługi
przerwań/wyjątków ulokowanych pod sztywnymi
adresami (głównie prostsze µC). Klasyczna tablica
przerwań zawiera natomiast zgrupowane liniowo adresy
procedur obsługi (metoda pośrednia). Stosowany w
mikroprocesorach cykl akceptacji przerwania nie
występuje, ponieważ µC
zna każdorazowo źródło
przerwania.
Obowiązuje powszechna zasada, zgodnie z którą po
wyzerowaniu
wszystkie
przerwania
zostają
- generalna (rejestr statusowy CPU),
- indywidualne (rejestry sterujące konkretnych
interfejsów).
Jeśli nawet dane przerwanie (od interfejsu lub
zewnętrzne) zablokujemy, to zawsze stosując technikę
podglądu możemy je śledzić, ponieważ kopia żądania
znajduje się w odnośnym rejestrze statusowym. Stos w
µC jest zawsze wewnętrzny. Zwykle przy
przerwaniach/ wyjątkach składane są automatycznie
rejestry robocze CPU. Czasem ze względu na szybkość
reakcji i przy operowaniu przez CPU praktycznie tylko
na pamięci danych, na stos zapisuje się wyłącznie
rejestr PC. Przerwania typu NMI spotykane się rzadko.
W przygniatającej większości przypadków, obsługa
przerwań jest jednopoziomowa. Po skończeniu
bieżącej obsługi, µC wybiera najważniejsze i procedura
jego obsługi zostaje doprowadzona do końca itd. Nie
dotyczy to przerwania programowego (oznaczenia
TRAP, SWI), które jako rozkaz musi być wykonane –
więc dochodzi do zagnieżdżenia.
4.
zablokowane. Występują blokady:
Spośród
wielu
wykonanych
stanowisk
uruchomieniowych dla µC zostaną mówione trzy,
będące przykładem różnego podejścia do zagadnienia.
Dąży się, aby stanowisko stanowiło w miarę
możliwości, samodzielny system o otwartej strukturze
zainstalowany w kasecie, gdzie można umieszczać
komponenty wynikające z obsługiwanej aplikacji.
System host jest dodawany w sytuacji, gdy µC ma
niewielkie możliwości (lista instrukcji, przestrzeń
adresowa) i nie jest w stanie przejąć funkcji
edytora/asemblera i debuggera. Przykłady rozwiązań
przedstawiono na rys.4. Prosty µC (8039) - rys.4a.,
pracuje w konfiguracji z wyniesioną pamięcią kodu
(RAM). System host, po asemblacji umieszcza tam
program. Ze względu na niewielkie możliwości µC
(brak rozkazu pułapki adresowej czy pracy krokowej)
karta interfejsu musiała zostać wyposażona w
sprzętowy układ pułapki adresowej. Uaktywnia on
podmianę pamięci kodu na nakładkę (pamięć
EPROM),
gdzie
znajduje
się
procedura
komunikacyjna.
PRZYKŁADY
ZREALIZOWANYCH
SYSTEMÓW URUCHOMIENIOWYCH
rys.4. Przykłady laboratoryjnych systemów uruchomieniowych z mikrokontrolerami
a) z mikroprocesorem nadrzędnym i komunikacją przez pamięć
b) autosystem
c) z mikroprocesorem nadrzędnym i komunikacją przez port diagnostyczny
Do systemu host dociera cały kontekst tj. stan
rejestrów i pamięci wewnętrznej µC. Po transmisji µC
czeka na transmisję zwrotną. W trakcie oczekiwania
host modyfikuje kod w EPROM. Po zwrotnym
odesłaniu stanu następuje automatyczne przełączenie
na pamięć RAM i działanie uruchamianego programu
aplikacyjnego jest kontynuowane.
Konfiguracja przedstawiona na rys.4b. dotyczy
µC 68HC12. Jego możliwości odnośnie „samoobsługi”
są co najmniej wystarczające. Dedykowane
oprogramowanie zostało celowo umieszczone w
zewnętrznej pamięci EPROM - wewnętrzny flash jest
w całości do dyspozycji procedur aplikacyjnych.
Problemem była natomiast instalacja sprzętowej
konsoli obserwacyjno – sterującej, dodanej w związku
przeznaczenie stanowiska do dydaktyki. Układ
68HC12 nie posiada możliwości odłączania się od
magistrali, a praca magistrali jest synchroniczna.
Problemu nie dałoby się rozwiązać gdyby nie fakt, iż
68HC12 jest w pełni statyczny. Zastosowano więc
technikę „zamrażania” zegara. Taki zabieg umożliwia
obserwację stanu szyn adres/dane i sprzętową pracę
krokową. Zatrzymanie zegara w połączeniu ze
sprzętowym odłączaniem µC od magistrali, umożliwia
konsoli bezpośredni dostęp do pamięci.
Układ 68HC908 nie wyprowadza na zewnątrz
magistrali. W trybie monitor aktywny jest firmowy
program komunikacyjny, posiłkujący się dedykowaną
linią (transmisja naprzemienna z potwierdzającym
echem). System host opiera się na układzie 68HC12
(kontakt przez port SCI). Oprogramowanie firmowe
obsługuje polecenia: zapisu/odczytu pamięci, odczytu
wskaźnika stosu i przejścia do wykonywania
wprowadzonego programu. System host zawiera
oprogramowanie edytor/asembler i debugger. Logika
BREAK w µC umożliwia zakładanie pułapek i pracę
krokową (pułapka krocząca). Układ ‘HC908 posiada
wewnętrzne rejestry skojarzone z komparatorem adresu
oraz lokację w tabeli adresów początkowych
(wyjątki/przerwania). Pułapka sprzętowa używana jest
do testowania procedur wprowadzonych do pamięci
flash. Nadzorowany µC posiada też rozkaz pułapki
adresowej (SWI). Używanie go do zakładania
pułapek/pracy krokowej jest też możliwe. Jednakże
każdy krok to ponowne przeprogramowanie pamięci
flash, a ilość takich operacji jest limitowana.
laboratorium
w
Praktyka
wyposażania
samodzielne systemy jest kontynuowana. Aktualnie w
opracowaniu są stanowiska z µC: PIC18 (Microchip) i
MCF52230 (Freescale).
5.
PODSUMOWANIE
Analizując rozwój mikrokontrolerów od pierwszych
konstrukcji do chwili obecnej, można zauważyć
następujące tendencje:
z
klasycznych
- przenikanie
rozwiązań
mikroprocesorów (kolejka instrukcji – 68HC12
Motorola/Freescale, pamięć podręczna –
MCF52XX Freescale, jądro ARM – LP210X
Philips, ADµC702X – Analog Devices)
- włączenie funkcji typowych dla procesorów
sygnałowych (68HC16 Freescale– tylko filtracja,
DSPIC30/33 Microchip, DSP56852 Freescale
oraz C166SV2 Infineon – pełny zakres)
- instalację wydajnych jąder rodem z procesorów
„stacjonarnych” (np. tzw. jądro V1 rodem z
M68040 dla rodziny 68HC9S08)
- łączenie µC z logiką programowaną
- podwyższenie częstotliwości zegarowych, przy
zachowaniu dolnej -„DC”
- instalacja bardziej pojemnych pamięci flash
Powyższe tendencje wynikają z faktu, że układy µC
jeszcze przez dłuższy czas nie będą miały alternatywy w
obszarze swoich zastosowań. Równolegle z rozwojem µC
następuje rozbudowa wbudowanej diagnostyki (ROM
firmware), łącz komunikacyjnych, osprzętu jak np.
emulatory oraz oprogramowania host komputerów.
Należy pamiętać, że im prostszy µC tym bardziej
kłopotliwe jest tworzenie narzędzi wspomagających
proces uruchamiania.
6. LITERATURA
B.
Szecówka-Wiśniewska,
[1]
B.
Wiśniewski,
J. Ostrowski, Organizacja i problemy techniczne
laboratorium
systemów
mikroprocesorowych
na
przykładzie LSM w Akademii Górniczo- Hutniczej,
Elektronika 1.2003
[2]A. Krysiak, Mikrokontrolery rodziny AVR, Typoscript,
Wrocław 2000
[3] http://home.agh.edu.pl/~ltmip/
[4] www.freescale.com
[5] www.microchip.com
[6] www.atmel.com
[7] www.hitachi.com
[8] www.toshiba.com
[9] www.st.com
[10] www.wdc.com
[11] www.intel.com
[12] www.nxp.com
[13]www.dalsemi.com