Ethernetowy bootloader dla mikrokontrolerów Freescale Kinetis
Jednym z narzędzi opracowanych przez firmę Freescale dla swoich mikrokontrolerów jest ethernetowy bootloader. Niniejszy artykuł jest swego rodzaju przewodnikiem pomagającym w jego implementacji w nowym, bądź istniejącym już projekcie programistycznym. Bootloader przeznaczony jest dla różnych platform sprzętowych np. rodziny mikrokontrolerów Kinetis, MCF52259, czy MCF51CN128. W przedstawionym opracowaniu skupiono się na rodzinie opartych na rdzeniu ARM Cortex-M4 układów Kinetis (a dokładnie na modelu K60N512, dla którego przygotowano oprogramowanie i przeprowadzono testy jego działania). W artykule wyjaśniono jak zmodyfikować pliki linkera .lcf i .icf odpowiednio dla IDE CodeWarrior oraz IAR (IAR Embedded Workbench for ARM) w celu dodania do projektu programistycznego funkcjonalności ethernetowego bootloadera.
O bootloaderze
Bootloader to prosty program, który umożliwia załadowanie/uaktualnienie oprogramowania znajdującego się w pamięci Flash układu. Do przesłania programu z urządzenia host do programowanego układu bootloader może wykorzystać jeden z wielu popularnych standardów komunikacyjnych np. SPI, I2C, Ethernet, USB i inne. W opisanym tu przypadku wykorzystywany jest standard Ethernet. Bootloader pracuje jako klient TFTP wykorzystując usługę DHCP.
Architektura bootloadera
Miejscem przeznaczonym na bootloader w układzie programowanym jest pierwszych 48 kB pamięci Flash, jednak bootloader może zajmować mniej pamięci. Właściwa aplikacja może zostać umieszczona w dalszej części pamięci Flash (tzn. za bootloaderem). Ostatnie 4 kB pamięci Flash są zarezerwowane do przechowywania parametrów bootloadera.
Na rysunku 1 przedstawiono mapę pamięci mikrokontrolera Kinetis MK60n512oraz umiejscowienie w niej obszaru przeznaczonego na bootloader. Kod bootloadera umieszczony jest na początku pamięci (od adresu 0x0000_0000 do 0x0000_BFFF). Parametry bootloadera przechowywane są w pod pierwszym adresem ostatniego logicznego bloku pamięci Flash (od 0x0007_F000 do 0x0008_0000).
Rys. 1. Mapa pamięci układu Kinetis MK60n512
Zasada działania bootloadera
Na rysunku 2 przedstawiono schemat blokowy przedstawiający kolejne kroki działania bootloadera. Po włączeniu zasilania mikrokontrolera, bootloader rozpoczyna swoje działanie. W pierwszej kolejności następuje odczytanie wartości zmiennej boot value . Wartość ta jest jedynym kryterium, na podstawie którego podejmowana jest decyzja co do dalszego działania bootloadera. Możliwe opcje to ‘go’ (wykonanie aplikacji właściwej mikrokontrolera), ‘script’ (wykonanie skryptu bootloadera), ‘stop’ (zatrzymanie). W trybie ‘script’ możliwe jest wykonanie komend: ‘dhcp’, ‘erase all’, ‘ftp’, ‘set boot go’, ‘go’. Szczegółowy opis skryptu został przedstawiony w rozdziale o nazwie „ Uruchamianie ethernetowego bootloadera ”. Wywołanie komendy ‘go’ spowoduje rozpoczęcie wykonywania aplikacji użytkownika.
Rys. 2. Schemat blokowy bootloadera
Projekt programistyczny wykorzystujący ethernetowy bootloader
W tym rozdziale opisany został sposób modyfikacji pliku rozkazów linkera ( .lcf dla CodeWarrior oraz .lcf dla IAR), aby zarezerwować przestrzeń pamięci, w której znajdzie się bootloader.