Bootloader w mikrokontrolerach, to mini program zagnieżdżony w pewnym sektorze pamięci uC. Dzięki niemu możliwe jest wgrywanie programu z pominięciem programatora.
Rozwiązanie takie stosowane jest coraz częściej np.: dla ułatwienia aktualizacji oprogramowania. Bootloader użyty jest również w każdym Arduino.
Kiedy chcemy zaprogramować mikrokontroler, to najczęściej myślimy o podstawowych interfejsach służących do komunikacji z programatorem. W przypadku AVR będzie to ISP, a dla STM32 użyjemy SWD. Dzięki bootloaderowi program możemy przesyłać bezpośrednio przez USB, RS232 (UART) oraz z użyciem wielu innych sposobów takich jak IrDA, czy karta SD.
Pozwala to między innymi na redukcję ilości przewodów do programowania i debugowania. Co więcej, po wgraniu bootloadera praktycznie nie potrzeba już programatora.
Niezbędny sprzęt
Jeśli chcemy wgrać bootloader, a następnie korzystać z tego ułatwienia, to musimy przygotować sobie niezbędne narzędzia:
programator ISP - używany tylko raz, do wgrania bootloadera i ustawienia Fusebitów,
przejściówka USB <-> RS232ttl - bardzo przydatne narzędzie, które pozwala na komunikację przez USB przy wykorzystaniu sprzętowego interfejsu UART w mikrokontrolerze.
konwerter sygnałów RS232 (±12V) na TTL (0-5V) – MAX232 i kilka kondensatorów. Jest to rozwiązanie dla tych, którzy nie chcą kupować przejściówki USB<->RS232, bo dostęp do RS232 mają zapewniony w komputerze.
Wybór bootloadera
Jako pierwszemu przyjrzymy się bootloaderom, które korzystają z UART. Poniższy opis omawia trzy najpopularniejsze, które możemy wykorzystać np.: z ATmegą8.
Megaload – charakteryzuje się bardzo małym rozmiarem (w podstawowej wersji 256 bajtów, w nieco bardziej rozbudowanej - lock bity i możliwość programowania eeprom - 512 bajtów) możemy go używać z bardzo dużą grupą AVR (konkretnie ATmeg). Działa z prędkościami 9600, 19200, 38400, 57600 i 115200 bodów (8kB programu w 3 sekundy). Megaload jest też naszpikowany zabezpieczeniami na wypadek utraty danych w trakcie komunikacji.
Nie będziemy zagłębiać się zbytnio w działanie każdego z bootloaderów, ponieważ jest to rzecz skomplikowana (przynajmniej dla zupełnie początkujących).
Bootloader Arduino – Prawdę mówiąc jest duży i nieoptymalny, ale ma dość przydatną cechę – podszywa się pod programator STK500, co pozwala na używanie go w praktycznie każdym środowisku programistycznym (bez używania dodatkowych programów). Co więcej IDE Arduino całkowicie automatycznie potrafi zapisać bootloader w odpowiedniej sekcji i poustawiać odpowiednie fusebity.
UWAGA!
Używając tego bootloadera jesteśmy zmuszeni do używania jednej z dwóch częstotliwości taktowania procesora – 8MHz lub 16MHz.
MCS Bootloader - prosty bootloader, ze wsparciem bezpośrednio z IDE Bascoma. Znajduje się w katalogu Samples (BOOT\Bootloader.bas) Podobnie jak z Megaload, bootloader ten wspiera uC pracujące w szerokim zakresie częstotliwości taktowania i transmisji.
Wykonanie przejściówki
Dobrze, wiemy już jakich bootloaderów będziemy używali, teraz pora na sprzęt. Musimy wykonać przejściówkę z jednego z poniższych schematów.
Poniższy układ przeznaczony jest dla osób, które nie mają dostępu do prawdziwego RS232. Przy tej przejściówce koniecznym będzie zaprogramowanie mikrokontrolera odpowiednim wsadem. Szczegółowe informacje jak wykonać tę przejściówkę znaleźć można na powyższej stronie oraz na Elektrodzie.
Kolejny schemat należy wykorzystać w sytuacji, gdy do dyspozycji mamy sprzętowy RS232 wbudowany w płytę główną komputera. Jest to bardzo popularny konwerter poziomów logicznych wykonany w oparciu układ scalony MAX232.
Niestety w nowych komputerach nie znajdziemy już wyprowadzenia złącza RS232. Sposób ten okaże się pomocy jedynie przy starszym sprzęcie.
Koszty przejściówek powinny zamknąć się w kwocie 10zł dla konwertera na MAX232 lub 15zł dla konwertera wykorzystującego ATmegę8. Obie można wykonać bez problemu na kawałku płytki uniwersalnej lub stykowej.
Wgrywanie bootloadera Arduino
Jako układ testowy wykorzystamy ATmegę8 taktowaną 16MHz, co jest maksymalną prędkością dla tego mikrokontrolera. Schemat połączeń przejściówka – uC z bootloaderem przedstawiony jest na schemacie poniżej (znajdują się tam też diody wykorzystywane później do zweryfikowania, czy program wgrany działa poprawnie):
Jako pierwszego użyjemy bootloadera Arduino. W tym celu ze strony pobieramy IDE (będzie to najprostsza, najbardziej pewna metoda wgrania bootloadera). Na dobry początek po rozpakowaniu Arduino wchodzimy do jego folderu, wyszukujemy katalog hardware, następnie Arduino i w końcu otwieramy plik programmers.
Teraz, w zależności od tego, jakim programatorem dysponujemy, dopisujemy na przykład dla BSD:
C
1
2
3
4
parallel.name=BSD
parallel.protocol=bsd
parallel.force=true
#parallel.delay=200
Dla USBasp:
C
1
2
usbasp.name=USBasp
usbasp.protocol=usbasp
Dla STK200/300:
C
1
2
3
4
parallel.name=STK200
parallel.protocol=STK200
parallel.force=true
# parallel.delay=200
Możemy dopisać praktycznie każdy programator wspierany przez AVRdude. Następnie włączamy Arduino IDE. W zakładce Tools (u góry) wybieramy Board, a następnie Arduino NG Or Older w/ Atmega8. Podłączamy nasz programator do ATmegi8.
Za pomocą oprogramowania, którego używamy do ustawiania fusebitów (polecam avrdude i AVR Burn-O-Mat) ustawiamy kwarc zewnętrzny 16Mhz i rozmiar obszaru pamięci przeznaczonego na bootloader na 1024 słowa:
Następnie zapisujemy je do mikrokontrolera. Uwaga! złe ustawienia mogą prawie całkowicie zablokować układ!
Teraz wracamy do Arduino. Ponownie zakładka Tools, następnie Burn Bootloader i wybieramy swój programator. W tym momencie do naszej ATmegi8 powinien zostać przesłany bootloader Arduino, oraz odpowiednie lock bity.
Gdy jesteśmy już w Arduino możemy wejść w File→Examples→Digital→Blink. W pierwszej linijce programu zamieniamy:
C
1
intledPin=13;// LED connected to digital pin 13
Na:
C
1
intledPin=7;// LED connected to digital pin 7
Następnie klikamy przycisk Verify, gdy kompilacja zakończy się powodzeniem (Done Compiling), na naszej płytce naciskamy reset, a następnie Upload. Po kilkunastu sekundach dioda powinna zacząć mrugać – wgraliśmy program za pomocą bootloadera.
Wgrywanie bootloadera USB
Teraz pora na USBAspLoader. Do jego wykorzystania potrzebna nam jest tylko wtyczka USB połączona z mikrokontrolerem oraz zworka na płytce (chociaż można przekompilować bootloader, aby uruchamiał się po spełnieniu innego warunku). Poniżej przedstawiony jest minimalny schemat podłączenia potrzebnego do uruchomienia bootloadera USB:
Wybrałem kwarc 16 MHz, chociaż można wybrać inny. Do ATmegi8 musimy wgrać program odpowiadającego naszemu procesorowi i prędkości z jaką go taktujemy - w tym celu ściągamy dedykowane archiwum ze strony projektu.
Dobrze jest ustawić sobie wszystkie fusebity na standardowe, wyczyścić flash procesora i dopiero wtedy wgrać .hex z bootloaderem. Następnie ustawiamy fusebity na kwarc 16MHz, a dalej lockbity. Używając avrdude będzie to wyglądało następująco:
C
1
avrdude-pm8-cusbasp-Ulock:w:0x0F:m
Od teraz możemy cieszyć się działającym bootloaderem na USB, który nie wymaga żadnych przejściówek. Jak go używać? Bardzo prosto - podłaczmy procesor do USB, zamykamy zworkę i klikamy przycisk resetu. W tym momencie nasz procesor powinien przedstawić się w systemie, jako USBAsp - sterowniki i programowanie przeprowadzamy jak w wypadku tego programatora.
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...