Bootloader w mikrokontrolerach AVR, AVR
[ Pobierz całość w formacie PDF ]
KURS
Bootloader
w mikrokontrolerach AVR
Przywykliśmy do tego, że aby
zaprogramować pamięć Flash
mikrokontrolera potrzebny
jest specjalny programator
szeregowy lub równoległy.
Niektóre mikrokontrolery potrafią
jednak modyfikować swoją
własną pamięć programu, co
przy zastosowaniu specjalnego
(wpisanego wcześniej do Flash’a)
bootloadera umożliwi również
programowanie układu bez
dodatkowych narzędzi – przez
port szeregowy.
Rekomendacje:
opisana metoda programowania
mikrokontrolerów AVR będzie
przydatna dla każdego
praktykującego elektronika,
w większości przypadków
umożliwi programowanie
układów bez dodatkowego
wyposażenia sprzętowego.
Wykorzystując specjalny program
–
bootloader
– rezydujący w pa-
mięci Flash mikrokontrolera można
dokonywać zmiany jego programu
sterującego poprzez interfejs RS232
lub bardziej popularny USB. Nada-
ją się do tego oczywiście również
i inne interfejsy. W artykule zostanie
przedstawiony przykład uniwersalne-
go
bootloadera
napisanego w języku
Bascom AVR, który można umie-
ścić w większości mikrokontrolerów
ATmega. Środowisko Bascom AVR
posiada również wbudowaną opcję
aktualizacji programu za pomocą
bootloadera
. Zapisanie do mikro-
kontrolera AVR programu
bootloade-
ra
umożliwi nie tylko jego progra-
mowanie bez użycia zewnętrznego
programatora, ale i nieskompliko-
waną aktualizację oprogramowania.
Choć bootloader ma zalety, to do
jego wad można zaliczyć brak moż-
liwości zmiany bezpieczników mi-
krokontrolera AVR (
Fuse Bits
). Pro-
ducent mikrokontrolerów AVR nie
udostępnia ich z zaprogramowanym
bootloaderem
, należy więc go we
własnym zakresie jednokrotnie za-
pisać do wydzielonego obszaru pa-
mięci Flash mikrokontrolera AVR.
Po zapisaniu programu
bootloadera
do pamięci mikrokontrolera AVR,
nie będzie już potrzebny zewnętrz-
ny programator. Przykład wykorzy-
stania programu
bootloadera
zo-
stanie pokazany z wykorzystaniem
mikrokontrolera ATmega8 i pakietu
Bascom AVR.
Program
bootloadera
Na
rys. 1
pokazano obszar pa-
mięci Flash mikrokontrolera AT-
mega8. Program
bootloadera
nale-
ży umieścić w obszarze
Boot Flash
Section
. W przypadku mikrokon-
trolera ATmega8, w zależności od
ustawień
Fuse Bits
, obszar na
boot-
loader
może posiadać pojemności
128, 256, 512 lub 1024 słowa. Pro-
gram
bootloadera
został napisany
przez firmę MCS Electronics. Przez
niewielkie modyfikacje kodu pro-
gramu, można go umieścić w róż-
nych typach mikrokontrolerów AVR.
PODSTAWOWE PARAMETRY
• Możliwość programowania pamięci Flash
i EEPROM mikrokontrolera przez port
szeregowy lub USB (po zastosowaniu
konwertera FT232R)
• Prędkość transmisji max. 115200 bodów
• Zdalne zerowanie mikrokontrolera linią DTR
interfejsu RS232
• Wielkość obszaru pamięci bootloadera:
128, 256, 512 lub 1024 słowa
• Możliwość bezpośredniego korzystania
z bootloadera w pakiecie Bascom AVR
Rys. 1. Obszar pamięci Flash mikro-
kontrolera ATmega8
Elektronika Praktyczna 10/2007
97
KURS
Rys. 2. Sposób połączenia mikrokontrolera do portu COM komputera podczas programowania z wykorzystaniem
bootlo-
adera
Rys. 3. Sposób połączenia mikrokontrolera do portu USB komputera podczas programowania z wykorzystaniem
bootlo-
adera
Umożliwia on modyfikowanie za-
równo pamięci Flash, jak i pamięci
EEPROM, która jest programowana
za pomocą bascomowej instrukcji
Writeeeprom
. Program
bootloade-
ra
został zamieszczony na
list. 1
.
Maksymalna prędkość transmisji
interfejsu szeregowego RS232 pod-
czas współpracy z
bootloaderem
jest
równa 115200 bodów. Prędkość tę
można ustawić w programie
bootlo-
adera
, ale będzie ona zależała od
częstotliwości oscylatora mikrokon-
trolera. W celu uzyskania poprawnej
transmisji przez interfejs RS232, mi-
krokontroler należy taktować z wy-
korzystaniem rezonatora kwarcowe-
go, gdyż wewnętrzny oscylator RC
nie posiada zbyt dużej stabilności.
W programie
bootloadera
dla danego
typu mikrokontrolera należy odblo-
kować dwie instrukcje. W przypadku
mikrokontrolera ATmega8 będą to:
$regfile = „m8def.dat”
Const Loaderchip = 8
Pierwsza z nich określa typ mi-
krokontrolera, a druga jest stałą,
od której zależy liczba stron ob-
liczanych w dalszej części progra-
mu. W przykładzie mikrokontro-
ler jest taktowany częstotliwością
8 MHz, a prędkość transmisji wyno-
si 38400 bod. W ramach przykładu
wykorzystania
bootloadera
, mikro-
kontroler został podłączony do kom-
puterowego portu COM1 w sposób
pokazany na
rys.
2
. Konwerter MAX
232 jest wymagany ze względu na
rożne poziomy napięć w interfejsie
RS232 komputera i mikrokontrolera.
Dioda D1 sygnalizuje pracę
bootlo-
adera
.
Bootloader
może być wywo-
ływany na dwa sposoby: poprzez
instrukcję skoku pod adres
bootlo-
adera
lub poprzez zerowanie mikro-
kontrolera. Aby zautomatyzować ze-
rowanie, oprogramowanie sterujące
bootloaderem
wykorzystuje do tego
celu linię DTR portu COM. Bardzo
ułatwia to wymianę oprogramowa-
nia mikrokontrolera. Linia DTR, po
zmianie poziomu przez układ MAX
232, steruje wejściem zerowania
mikrokontrolera (rys. 2). Zamiast in-
98
Elektronika Praktyczna 10/2007
KURS
zależał od sprzętowej, jak i pro-
gramowej budowy projektowanego
urządzenia. W przykładzie jest wy-
korzystywany pierwszy sposób akty-
wacji
bootloadera
, czyli za pomocą
wejścia zerującego.
Rys. 4. Konfiguracja programu pozwalająca skorzystać z automatycznego uak-
tywniania
bootloadera
przy każdym włączeniu mikrokontrolera
Programowanie
mikrokontrolera
z wykorzystaniem
bootloadera
Mikrokontroler z zapisanym pro-
gramem
bootloadera
można zapro-
gramować własnym programem
za pomocą programu
Bootloader.
exe
lub bezpośrednio w pakiecie
Bascom AVR. Na
rys. 5
pokaza-
no okno programu
bootloader
. Za
jego pomocą można wysłać plik
o rozszerzeniu .BIN do mikrokon-
trolera. W menu
Options
można
wybrać numer portu COM oraz
prędkość transmisji, która powin-
na być zgodna z prędkością usta-
wioną w
bootloaderze
mikrokontro-
lera. W przypadku programowania
pamięci EEPROM mikrokontrolera,
Rys. 5. Okno programu
bootloader
kości obszaru pamięci zajmowanego
przez
bootloader
. W tym przypadku
ustawiono maksymalny obszar 1024
słów. Z tego sposobu wywoływania
korzysta program obsługujący
bootlo-
ader
(
Bootloader.exe
) oraz pakiet Ba-
scom AVR. Mikrokontroler jest zero-
wany automatycznie za pomocą linii
DTR. Gdy nie będzie wykorzystywa-
ne automatyczne zerowanie w celu
uaktywnienia
bootloadera
, można je
przeprowadzić ręcznie za pomocą
przycisku dołączonego do wejścia
zerującego mikrokontro-
ler. Innym sposobem
wywołania
bootloadera
jest wydanie rozkazu
skoku pod adres, pod
którym został zapisany
bootloader
. Taki skok
może być zainicjowany
przez dowolnie wybra-
ne przez programistę
zdarzenie (np. wciśnię-
cie przycisku). Przykład
programowego wywoła-
nia
bootloadera
przed-
stawiono na
list. 2.
W programie tym
skok do
bootloadera
nastąpi, gdy z portu
COM zostanie ode-
brany znak o kodzie
ASCII równym 27
(ESC). Za pomocą in-
strukcji
Goto
, nastąpi
wówczas skok do po-
czątku programu
boot-
loadera
. Aktywacja
bootloadera
jest sy-
gnalizowana miganiem
diody LED dołączonej
do portu PB.2 mikro-
kontrolera. Linia por-
tu, do której została
dołączona dioda LED
może być skonfigu-
rowana w programie
bootloadera
. Sposób
aktywacji
bootloadera
w dużej mierze będzie
terfejsu RS232 można również za-
stosować konwerter USB–RS232, na
przykład w postaci układu FT232R,
jak to pokazano na
rys.
3
. Diody
D1, D2 sygnalizują przepływ infor-
macji przez port szeregowy, a dioda
D3 sygnalizuje pracę
bootloadera
.
Oczywiście dla układu FT232R na-
leży zainstalować sterowniki wirtual-
nego portu COM. Po skoku do pro-
gramu
bootloadera
, oczekuje on na
otrzymanie wartości 123 lub 124.
Po otrzymaniu wartości 123 będzie
programowana pamięć Flash, a po
otrzymaniu wartości 124 pamięć
EEPROM. Pamięć Flash jest zapisy-
wana z wykorzystaniem asemblero-
wej instrukcji SPM. Skonfigurowany
i skompilowany program
bootloadera
należy umieścić w mikrokontrolerze
za pomocą dowolnego programatora
mikrokontrolerów AVR. Dodatkowo
w przypadku wykorzystania rezona-
tora kwarcowego należy skonfiguro-
wać jego bezpieczniki (
Fuse Bits
).
Rys. 6. Okno wyświetlające informację o postępie
programowania
Sposoby uaktywniania
bootloadera
Aby skorzystać z automatycznego
uaktywniania
bootloadera
przy każ-
dym włączeniu mikrokontrolera, na-
leży ustawić
fusebit
BOOTRST (Fu-
sebit D), jak to pokazano na
rys.
4
.
Po ustawieniu tego bitu, najpierw
jest wykonywany skok do programu
bootloadera
. Gdy nie zostanie prze-
słana wartość 123 lub 124 w okre-
ślonym czasie,
bootloader
kończy
działanie i zaczyna być wykonywa-
ny program główny mikrokontrolera.
Fusebity
BOOTSZ0 i BOOTSZ1 (Fu-
sebit FE) umożliwiają wybór wiel-
Rys. 7. Konfiguracja środowiska Bascom AVR do
programowania mikrokontrolerów z wykorzystaniem
bootloadera
Elektronika Praktyczna 10/2007
99
KURS
plik posiada rozszerzenie .EEP. Pro-
gramowanie mikrokontrolera rozpo-
czyna się od naciśnięcia przycisku
Upload
. Wcześniej mikrokontroler
jest zerowany za pomocą sygnału
DTR. Gdy nie jest wykorzystywany
sygnał DTR, należy ręcznie wyze-
rować mikrokontroler. Do mikro-
kontrolera wysłano prosty program
testowy, który pokazano na
list. 3.
Powoduje on miganie diody
LED dołączonej do portu PB.4 mi-
krokontrolera. Podczas programowa-
nia mikrokontrolera poprzez pro-
gram
bootloader.exe
, wyświetlane
jest okno z informacją o postępie
programowania (
rys. 6
). Programo-
wanie mikrokontrolera z poziomu
Bascom AVR polega na wybraniu
w menu
Programmer
, typu progra-
matora –
MCS bootloader
, zgodnie
z
rys. 7
. W zakładce
Serial
można
skonfigurować numer portu oraz
prędkość transmisji, a w zakładce
MCS Loader
wielkość
bootloadera
oraz sposób jego aktywacji (poprzez
linię DTR). Skompilowany program
można załadować do mikrokontro-
lera naciskając klawisz
F4
. Podczas
programowania mikrokontrolera zo-
staje wyświetlone okno pokazane
na
rys. 8
. Można również przy-
gotować własną aplikację obsłu-
gującą
bootloader
dostosowaną do
własnych potrzeb. Po zastosowaniu
konwertera USB–RS232 programo-
wanie mikrokontrolera przy użyciu
bootloadera
przebiega identycznie.
List. 2. Przykład programowego wywołania bootloadera
Do ‘pętla do–loop
Print „test” ‘wysłanie przykładowego tekstu
Waitms 1000 ‘opóźnienie 1000 ms
If Inkey() = 27 Then‘jeśli odebrano znak 27, to
Print „boot” ‘wysłanie tekstu boot
Goto &HC00 ‘skok do bootloadera
End If
Loop ‘koniec pętli do–loop
List. 3. Prosty program testowy
$crystal = 8000000 ‚częstotliwość oscylatora
$regfile = „m8def.dat” ‚typ mikrokontrolera
Config Pinb.4 = Output
Do
Toggle Portb.4
Waitms 250
Loop
End
końcowych. Mogą
oni sami je wymie-
nić, bez wysyłania
zakupionego urzą-
dzenia do serwisu.
W przypadku pa-
kietu Bascom AVR,
wgrany wcześniej
do mikrokontrolera
bootloader
można
wykorzystywać za-
miast dodatkowego
programatora. Wy-
starczy nacisnąć
klawisz
F4
, a skom-
pilowane oprogra-
mowanie zostanie
przesłane do mikro-
kontrolera. We wła-
snych aplikacjach
sposób aktywacji
bootloadera
w du-
żej mierze będzie zależeć od budo-
wanego urządzenia. Wykorzystując
uniwersalny
bootloader
firmy MCS
Electronics komunikacja przebiega
za pomocą interfejsu RS232, Sto-
sując konwerter USB–RS232 można
uzyskać układ programowany za
pomocą interfejsu USB. Oczywiście
Rys. 8. Okno wyświetlane podczas programowania
mikrokontrolera
załadowanie
bootloadera
będzie
możliwe tylko w mikrokontrolerach
AVR, które posiadając wydzielony
dla niego obszar pamięci. Więk-
szość mikrokontrolerów ATmega
posiada tę możliwość
.
Marcin Wiązania, EP
marcin.wiazania@ep.com.pl
Podsumowanie
Wykorzystując mikrokontro-
ler z załadowanym
bootloaderem
,
w nieskomplikowany sposób uzy-
skujemy możliwość aktualizacji
oprogramowania, co ma duże zna-
czenie w przypadku użytkowników
R
E
K
L
A
M
A
100
Elektronika Praktyczna 10/2007
[ Pobierz całość w formacie PDF ]