Bootloader AVR cz.1,
[ Pobierz całość w formacie PDF ]
notatnik konstruktora
AVR (1)
Opis gotowego bootloadera
Konstruktorom i elektronikom zajmującym się systemami embedded
bardzo dobrze znane są zalety stosowania specjalnych programów
startowych, tzw. bootloaderów. Dzięki nim można w prosty sposób
zbudować mechanizm zdalnej aktualizacji oprogramowania, bez
konieczności podłączania programatora. W przeszłości pisaliśmy
w EP na temat bootloaderów przeznaczonych dla mikrokontrolerów
AVR. W związku z bardzo dużym zainteresowaniem tym
tematem oraz ogromną popularnością mikrokontrolerów ATmega,
zdecydowaliśmy się opisać ciekawe rozwiązania bootloaderów.
można zmontować w postaci tzw. pająka. Do
kompilacji programu zastosujemy program
ICCAVR, którego wersję demonstracyjną
można ściągnąć ze strony
craft.com
. Jest ona wystarczająca na potrzeby
tego artykułu. Program MegaLoad oraz pliki
bootloadera możemy pobrać ze strony auto-
ra, tj.
.
Koniguracja i kompilacja
bootloadera
Pierwszym krokiem jest wybór możli-
wości bootloadera, czyli czy wystarcza nam
tylko programowanie pamięci programu,
czy też potrzeba, aby mógł on również za-
programować wewnętrzną pamięć EEPROM
i bezpieczniki BLB (
Boot Lock Bits
). Funk-
cja programowania EEPROM wiąże się ze
zwiększeniem rozmiaru programu, a co za
tym idzie, innych ustawień bezpieczników
decydujących o wielkości pamięci poświę-
conej na bootloader, czyli sekcji BLS (z 256
na 512 słowa). W artykule będzie zaprezen-
towana opcja z możliwością programowania
pamięci Flash, EEPROM oraz bezpieczników
BLB, czyli wszystkiego, co oferuje program
MegaLoad.
Program bootloadera możemy skompi-
lować, gdy mamy zainstalowany kompilator
ICC, program MegaLoad oraz rozpakowany
W Internecie można znaleźć kilka dar-
mowych propozycji gotowego programu
do samoprogramowania mikrokontrolerów
AVR. Interesującą propozycją jest program
MegaLoad, który obsługuje prawie każdy mi-
krokontroler z rodziny ATmega. Dodatkowo,
jest on prosty w koniguracji. Kolejną jego
zaletą jest to, że program obsługi napisano
w C#.NET, co zapewnia jego względnie ła-
twą migrację pomiędzy różnymi systemami.
Drugą interesującą propozycją jest program
napisany przez inżynierów Atmela. Do jego
atutów można zaliczyć to, że bootloader jest
obsługiwany z poziomu AVR Studio. Na po-
czątku zajmiemy się MegaLoadem, gdyż jest
najbardziej uniwersalnym rozwiązaniem.
W kolejnej części cyklu opiszemy bootloader
zgodnym z notą aplikacyjną AVR109.
Zaczynamy
Program bootloadera komunikuje się
z komputerem za pomocą portu szeregowego
(istnieje również możliwość wykorzystania
interfejsu RS485). Na potrzeby tego artykułu
zbudowano prostą aplikację, której schemat
pokazano na
rys. 1
. Wykorzystano w niej
mikrokontroler ATmega32, a do konwersji
poziomów popularny MAX232. Dzięki temu
prostemu układowi można przetestować boo-
tloader.
Do uruchomienia będzie potrzebny do-
wolny programator procesorów AVR, np. Po-
nyProg, który jest prosty w budowie, a opro-
gramowanie i schemat można za darmo ścią-
gnąć ze strony
html
. Jedyne, co trzeba zakupić, to części;
nie trzeba nawet wykonywać płytki – układ
108
ELEKTRONIKA PRAKTYCZNA 11/2009
Samoprogramowanie
Samoprogramowanie AVR
rys. 3.
Po tych czynnościach można już skom-
pilować projekt, naciskając ikonkę
Project
Build
lub
F9
. Jeśli wszystko zostało wykona-
ne poprawnie, to kompilacja powinna zakoń-
czyć się sukcesem.
rys. 1.
Programowanie procesora
Czas najwyższy na to, żeby zaprogramo-
wać procesor. Zastosujemy do tego progra-
mator PonyProg, ale schemat postępowania
jest oczywiście taki sam dla każdego progra-
matora. Zaczynamy od ustawienia bezpiecz-
ników. Sposoby na wywoływanie bootloade-
ra są dwa: albo z programu aplikacyjnego,
albo podczas restartu procesora. W przykła-
dzie skorzystamy z drugiej opcji. W tym celu
należy ustawić odpowiednie bezpieczniki
BOOTSZx.
Ich kombinacja jest uzależniona
od typu procesora oraz od wielkości BSL,
jaką, potrzebujemy (kombinacje znajdziemy
w dokumentacji procesora) oraz jeśli chce-
my, by po resecie startował program bootlo-
adera, to ustawiamy bezpiecznik
BOOTRST
.
Dla przykładowego układu będziemy potrze-
bowali BSL o wielkości 512 słowa, co odpo-
wiada koniguracji BOOTsz1 = 1, BOOTSZ0
= 0. Ustawienia bezpieczników przedstawia
rys. 3
.
Po zaznaczeniu odpowiednich bez-
pieczników naciskamy przycisk
Write
, w ten
sposób zapisują się nasze ustawienia do
procesora. Teraz trzeba załadować program
bootloadera. Zaczynamy od otwarcia skom-
pilowanego wcześniej bootloadera, wybie-
ramy z menu
File–>Open Program (FLASH)
File...
i otwieramy plik
BootLoad.hex.
Musi-
my także wybrać typ mikrokontrolera, który
chcemy zaprogramować. Dokonujemy tego
w menu
Device,
a następnie programuje jego
pamięć Flash poprzez wybranie z menu
Command–>Write Program (FLASH)
. Pamięć
programu powinna zostać zaprogramowana,
a następnie zweryikowana. Na
rys. 4
przed-
stawiono programowanie procesora z przy-
kładu. Jeśli wszystko pójdzie bez przeszkód,
to przechodzimy do ostatniego i moim zda-
niem najprzyjemniejszego etapu, w którym
będziemy mogli zobaczyć efekt naszej pracy.
(ze strony ściągamy w postaci archiwum zip)
kod źródłowy bootloadera.
Po uruchomieniu
ICC, otwieramy projekt (wybieramy z menu
Project–>Open) BootLoad.prj.
Znajdziemy
go oczywiście w katalogu, do którego roz-
pakowaliśmy kod źródłowy
.
Po prawej stro-
nie otwartego okna ukazują się pliki, które
wchodzą w skład projektu; klikamy dwa razy
na plik
main.c
, co spowoduje otwarcie go do
edycji.
Teraz można rozpocząć konigurację. Na
początek w
MCU selection
ustawiamy dla
jakiego typu procesora ma być skompilowa-
ny bootloader. Robimy to poprzez usunięcie
znaku komentarza „
//”
przed odpowiednią
nazwą typu mikrokontrolera (w naszym
przypadku
#deine MEGATYPE 32).
Jed-
nocześnie należy pamiętać, aby dodać „//”
przed wszystkimi innymi nazwami typów,
gdyż inaczej przy kompilacji zostanie zgło-
szony błąd. W sekcji
MCU Frequency
należy
wpisać wartość częstotliwości oscylatora
w Hz, którego używa się do taktowania mi-
krokontrolera (np. dla kwarcu 8 MHz,
#de-
ine XTAL 8000000
). Teraz w sekcji
Bootload
on UART x
trzeba wybrać, z którego portu
szeregowego ma korzystać mikrokontroler
do komunikacji z komputerem. Jeśli proce-
sor ma tylko jeden port USART, to wybór
jest oczywisty:
#deine UART 0.
Tak też jest
w przypadku ATmegi32. Gdy mikrokontro-
ler ma więcej portów, wtedy można wybrać,
z którego ma korzystać program. Postępuje-
my tak samo jak wcześniej, kasując „
//”
przed
wybranym portem, a wstawiając „
//”
przed
pozostałymi. W kolejnej sekcji o nazwie
BaudRate
ustawia się prędkość transmisji
danych. Podaje się ją w bodach, czyli bitach/
sekundę (np.
#deine BAUDRATE 9600
).
Te-
raz w sekcji
EEPROM programming
zaznacza
się, czy bootloader ma mieć możliwość pro-
gramowania wewnętrznej pamięci EEPROM,
co jak już wcześniej wspomniałem, wiąże się
z większym zapotrzebowaniem na pamięć
programu.
W sekcji
LockBit programming
decyduje-
my, czy potrzebna jest nam możliwość pro-
gramowania bezpieczników.
Zamiast interfejsu RS232
MegaLoad
może używać do komunikacji RS485 half
duplex. Jeśli chcemy skorzystać z tej opcji,
to wyłączamy RS232 i konigurujemy sekcję
RS485.
Zostało jeszcze tylko otwarcie pliku
assembly.
s i wstawienie 1 przy nazwie mi-
krokontrolera, dla którego ma być skompilo-
wany bootloader (przy innych musi być 0!).
Po zapisaniu zmian można przejść do kom-
pilacji.
Należy zacząć od koniguracji kompi-
latora, to znaczy wyboru procesora, dla
którego kompilowany jest program oraz że
plik wynikowy będzie używany jako boot-
loader. Trzeba też podać wielkość sekcji BSL.
Dokonuje się tego, wybierając z menu
Pro-
ject–>Options...
Po otwarciu nowego okna
w zakładce
Target
wybieramy procesor, a na
dole w polu
Program type
zaznaczamy
Boot
Loader
i wybieramy
Boot size,
czyli wielkość
sekcji BSL. Tak jak wspomniano wcześniej,
ustawiamy 256 Words w przypadku bez pro-
gramowania EEPROM, a z jego programowa-
niem – 512 Words. Na
rys. 2
pokazano przy-
kładowy wygląd ekranu koniguracji.
rys. 2.
Programowanie
Ostatnim etapem będzie podłączenie do
komputera układu i zaprogramowanie mi-
krokontrolera (sekcji aplikacji). Uruchamia-
my program MegaLoad i podłączamy układ
poprzez port
com
. Po uruchomieniu progra-
mu wyświetlane jest okienko jak na
rys. 5
.
ELEKTRONIKA PRAKTYCZNA 11/2009
109
notatnik konstruktora
Interfejs programu jest przejrzysty i czytelny,
więc z jego obsługą nie powinno być proble-
mów.
Wybieramy port, do którego jest podłą-
czony nasz procesor i z jaką prędkością ma
się odbyć transmisja (koniecznie taka sama,
jak zostało ustawione podczas koni guracji).
Następnie wybieramy plik, w którym jest
skompilowany program (w sekcji
File to be
programed in the Flash,
klikamy przycisk
Open
) oraz jeśli chcemy zaprogramować
EEPROM, to musimy wskazać plik (w sekcji
File to be programed in the EEPROM,
klika-
my przycisk
Open
), w którym jest zawartość
EEPROM. Teraz jeśli chcemy, wybieramy
ustawienia bezpieczników (tylko ostrożnie),
robimy to w sekcji
BootLoader Lock Bits to
be programed
(znaczenia poszczególnych
ustawień bitów omawiałem w poprzednim
artykule)
.
Po dokonaniu tych czynności zosta-
je nam tylko zresetowanie procesora, co po-
winno rozpocząć proces programowania. Jeśli
wszystko przebiegło bez kłopotów, to wgrany
program powinien działać od razu, jednak
jeśliby się tak nie stało, może pomóc naci-
śnięcie przycisku
Send reset
w sekcji
Com-
mand
lub odłączenie zasilania układu. Jeśli
te operacje nie pomogą, to znaczy, że gdzieś
podczas koni gurowania bootloadera popełni-
liśmy błąd lub prędkość z jaką komunikuje się
mikrokontroler z PC, jest źle dobrana.
Możemy sprawdzić teraz, czy nasz pro-
gram rzeczywiście został bezbłędnie zapi-
sany w pamięci mikrokontrolera. W tym
celu należy podłączyć programator i zwery-
i kować pamięć procesora z plikiem, który
wgraliśmy. Należy pamiętać, że w pamięci
znajduje się nie tylko nasz program, ale rów-
nież bootloader, dlatego jeśli będziemy wery-
rys. 4.
i kować całą pamięć (włącznie z sekcją BSL)
i porównywać ją z plikiem, który wgraliśmy,
to rezultat weryi kacji będzie negatywny.
Teraz, po każdorazowym uruchomieniu/
restarcie układu program bootloadera spraw-
dzi, czy ma programować pamięć. Jeśli wy-
nik będzie negatywny, wówczas normalnie
zostanie uruchomiona aplikacja zapisana
w pamięci mikrokontrolera.
Podsumowanie
Bootloader autorstwa Sylvain Bissonnette
jest bardzo elastyczny, przez co nadaje się do
wielu różnych zastosowań. W oknie programu
znajduje się sekcja
Thanks to read
, w której au-
tor prosi o wsparcie jego pracy, do czego gorąco
zachęcam, gdyż jego program jest wykonany
solidnie, działa naprawdę stabilnie i nadaje się
rys. 5.
do różnych zastosowań, o czym mam nadzieję
również przekonają się Czytelnicy.
Paweł klaja
pklaja@o2.pl
R
E
K
L
A
M
A
110
ELEKTRONIKA PRAKTYCZNA 11/2009
[ Pobierz całość w formacie PDF ]