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?
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.
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.
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.
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)
źródło
Err ... nie bardzo. W rzeczywistości istnieje [nieoficjalna] modyfikacja Optiboot, aby przyspieszyć przesyłanie .
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? ].
źródło