Jste zde

STK500 Protocol AVR Bootloader

Popis IAP (In-Application Programming) programovaní mikroprocesoru ATmega128 pomocí zavaděče s

podporou protokolu STK500.

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 -vf

b) zápis souboru basemon.hex do paměti flash
stk500.exe -dATMEGA128 -ms -e -pf -ifbasemon.hex -cCOM1

Programová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=3

b) 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

Pavel Čeleda
Hodnocení článku: