Bootloader to specjalny program zapisany w pamięci mikrokontrolera, który uruchamia się jako pierwszy po starcie i umożliwia wgrywanie szkiców przez USB bez dedykowanego programatora.

Dzięki bootloaderowi programujesz Arduino jednym kablem USB i Arduino IDE – szybko, wygodnie i bez dodatkowego sprzętu.

Czym jest bootloader i po co go używać?

Bootloader to mały fragment kodu (zwykle kilka kilobajtów), który nasłuchuje komend z komputera przez interfejs szeregowy (USB/UART) i wgrywa nowy program (szkic) do pamięci flash mikrokontrolera. Nie musisz kupować drogiego programatora ISP – wystarczy kabel USB i Arduino IDE.

Zalety bootloadera:

Oto najważniejsze korzyści korzystania z bootloadera:

  • prostota programowania – wgrywasz kod jednym kliknięciem w Arduino IDE;
  • kompatybilność – działa z płytkami jak Arduino Uno, Nano czy Pro Mini;
  • odtwarzalność – idealny do klonowania projektów na nowych mikrokontrolerach ATmega328P.

Bez bootloadera mikrokontroler wymaga programatora jak USBasp lub ST-Link, co komplikuje pracę początkującym. Wgranie szkicu przez programator ISP nadpisuje bootloader – aby wrócić do programowania przez USB, trzeba go ponownie wgrać.

Wymagane narzędzia i przygotowanie

Do podstawowych operacji przygotuj poniższe elementy:

  • Dwie płytki Arduino Uno – jedna jako programator, druga jako cel z mikrokontrolerem ATmega328P;
  • przewody połączeniowe (jumper wires) – do spięcia pinów ISP między płytkami;
  • Arduino IDE – najnowsza wersja z arduino.cc;
  • komputer z Windows, Linux lub macOS – do uruchomienia IDE i komunikacji przez USB.

Uwaga dla zaawansowanych: przy „nagim” ATmega328P przyda się kwarc 16 MHz (jeśli nie ma go na płytce) oraz dwa kondensatory 22 pF. Do symulacji możesz wykorzystać bibliotekę Arduino dla Proteus.

Metoda 1 – wgrywanie bootloadera za pomocą Arduino jako ISP (najprostsza dla początkujących)

To najłatwiejszy sposób na odzyskanie bootloadera w ATmega328P z użyciem działającej płytki Arduino Uno – zamieniamy jedną płytkę w programator ISP.

Krok 1 – połączenia sprzętowe

Podłącz Arduino B (programator) z Arduino A (cel) w następujący sposób:

Pin Arduino B Pin Arduino A
5V 5V
GND GND
D11 (MOSI) D11
D12 (MISO) D12
D13 (SCK) D13
D10 (RESET) RESET

Arduino B podłącz do komputera przez USB – zasilisz w ten sposób obie płytki. Dla Arduino Mega użyj pinów: MOSI–D51, MISO–D50, SCK–D52, RESET–D53.

Wskazówka: dodaj diody LED z rezystorami 330 Ω na pinach D9 (heartbeat), D8 (błąd), D7 (programowanie) na programatorze – ułatwiają diagnostykę.

Krok 2 – konfiguracja Arduino IDE

Postępuj zgodnie z poniższymi krokami:

  1. Otwórz Arduino IDE.
  2. Załaduj szkic ArduinoISP (File > Examples > ArduinoISP) na Arduino B i wgraj go jak zwykły program.
  3. W menu Tools > Board wybierz płytkę docelową (np. Arduino Uno dla ATmega328P).
  4. Ustaw Tools > Programmer > Arduino as ISP.
  5. Wybierz Tools > Burn Bootloader. Diody TX/RX będą migać przez ok. 30 s. Po sukcesie pojawi się komunikat:

Done burning bootloader

Po wszystkim zmień z powrotem Tools > Programmer na AVR ISP, aby wgrywać szkice przez USB.

Rozwiązywanie problemów

Najczęstsze problemy i ich szybkie rozwiązania:

  • błąd avrdude – sprawdź połączenie RESET (w szkicu ArduinoISP możesz zmienić pin: #define RESET SS na np. D9);
  • brak migania diod – upewnij się, że Arduino B ma wgrany ArduinoISP i jest podłączone przez USB;
  • Arduino Leonardo/Micro – programuj przez złącze ICSP, nie przez piny cyfrowe.

Po tej procedurze Arduino A ma wgrany bootloader i programuje się jak oryginalna płytka Uno.

Metoda 2 – programowanie ATmega328P przez USBasp lub UART

Dla samodzielnego układu ATmega328P (poza płytką) użyj taniego programatora USBasp (~10–20 zł), a następnie programuj szkice przez UART z konwerterem USB–UART.

Procedura:

Wykonaj następujące kroki, aby wgrać bootloader:

  1. Podłącz ATmega328P do USBasp: VCC→5 V, GND→GND, MOSI→PB3 (pin 17), MISO→PB4 (pin 18), SCK→PB5 (pin 19), RESET→PC6 (pin 1).
  2. W Arduino IDE ustaw: Tools > Programmer > USBasp; Tools > Board > Arduino Nano; Processor > ATmega328P (Old Bootloader).
  3. Wybierz Tools > Burn Bootloader. Po zakończeniu układ jest gotowy do programowania przez RX/TX z konwerterem USB–UART.

Uwaga: po wgraniu szkicu przez USBasp bootloader zostaje nadpisany – wgraj go ponownie, jeśli chcesz wrócić do programowania przez USB.

Zaawansowane – bootloader dla STM32 Blue Pill (Arduino Core)

STM32F103C8T6 (Blue Pill) nie ma natywnego bootloadera Arduino, ale możesz go wgrać i programować przez USB z poziomu Arduino IDE.

Wymagane:

Do uruchomienia procedury przygotuj:

  • STM32 Blue Pill – płytka z mikrokontrolerem STM32F103C8T6;
  • konwerter USB–UART (np. CH340) lub ST-Link – do pierwszego programowania;
  • STM32CubeProgrammer – narzędzie do wgrywania pliku .bin do pamięci Flash;
  • bootloader .bin z STM32duino – np. generic_boot20_pc13.bin.

Kroki:

Postępuj według poniższej instrukcji, aby wgrać bootloader STM32duino:

  1. Połączenia USB–UART – PA9 (TX) → RX konwertera, PA10 (RX) → TX konwertera, GND → GND, 3.3 V → 3.3 V.
  2. Ustaw zworki: BOOT0 = HIGH, BOOT1 = LOW (uruchomienie z system memory).
  3. W STM32CubeProgrammer: wybierz Port COM (115200 baud) → Connect → Erasing & Programming → wskaż plik .bin (adres 0x08000000) → Start.
  4. Ustaw BOOT0 = LOW, podłącz USB – płytka powinna wykryć się jako port COM.
  5. W Arduino IDE dodaj URL: http://dan.drown.org/stm32duino/package_STM32duino_index.json; zainstaluj STM32F1 Boards; wybierz Generic STM32F103C i wgraj szkic przyciskiem Upload.

Po tej procedurze Blue Pill działa z Arduino IDE przez USB jak klasyczna płytka Arduino.

Porównanie metod wgrywania bootloadera

Poniższa tabela zestawia popularne metody pod kątem trudności, kosztu i zastosowań:

Metoda Trudność Koszt Zastosowanie
Arduino as ISP Niska 0 zł ATmega328P, początkujący
USBasp Średnia 10–20 zł „Gołe” układy ATmega
STM32CubeProgrammer Wysoka ~20 zł STM32 Blue Pill

Bezpieczeństwo i dobre praktyki

Stosuj poniższe zasady, aby uniknąć problemów i oszczędzić czas:

  • backup bootloadera (.hex) – wykonaj kopię zapasową przed eksperymentami;
  • stabilne zasilanie 5 V – unikaj 3.3 V dla ATmega bez modyfikacji układu zegara;
  • testy na płytce stykowej – przenieś projekt z Arduino Uno na „goły” ATmega328P z kwarcem 16 MHz;
  • diagnostyka sygnałów – użyj diod LED lub oscyloskopu na liniach SPI.