Jak wypalić bootloader?

Odpowiedzi:

15

Bootloader to mały program, który jest (prawie) zawsze na Arduino. Zarządza przesyłaniem i uruchamianiem wykonanych szkiców oraz miga diodą LED pin 13 za każdym razem, gdy płyta resetuje się.


Aby nagrać program ładujący:

  1. Uzyskaj AVR ISP , USBtinyISP , ParallelProgrammer lub inną płytę Arduino . To będzie twój ISP.
  2. O ile nie podano inaczej, podłącz ISP do styków ICSP na płycie.
  3. Zasil swoją płytkę za pomocą kabla USB lub zewnętrznego zasilacza.
  4. Otwórz Arduino IDE.
  5. Upewnij się, że Tools ► Board ►w IDE wybrałeś odpowiednią płytę, do której chcesz nagrywać. Sprawdź to dwukrotnie, nawet jeśli możesz poprawnie wgrać programy; przesyłanie nie zawsze wymaga odpowiedniej tablicy.
  6. Wybierz odpowiedniego programistę na Tools ► Programmer ►.
  7. Kliknij Tools ► Burn Bootloaderi poczekaj. Nie powinno to zająć więcej niż minutę i często zajmuje tylko kilka sekund.

Źródła:

Facet z kapeluszem
źródło
1
W tym momencie AVRISP jest w zasadzie EOL (koniec życia). Potrzebujesz przynajmniej AVRISPmk2. Istnieje również wiele innych, bardziej wyrafinowanych narzędzi (na przykład AVR One!). Powinieneś chyba powiedzieć{line 1} or other dedicated ISP programmer.
Connor Wolf,
Na tablicach takich jak Arduino Yun za każdym razem, gdy „ładujesz przez Wi-Fi”, uruchamiasz bootloader połączony ze swoim szkicem. Dzieje się tak dlatego, że procesor Linux jest podłączony do AVR MCU przez SPI, dzięki czemu można naśladować ISP za pomocą oprogramowania.
Federico Fissore
@FedericoFissore - czy to dlatego trwa tak długo?
TheDoctor
Tak, to i fakt, że bitbanging GPIO jest wolniejszy. Trwają wysiłki, aby to przyspieszyć.
Federico Fissore
8

Co to jest bootloader?

A czym dokładnie jest bootloader?

Program ładujący to niewielki fragment kodu znajdujący się w „wysokiej” części pamięci programu. Zwykle nie jest usuwany podczas przesyłania nowych szkiców. Jego celem jest aktywacja natychmiast po resecie (bezpieczniki są skonfigurowane do uruchamiania kodu pod adresem bootloadera zamiast adresu 0x0000). Program ładujący zaczeka krótko (na przykład jedną sekundę), aby sprawdzić, czy dane „programujące” docierają do portu szeregowego.

  • Jeśli tak, odczytuje te dane i dekoduje je, aby przeprogramować pozostałą część pamięci flash. Współpracując z programem do przesyłania (zwykle avrdude) nowy szkic jest wysyłany przez port szeregowy. Program ładujący usuwa strony pamięci flash i zastępuje je nowym kodem. Po zakończeniu wykonuje nowy kod.

  • Jeśli nie otrzymają żadnych instrukcji, program ładujący przeskakuje na adres 0x0000, aby wykonać istniejący szkic na płycie.


Jak wymienić bootloader

Alternatywną metodą programowania programu ładującego jest użycie szkicu, który napisałem jakiś czas temu, który działa na:

  • Uno (lub podobny, taki jak Duemilanove)
  • Leonardo
  • Mega2560

Płytka „programująca” uruchamia szkic, który zawiera bootloadery dla wielu na stałe zakodowanych w nim kart. Podłączasz płytę programującą do płyty docelowej (płyty wymagającej bootloadera) za pomocą 6 przewodów do podłączenia, jak pokazano.

Programator bootloadera dla Uno

To konkretne zdjęcie ilustruje, że jeden program Uno programuje inny.

Uruchamiasz szkic (działając za pomocą Monitora szeregowego, aby wydawać mu polecenia). Najpierw identyfikuje docelowy układ:

Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F 
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...

Naciśnięcie G powoduje zaprogramowanie.

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Done.
Type 'C' when ready to continue with another chip ...

W przypadku Uno zajmuje to sekundę. Zaprogramowanie Mega2560 zajmuje 3 sekundy.

Szczegółowe instrukcje w programatorze rozruchowym Atmega

Kod można pobrać z Github: nickgammon / arduino_sketches

Nick Gammon
źródło
Czy musisz wybrać rodzaj chipa, na którym się palisz (Narzędzia-> Tablica ...)? Jaką płytę wybieram, kiedy spalam bootloader do samodzielnego układu?
Camilo,
Wybierz typ płyty, której używasz do wypalenia bootloadera w IDE. Szkic programu ładującego automatycznie wykrywa typ planszy docelowej.
Nick Gammon