http://www.easy-soft.tsnet.pl/
Programowanie w układzie („in-circuit”)
Artykuł zawiera garść porad na temat programowania mikrokontrolerów w układzie. Przykłady aplikacji
opisane w artykule wykorzystywać będą mikrokontrolery AVR, AT89S, 89C51RD2 oraz programator
opisywany na tej stronie.
ICP lub ISP, czyli programowanie mikrokontrolera w układzie.
Co oznacza skrót ISP lub ICP? Ten pierwszy pochodzi od słów In circuit Serial Programming, ten
drugi jest bardziej bezpośredni i pochodzi od In Circuit Programming. Oba oznaczają to samo. Jest to
po prostu możliwość programowania mikrokontrolera w płytce, bez wylutowywania go, czy
wyjmowania z podstawki. Jest to bardzo wygodne rozwiązanie, zwłaszcza dla elektronika - amatora,
które umożliwia mu uruchomienie urządzenia czy wykonanie zmian w programie bez „dewastowania”
całego układu. Nie do pominięcia jest również fakt, że niektóre mikrokontrolery (np. z serii HC firmy
MOTOROLA czy ATMega firmy ATMEL) producent wyposaża w mechanizmy sprzętowych pułapek
oraz możliwość pracy krokowej, umożliwiając w ten sposób tanie uruchamianie układu krok po kroku,
bez użycia kosztownego emulatora sprzętowego a następnie zapis gotowej, uruchomionej aplikacji do
pamięci programu. Wróćmy jednak do tematu artykułu.
Aby programowanie mikrokontrolera w układzie było możliwe, projektant układu (aplikacji mikrokontro-
lera) musi komponując otoczenie układu, spełnić pewne podstawowe warunki. Po pierwsze musi
pamiętać, że bardzo często linie służące do zapisu pamięci FLASH są wykorzystywane również przez
układy peryferyjne, również czasami jako dwukierunkowe. Na przykład UART (jednokierunkowo,
doprowadzenia RxD i TxD mikrokontrolera) czy SPI (jednokierunkowo tylko, jeśli mikrokontroler
pracuje wyłącznie w jednym z trybów, jako master lub jako slave; doprowadzenia MISO, MOSI, SCK
oraz ewentualnie SS). Programowanie mikrokontrolera nie może też zakłócać pracy dołączonych
układów. Po drugie należy spełnić takie warunki dopasowania sygnałów programujących, aby
(zwłaszcza przy programowaniu mikrokontrolerów przez SPI!) sygnał SCK miał odpowiednio krótkie
czasy narostu i opadania zboczy. Najlepiej aby nie przekraczały one 70..100ns. Niedopuszczalne jest
również, aby sygnały programujące były zniekształcone, aby - zwłaszcza na zboczach sygnałów -
występowały objawy wzbudzania się układu.
Mikrokontrolery firmy ATMEL z serii AVR i AT89S.
Zapis pamięci przez interfejs SPI.
Programowanie mikrokontrolerów AT89S oraz AVR odbywa się przy aktywnym sygnale reset.
Mikrokontrolery AVR wymagają, aby reset był logicznym „0”, AT89S aby reset był „1”. Zapis pamięci
FLASH i EEPROM odbywa się przez interfejs szeregowy SPI. Programator przejmuje rolę układu
master transmisji, natomiast programowania mikrokontroler pracuje jako slave. W takiej sytuacji to
programator steruje i zarządza transmisją, można powiedzieć, że mikrokontroler jest sterowanym,
biernym układem.
Zazwyczaj, jeśli jest taka konieczność, w budowanych przez siebie aplikacjach wykorzystuję sygnał
reset do sterowania pracą bufora separującego linie interfejsu od programatora. Bufor rozdzielający
układy i programator dobrze jest wykonać z wykorzystaniem układów cyfrowych z serii TTL-LS, HCT
lub innych. Mogą to być zwykłe bramki NAND, bramki trójstanowe lub multipleksery. W ten sposób
można dodatkowo wpływać na kształt sygnału programującego, niwelując wpływ długich przewodów
powodujących „rozciągnięcie” zboczy sygnałów
. Oczywiście dopuszczalne jest również użycie kluczy
analogowych, jednak układy te raczej nie kształtują sygnału wejściowego. Dociera on do układu
programowanego taki, jaki był na wejściu układu klucza.
Na rysunku 1 umieściłem przykład opisywanego wyżej rozwiązania. Układ multipleksera 74LS157
pełni rolę bufora separującego programator od układów sterowanych przez mikrokontroler z
wykorzystaniem SPI. Oczywiście układ zbudować można w dowolny, inny sposób zwłaszcza, że wadą
przedstawionego układu jest jednokierunkowość linii. Mogą one pracować wyłącznie jako wejścia lub
wyjścia, zgodnie z wymogami standardu SPI. Kierunkiem przepływu informacji steruje sygnał reset
wybierający, zależnie od swojej fazy, wejścia A lub B multipleksera (w stanie spoczynkowym pracują
wejścia A, w stanie programowania wejścia B).
*
Używając programatora ICP opisywanego na tej stronie z kablem o długości około 30 cm nie zaobserwowałem negatywnego wpływu
długości taśmy łączącej programator z układem na pracę programatora.
J.Bogusz: „Programowanie AT89S8252 w układzie” strona 1 z 5
http://www.easy-soft.tsnet.pl/
Rys.1. Układ multipleksera jako separator programatora i układów z interfejsem SPI.
Umieszczone na rysunku 1 rozwiązanie dotyczy mikrokontrolera z rodziny AVR. Analogicznie można
zbudować układ przeznaczony dla AT89S pamiętając jednak, że układ ten wymaga sygnału reset w
przeciwnej fazie.
Na rysunku 2 umieściłem fragment schematu urządzenia, które zbudowano w oparciu o AT89S8252,
posiadające możliwość programowania mikrokontrolera w układzie. Układ U1 to właściwy
mikrokontroler. U3 to TL7705 produkowany przez firmę Texas Instruments, to tzw. resetter - układ,
którego zadaniem jest (w dużym uproszczeniu) wysłanie sygnału "reset" po załączeniu napięcia
zasilania. Inną odmianą tego układu jest TLC7705 ale uwaga: ma inaczej rozmieszczone
wyprowadzenia.
Rys.2. Przykład aplikacji AT89S8252 programowanego „in-circuit”
J.Bogusz: „Programowanie AT89S8252 w układzie” strona 2 z 5
http://www.easy-soft.tsnet.pl/
Programowanie układu AT89S8252 poprzez interfejs szeregowy wymaga aby sygnał "reset" miał
poziom wysoki. Jest to możliwe po podaniu na wejście /RIN (nóżka 2) układu TL7705 poziomu
niskiego. Ponieważ programator, którego używałem nie umożliwiał wyboru dowolnej fazy sygnału
reset dla programowanego mikrokontrolera wymuszając stan logiczny niski dla wszystkich
Rys 3. Buforowanie sygnałów MISO, MOSI i SCK.
programowanych układów, to niejako „na doczepkę”, musiałem używać bramki inwertora (na
schemacie U4A/74HCT14) albo tranzystora do odwrócenia polaryzacji reset ze złącza programatora.
Wejście bramki podłączone jest poprzez rezystor 390 Ohm do masy zasilania w celu wymuszenia
J.Bogusz: „Programowanie AT89S8252 w układzie” strona 3 z 5
http://www.easy-soft.tsnet.pl/
poziomu wysokiego na wyjściu bramki, gdy jej wejście nie jest podłączone do żadnego innego
potencjału. Dalsze sygnały podane są bezpośrednio na wyprowadzenia MISO, MOSI i SCK. Układ
mikrokontrolera jest programowany gdy napięcie zasilania jest włączone. W związku z tym, dla
uproszczenia programatora, napięcie +5V potrzebne do jego zasilania pobierane jest z
programowanego układu. Tyle słowem komentarza.
Na rysunku 3 umieściłem fragment schematu urządzenia praktycznie pokazujący, w jaki sposób
można sobie poradzić, gdy MISO, MOSI i SCK muszą być użyte w zupełnie innym jeszcze celu.
Oczywiście to propozycja, pewna odmiana aplikacji z rysunku 1. Jak łatwo zauważyć, sygnały MISO,
MOSI i SCK pod nazwami CL0, CL1 i M.STILL są wykorzystywane również do sterowania silnikiem
krokowym (złącze G7). Sygnał reset (RST) z TL7705 doprowadzany jest - w odwrotnej fazie niż
wymaga tego AT89S8252 - do bufora U9 (74HCT541), poprzez który wyprowadzane są sygnały
sterujące na zewnątrz, między innymi MISO, MOSI i SCK pracujące jako porty wyjściowe. Pojawienie
się stanu niskiego sygnału RST powoduje wprowadzenie wyjść HCT541 w stan wysokiej impedancji
tak, że nic nie przedostaje się na zewnątrz. Nic, co mogłoby zakłócić pracę sterowanych urządzeń.
Oczywiście można zbudować taki sam układ w zupełnie inny sposób, na przykład wykorzystując
wspomniane wcześniej klucze analogowe.
Poniżej, na rysunku 4, jeszcze jedno rozwiązanie przeznaczone dla AT90S8515,czyli mikrokontrolera
z rodziny AVR. Tutaj - inaczej niż w przypadku AT89 - nie jest potrzebny układ resettera. Znajduje się
on bowiem wewnątrz struktury układu. Wystarczającym dla wejścia RESET mikrokontrolera jest
podanie +zasilania poprzez rezystor o wartości 10..100k. Oczywiście mam zaufanie do producenta,
jednak mimo wszystko do wejścia RESET mikrokontrolera podłączyłem kondensator elektrolityczny w
celu uzyskania dodatkowego opóźnienia przy załączeniu napięcia zasilania. Równolegle z rezystorem
R1 połączyłem diodę D1, katodą do + zasilania. Ma ona na celu rozładowanie pojemności
kondensatora elektrolitycznego po wyłączeniu zasilania.
Rys.4. Przykład aplikacji AT90S8515 programowanego w układzie.
J.Bogusz: „Programowanie AT89S8252 w układzie” strona 4 z 5
http://www.easy-soft.tsnet.pl/
Mikrokontrolery 89C51RD2 i podobne.
Zapis pamięci przez interfejs UART.
Mikrokontrolery RD2 i podobne programowane są z wykorzystaniem interfejsu UART. Przejście w tryb
programowania wymuszane jest przez podanie stałego poziomu logicznego „1” na wyprowadzenie
PSEN podczas startu mikrokontrolera po załączeniu zasilania czy też ustąpieniu sygnału reset. W
jednej ze swoich aplikacji wykorzystuję do zapisu programu w pamięci FLASH wbudowany w płytkę
driver UART, MAX202. Wszystko, co w takiej sytuacji jest potrzebne, to kabel łączący urządzenie z
komputerem PC oraz aplikacja mikrokontrolera zaprojektowana w taki sposób, że przełączenie zworki
umożliwiało podanie logicznej „1” na PSEN.
Cały ciężar programowania układu spada na oprogramowanie komputera PC. Należy tu nadmienić, że
najbardziej popularne na polskim rynku są układy z serii RD2 produkcji jednej z trzech firm:
nieistniejącej już TEMIC (kupiona przez ATMEL), PHILIPS oraz ATMEL. Oprogramowanie dla
układów TEMIC oraz ATMEL jest obecnie wspólne. Program to freeware, który można ściągnąć ze
strony producenta. Nosi on nazwę ATMEL – FLIP. Oprogramowanie PHILIPS, również darmowe i do
pobrania ze strony WWW producenta, nosi nazwę WinISP. Niestety, mimo niemalże identycznych
nazw, mikrokontrolery różnią się między sobą i w związku z tym programów nie da się używać
zamiennie.
Po uruchomieniu programu, jeśli już podano logiczną „1” na wyprowadzenie PSEN oraz załączono
(restartowano) mikrokontroler, należy z menu wybrać typ używanego a następnie przejść do menu
połączenia i dokonać synchronizacji z programowanym układem. Układ nie zsynchronizowany nie
pozwoli się zapisać! Używając rezonatora 22,1184MHz można zapisywać układ 89C51RD2 z
prędkością aż 115200 bps.
Fot.1. Zrzut ekranu programu ATMEL- FLIP (wersja 1.8.8). Wybór programowanego układu. Obok
symbolu układu znajduje się symbol kabla, zbliżony wyglądem do wtyku USB. To jest właśnie
menu połączenia. Symbol czerwonej książki, to symbol zawartości odczytywanego z dysku lub
zapisywanego na dysku bufora w pamięci RAM.
Jacek Bogusz
jacek.bogusz@easy-soft.tsnet.pl
J.Bogusz: „Programowanie AT89S8252 w układzie” strona 5 z 5