Quali alternative ci sono al bootloader di Optiboot?


12

Quasi tutte le moderne schede Arduino utilizzano il bootloader Optiboot . Rispetto all'ATmegaboot usato in precedenza, questo è più piccolo in termini di flash (di circa 1,5 KB) e più veloce nella velocità di upload (115,2 k contro 57,6 k) e avvia lo schizzo più rapidamente (il ritardo nell'attesa dopo il ripristino è più breve).

Esistono alternative al bootloader di Optiboot? In particolare, ci sono caricatori di avvio più piccoli (in termini flash)? Che differenze hanno?

Risposte:


8

Optiboot è il bootloader più piccolo disponibile.

Tuttavia, esiste un bootloader molto più potente (con console integrata per test hardware, controllo dei contenuti RAM e Flash, ecc.) Con un protocollo di comunicazione stk500v2 più sviluppato e robusto tra avrdude e il bootloader AVR.

L'ho usato su ATmega2560 e su ATmega1284p. Funziona sia con MCU contatore programmi a 3 byte che a 2 byte.

Ho una versione Bootloader STK500v2 su Sourceforge .

Questo bootloader è basato sul bootloader Peter Fleury STK500v2, aggiornato da Mark Sproul. Ho apportato modifiche per supportarlo con la scheda Goldilocks (una ATmega1284p).

La funzione chiave è utilizzare il protocollo STK500v2 per caricare l'immagine Flash su Arduino. Questo protocollo è più robusto e offre migliori capacità di errore rispetto al protocollo avr109 . Per inciso, il protocollo avr109 è chiamato "Arduino" nel mondo Arduino, perché attiva / disattiva DTR (per ripristinare la scheda e inserire automaticamente il bootloader), e il protocollo STK500v2 è chiamato "Wiring" nel mondo Arduino, a causa dello stesso Motivo.

Il bootloader Fleury / Sproul STK500v2 è progettato per funzionare con l'ATmega2560 che ha un registro di programma a 3 byte, a causa delle dimensioni del flash più grandi. Ma supporta anche normali schede da 2 byte (tutto il resto in realtà).

Per le schede con abbondanza di Flash (come Goldilocks 1284p), esiste un monitor hardware che può essere utilizzato per eseguire query su Flash, SRAM e hardware; è possibile verificare le connessioni senza codice aggiuntivo e verificare il contenuto effettivo di Flash ed EEPROM. Poiché il 1284p supporta 2 USART, ho aggiunto la possibilità di avere il debug su USART1 , in modo che il processo di caricamento tramite USART0 non sia disturbato.


Questo sembra far parte di FreeRTOS, quel bootloader è totalmente indipendente da FreeRTOS?
jfpoilpret,

1
È totalmente indipendente. Il bootloader viene utilizzato per scrivere flash con qualsiasi cosa. FreeRTOS arriva dopo l'avvio di main (). Lo tengo nello stesso repository. Non l'ho scritto, modificato solo per i miei scopi.
feilipu,

Questo sembra interessante; sarebbe utile se potessi riassumere le caratteristiche importanti del tuo bootloader nella tua risposta: dimensioni in Flash, upload velocità massima, verri Arduino con cui può lavorare e alcuni dettagli sui test hardware).
jfpoilpret

È (basato su) il bootloader Peter Fleury STK500v2, aggiornato da Mark Sproul. Ho apportato modifiche per supportarlo con la scheda Goldilocks (una ATmega1284p). La funzione chiave è utilizzare il protocollo STK500v2 per caricare l'immagine flash su Arduino. Questo protocollo è più robusto e offre migliori capacità di errore rispetto al protocollo avr109. Per inciso, il protocollo avr109 è chiamato "Arduino" nel mondo Arduino, perché attiva / disattiva DTR (per ripristinare la scheda e inserire automaticamente il bootloader), e il protocollo STK500v2 è chiamato "Wiring" nel mondo Arduino, a causa dello stesso Motivo.
feilipu,

1
Grazie per le informazioni, ho aggiornato il tuo post in quanto penso che queste informazioni dovrebbero essere direttamente parte della tua risposta. Sentiti libero di aggiungere ulteriori informazioni se ritieni opportuno!
jfpoilpret,

3

TinySafeBoot è un'alternativa per i dispositivi ATtiny e ATmega .

  • Compatibile con molti ATtinys e ATmegas (vedi sotto)

  • Accesso in lettura / scrittura a Flash ed EEPROM.

  • Tutti gli IO disponibili per la comunicazione seriale

  • Un filo, anche con più AVR su una sola linea

  • Autobauding, protocollo robusto.

  • Attivato da Reimposta + Password (opzionale)

  • Password e timeout modificabili in qualsiasi momento.

  • "Cancellazione di emergenza" per superare la password persa: uccide tutti i dati ma lascia intatto il bootloader.

  • ATtinys: ~ 550 byte,

  • ATmegas: <512 byte (!)

  • TSB per ATtiny può aggiornarsi.

  • Il codice sorgente è software gratuito (GPL)


qualcuno sa come TSB si confronta con Optiboot? L'ultimo aggiornamento sembra almeno 2 anni fa ...
johny perché

1

Esistono alternative al bootloader di Optiboot?

Err ... non proprio. In realtà c'è una modifica [non ufficiale] in Optiboot per renderlo più veloce durante il caricamento .

Per installare le variazioni della velocità di trasmissione elevate ...

  • Assicurarsi che l'IDE di Arduino non sia in esecuzione
  • Scarica l'archivio 7-Zip usando il link sopra
  • Estrarre i tre file nella seguente directory: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Apri il file boards.txt che si trova nella seguente directory: {Arduino Installation Root}\hardware\arduino\

Trova questa sezione al suo interno:

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

Aggiungi la seguente sezione ...

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
  • Modifica i due valori evidenziati con il baud rate che intendi utilizzare: 250000, 500000 o 1000000 Salva e chiudi il file boards.txt
  • Utilizzando il tuo programmatore ISP preferito, installa il nuovo bootloader. Non dimenticare di: Assicurati che la scheda Arduino Uno / Upload Fast sia selezionata (Strumenti / Board) , Se appropriato, assicurati che la Porta seriale del tuo programmatore sia selezionata (Strumenti / Porta seriale) , Assicurati che il programmatore sia selezionato (Strumenti / Programmatore ) , Dopo aver installato il bootloader, cambia la porta seriale nella porta seriale di Arduino Uno .

Sopra il testo leggermente modificato per compatibilità con il sito. Posta originale


Oltre a ciò, e il bootloader di ATmegaboot, non puoi davvero trovare alcuna alternativa. Immagino che se Arduino lo carica su tutti gli Unos mai prodotti, è piuttosto ottimizzato. L'hacking di cui sopra accelera il tempo di caricamento, ma non riduce le dimensioni del bootloader. Puoi anche rimuovere il tempo di attesa sul bootloader in modo che abbia un avvio più veloce.

Se sei così preoccupato di massimizzare Flash vedi: Come ridurre veramente uno schizzo e questa risposta [on on Cosa posso fare se esaurisco la memoria Flash o SRAM? ].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.