Jakie są alternatywy dla bootloadera Optiboot?


12

Prawie wszystkie współczesne płyty Arduino używają bootloadera Optiboot . W porównaniu do wcześniej używanego ATmegaboot, jest on mniejszy pod względem flash (o około 1,5 KB) i szybszy w wysyłaniu (115,2 k vs 57,6 k) i szybciej rozpoczyna szkic (opóźnienie oczekiwania po resecie jest krótsze).

Czy są jakieś alternatywy dla bootloadera Optiboot? W szczególności, czy istnieją jakieś mniejsze (w kategoriach flash) programy ładujące? Jakie mają różnice?

Odpowiedzi:


8

Optiboot to najmniejszy dostępny program ładujący.

Ale istnieje o wiele bardziej wydajny (z wbudowaną konsolą do testowania sprzętu, sprawdzania pamięci RAM i Flash itp.) Bootloader z bardziej rozwiniętym i niezawodnym protokołem komunikacyjnym stk500v2 między avrdude a bootloaderem AVR.

Użyłem go na ATmega2560 i ATmega1284p. Działa zarówno dla 3-bajtowego, jak i 2-bajtowego licznika programu MCU.

Mam wersję programu rozruchowego STK500v2 na Sourceforge .

Ten bootloader oparty jest na bootloaderze Peter Fleury STK500v2, zaktualizowanym przez Marka Sproula. Dokonałem edycji, aby obsługiwała go płyta Goldilocks (ATmega1284p).

Kluczową funkcją jest użycie protokołu STK500v2 do przesłania obrazu Flash do Arduino. Ten protokół jest bardziej niezawodny i daje lepsze możliwości błędów niż protokół avr109 . Nawiasem mówiąc, protokół avr109 nazywa się „Arduino” w świecie Arduino, ponieważ przełącza DTR (aby zresetować płytę i automatycznie wejść do bootloadera), a protokół STK500v2 nazywa się „okablowaniem” w świecie Arduino, z tego samego powodu powód.

Program ładujący Fleury / Sproul STK500v2 został zaprojektowany do współpracy z ATmega2560, który ma 3-bajtowy rejestr programu, ze względu na większy rozmiar Flash. Ale obsługuje również normalne 2-bajtowe tablice (wszystko inne naprawdę).

W przypadku płyt z dużą ilością Flasha (jak Goldilocks 1284p) istnieje monitor sprzętowy , za pomocą którego można sprawdzać Flash, SRAM i sprzęt; możesz sprawdzić połączenia bez dodatkowego kodu i sprawdzić rzeczywistą zawartość Flasha i EEPROM. Ponieważ 1284p obsługuje 2 USART, dodałem możliwość debugowania na USART1 , aby proces przesyłania przez USART0 nie był zakłócany.


To wydaje się być częścią FreeRTOS, czy ten bootloader jest całkowicie niezależny od FreeRTOS?
jfpoilpret

1
Jest całkowicie niezależny. Bootloader służy do pisania flashem z czymkolwiek. FreeRTOS pojawia się później po uruchomieniu main (). Po prostu trzymam to w tym samym repozytorium. Nie napisałem tego, po prostu zmodyfikowałem dla swoich celów.
feilipu

To wydaje się interesujące; przydałoby się podsumować w odpowiedzi ważne funkcje bootloadera: rozmiar Flasha, maksymalną prędkość wysyłania, knury Arduino, z którymi może współpracować, oraz więcej szczegółów na temat testowania sprzętu).
jfpoilpret

Jest (oparty na) bootloaderze Peter Fleury STK500v2, zaktualizowanym przez Marka Sproula. Dokonałem edycji, aby obsługiwała go płyta Goldilocks (ATmega1284p). Kluczową funkcją jest użycie protokołu STK500v2 do przesłania obrazu flash do Arduino. Ten protokół jest bardziej niezawodny i daje lepsze możliwości błędów niż protokół avr109. Nawiasem mówiąc, protokół avr109 nazywa się „Arduino” w świecie Arduino, ponieważ przełącza DTR (aby zresetować płytę i automatycznie wejść do bootloadera), a protokół STK500v2 nazywa się „okablowaniem” w świecie Arduino, z tego samego powodu powód.
feilipu

1
Dzięki za informację, zaktualizowałem twój post, ponieważ uważam, że te informacje powinny być bezpośrednio częścią twojej odpowiedzi. Dodaj więcej informacji, jeśli uznasz to za stosowne!
jfpoilpret

3

TinySafeBoot to alternatywa dla urządzeń ATtiny i ATmega.

  • Kompatybilny z wieloma ATtinys i ATmegas (patrz poniżej)

  • Dostęp do odczytu / zapisu do Flasha i EEPROM.

  • Wszystkie IO dostępne dla komunikacji szeregowej

  • Jeden przewód, również z wieloma AVR na jednej linii

  • Autobudowanie, wytrzymały protokół.

  • Aktywowane przez Reset + Hasło (opcjonalnie)

  • Hasło i limit czasu użytkownika można zmienić w dowolnym momencie.

  • „Kasowanie awaryjne” w celu pokonania utraconego hasła - zabija wszystkie dane, ale pozostawia bootloader nietknięty.

  • ATtinys: ~ 550 bajtów,

  • ATmegas: <512 bajtów (!)

  • TSB dla ATtiny może się aktualizować.

  • Kod źródłowy jest darmowym oprogramowaniem (GPL)


ktoś wie, jak TSB wypada w porównaniu z Optiboot? Ostatnia aktualizacja wydaje się co najmniej 2 lata temu ...
John, dlaczego

1

Czy są jakieś alternatywy dla bootloadera Optiboot?

Err ... nie bardzo. W rzeczywistości istnieje [nieoficjalna] modyfikacja Optiboot, aby przyspieszyć przesyłanie .

Aby zainstalować różne warianty wysokiej prędkości transmisji…

  • Upewnij się, że Arduino IDE nie działa
  • Pobierz archiwum 7-Zip, korzystając z powyższego linku
  • Wyodrębnij trzy pliki do następującego katalogu: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Otwórz plik deski.txt znajdujący się w następującym katalogu: {Arduino Installation Root}\hardware\arduino\

Znajdź w niej sekcję:

uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

Dodaj następującą sekcję…

uno_uf.name=Arduino Uno / Upload Fast
uno_uf.upload.protocol=arduino
uno_uf.upload.maximum_size=32256
uno_uf.upload.speed=250000
uno_uf.bootloader.low_fuses=0xff
uno_uf.bootloader.high_fuses=0xde
uno_uf.bootloader.extended_fuses=0x05
uno_uf.bootloader.path=optiboot
uno_uf.bootloader.file=optiboot_atmega328_250000.hex
uno_uf.bootloader.unlock_bits=0x3F
uno_uf.bootloader.lock_bits=0x0F
uno_uf.build.mcu=atmega328p
uno_uf.build.f_cpu=16000000L
uno_uf.build.core=arduino
uno_uf.build.variant=standard
  • Zmień dwie podświetlone wartości na szybkość transmisji, której zamierzasz użyć: 250000, 500000 lub 1000000 Zapisz i zamknij plik deski.txt
  • Za pomocą swojego ulubionego programisty ISP zainstaluj nowy program ładujący. Nie zapomnij: Upewnij się, że wybrano kartę Arduino Uno / Upload Fast (Narzędzia / Tablica) , W razie potrzeby upewnij się, że wybrano Port szeregowy programatora (Narzędzia / Port szeregowy) , Upewnij się, że programator jest wybrany (Narzędzia / Programator ) , Po zainstalowaniu programu ładującego zmień port szeregowy na port szeregowy swojego Arduino Uno .

Tekst powyżej nieco zmodyfikowany w celu zapewnienia zgodności z witryną. Oryginalny post


Poza tym i bootloaderem ATmegaboot, tak naprawdę nie możesz znaleźć żadnej alternatywy. Wyobrażam sobie, że jeśli Arduino załaduje go do wszystkich wyprodukowanych Unosów, jest całkiem zoptymalizowany. Powyższy hack przyspiesza czas przesyłania, ale nie zmniejsza rozmiaru bootloadera. Możesz także usunąć czas oczekiwania na bootloaderze, aby przyspieszył jego uruchomienie.

Jeśli martwisz się o maksymalizację pamięci flash, zobacz: Jak naprawdę zmniejszyć szkic i tę odpowiedź [na Co mogę zrobić, jeśli zabraknie mi pamięci Flash lub SRAM? ].

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.