Princip
Mikroprocesory řady ATmega jsou schopny používat bootloader (dále jen zavaděč) k
programování paměti flash a eeprom. Paměť flash je rozdělena do dvou částí. První
část tvoří samotná aplikace a druhou volitelnou částí je zavaděč. Velikost
jednotlivých částí se nastavuje pomocí konfiguračních bitů BOOTSZ (Boot
Size). Čtení a zápis paměti provádí instrukce LPM (Load Program Memory) a SPM (Store
Program Memory), které se vykonají pouze v paměťové části určené pro
zavaděč.
Standardně se po zapnutí (resetu) obvodu provádějí instrukce od adresy nula. Zavaděč je
však umístěn na samý vrchol paměti flash. Je proto nezbytné nastavit konfigurační
bit BOOTRST (Boot Reset) čímž se po startu začne na adrese zavaděče. Další
chování je dáno pouze tím jak je napsán kód zavaděče např. pokud
splníme určitou podmínku dojde k aktualizaci firmwaru v opačném případě se spustí
aplikace. Použití zavaděče však nemůže zcela nahradit klasický ISP programátor. Zavaděč
neumožňuje plnohodnotnou manipulaci s konfiguračními a zabezpečovacími bity. V plném rozsahu je
lze pouze číst, zápis je omezen jen na několik vybraných bitů. Ve výsledku to
znamená, že konfigurace mikroprocesoru a nahrání zavaděče musí proběhnout pomocí
paralelního nebo ISP programátoru.
STK500 Protocol AVR Bootloader
Volně dostupná realizace zavaděče s podporou protokolu STK500 (Název protokolu je odvozen
od vývojového kitu AVR STK500 kde byl poprvé použit) je k dispozici zde [1]. Překlad a
sestavení kódu zavaděče se provádí v AVR-GCC.
Celková velikost zavaděče je 1,5 kB. Aktuální verze umí číst a zapisovat paměť
flash a eeprom. Nelze číst konfigurační a zabezpečovací bity. Zavaděč je testovaný s AVR
Studiem 3.XX, 4.XX a poslední verzí UISP. Komunikace probíhá přes sériový
port UART0 rychlostí 115.200 Bd. Originální verze byla upravena tak, aby šla aplikovat s
modulem Charon II a development boardem (dále jen DB).
Sestavení kódu zavaděče a nastavení modulu Charon II
V adresáři SRC jsou uvedeny následující soubory
- stk500boot.c … kód zavaděče upravený pro modul Charon II,
- makefile … postup sestavení zavaděče pro AVR-GCC,
- fuses.mot … standardní konfigurace modulu Charon II s podporou pro zavaděč.
V uvedeném pořadí je třeba provést následující kroky
- make … sestavení zavaděče,
- make flash … nahrání zavaděče do modulu Charon II přes paralelní port a STK200,
- make fuse … nahrání standardní konfigurace do modulu Charon II (aktivace zavaděče),
- make clean … odstranění temporálních souborů.
Aktivace zavaděče v sobě obnáší nastavení následujících konfiguračních bitů
- BOOTZ = 00 … velikost zavaděče 8 kB, počáteční adresa je 0x1E000,
- BOOTRST.= 1 … zavaděč aktivován (změněn boot reset vector na 0x1E000).
Obr. 1 Nastaveni konfiguračních bitů mikroprocesoru ATmega128 v AVR-Studiu
Práce se zavaděčem
Po zapnutí (resetu) modulu Charon II se spustí zavaděč. V případě, že je uzemněn vstup PE4 (jumper vlevo dole na DB v pozici „Forced“) dojde k aktivaci režimu programování. Sériový port UART0 se nyní chová jako STK500 kompatibilní ISP programátor. Po ukončení programování je nezbytné vyjmout jumper z pozice „Forced“ a vyresetovat modul Charon II.
Programování pomocí AVR-Studia
Nahrávání firmwaru z AVR Studia je možné přes grafické rozhraní nebo přímo z příkazové řádky (vyžaduje soubory stk500.exe, stk500dll.dll, stk500.ini).
a) zápis a kontrola souboru basemon.hex do paměti flash
stk500.exe -dATMEGA128 -ms -e -pf -ifbasemon.hex -cCOM1 -vfb) zápis souboru basemon.hex do paměti flash
stk500.exe -dATMEGA128 -ms -e -pf -ifbasemon.hex -cCOM1Programování pomocí UISP
a) zápis a kontrola souboru basemon.hex do paměti flash
uisp -dprog=stk500 -dserial=/dev/ttyS0 -dspeed=115200 -dpart=ATmega128 --erase --segment=flash --upload --verify if=basemon.hex -v=3b) zápis souboru basemon.hex do paměti flash
uisp -dprog=stk500 -dserial=/dev/ttyS0 -dspeed=115200 -dpart=ATmega128 --erase --segment=flash --upload if=basemon.hex -v=3
Poznámka: Detailni popis programu UISP je uveden v článku UISP - AVR In-System Programmer.
Závěr
Varianta použití zavaděče k IAP programovaní obvodů řady ATmega má své klady i zápory. Základní shrnutí je uvedeno v následujícím seznamu.Výhody
- volitelné programovací rozhraní (UART0, UART1 atd.) a protokol (STK500, proprietární atd.),
- nelze svévolně (nechtěně) modifikovat konfigurační a zabezpečovací bity mikroprocesoru,
- nemůže dojít k problémům s programováním, které vznikají pokud krystal ISP programátoru má větší hodnotu než krystal programovaného obvodu,
- rychlost programování je limitována pouze přenosovou rychlostí použitého rozhraní,
- metodika programování se shoduje s postupem používaným u modulu Charon I.
Nevýhody
- manuální aktivace/deaktivace zavaděče,
- zabírá paměť flash.
Alternativní řešení použití zavaděče v kombinaci s aktualizací firmwaru přes lokální síť a ethernetové rozhraní je popsán zde [4]. Další zdroj informací a aplikace zavaděče ve spojitosti s mikroprocesorem ATmega169 je popsán u vývojového kitu AVR Butterfly [3].
DOWNLOAD & odkazy
- [1] KYLE, J. P. STK500 Protocol AVR Bootloader http://www.avr1.org/stk500boot/stk500boot.html
- [2] ATMEL CORPORATION. AVR061: STK500 Communication Protocol http://www.atmel.com
- [3] ATMEL CORPORATION. AVR Butterfly Evaluation Kit http://www.atmel.com
- [4] KIPP, H. Ethernet boot loader http://www.ethernut.de/en/eboot/index.html
- Zdrojové kódy pro stk500boot.c 20030810
- Testovací .bat soubory
- AVR061 - STK500 Communication Protocol + AVR061 - STK500 Communication Protocol PDF
Pavel Čeleda