Welche Alternativen gibt es zum Optiboot-Bootloader?


11

Fast alle modernen Arduino-Boards verwenden den Optiboot-Bootloader . Im Vergleich zu dem zuvor verwendeten ATmegaboot ist dieser Flash-Wert kleiner (um ca. 1,5 KB) und die Upload-Geschwindigkeit schneller (115,2 KB gegenüber 57,6 KB). Die Skizze wird schneller gestartet (die Verzögerung beim Warten nach dem Zurücksetzen ist kürzer).

Gibt es Alternativen zum Optiboot-Bootloader? Gibt es speziell kleinere (in Flash-Begriffen) Bootloader? Welche Unterschiede haben sie?

Antworten:


8

Optiboot ist ungefähr der kleinste verfügbare Bootloader.

Es gibt jedoch einen viel leistungsstärkeren Bootloader (mit integrierter Konsole für Hardwaretests, RAM- und Flash-Inhaltsprüfung usw.) mit einem weiterentwickelten und robusteren stk500v2-Kommunikationsprotokoll zwischen avrdude und dem AVR-Bootloader.

Ich habe es auf dem ATmega2560 und auf dem ATmega1284p verwendet. Es funktioniert sowohl für die 3-Byte- als auch für die 2-Byte-Programmzähler-MCU.

Ich habe eine STK500v2 Bootloader- Version auf Sourceforge .

Dieser Bootloader basiert auf dem von Mark Sproul aktualisierten Peter Fleury STK500v2 Bootloader. Ich habe Änderungen vorgenommen, damit es mit dem Goldilocks-Board (einem ATmega1284p) unterstützt wird.

Die Hauptfunktion besteht darin, das STK500v2- Protokoll zum Hochladen des Flash-Images auf das Arduino zu verwenden. Dieses Protokoll ist robuster und bietet bessere Fehlerfunktionen als das avr109- Protokoll. Abgesehen davon wird das avr109-Protokoll in der Arduino-Welt als "Arduino" bezeichnet, da es DTR umschaltet (um die Karte zurückzusetzen und automatisch in den Bootloader zu gelangen), und das STK500v2-Protokoll wird in der Arduino-Welt aus demselben Grund "Wiring" genannt Grund.

Der Fleury / Sproul STK500v2-Bootloader funktioniert aufgrund der größeren Flash-Größe mit dem ATmega2560, der über ein 3-Byte-Programmregister verfügt. Es werden aber auch normale 2-Byte-Karten unterstützt (alles andere wirklich).

Für Boards mit viel Flash (wie Goldilocks 1284p) gibt es einen Hardwaremonitor , mit dem Flash, SRAM und Hardware abgefragt werden können. Sie können Verbindungen ohne zusätzlichen Code überprüfen und den tatsächlichen Inhalt von Flash und EEPROM überprüfen. Da der 1284p 2 USART unterstützt, habe ich die Möglichkeit zum Debuggen auf USART1 hinzugefügt , damit der Upload-Prozess über USART0 nicht gestört wird.


Dies scheint Teil von FreeRTOS zu sein. Ist dieser Bootloader völlig unabhängig von FreeRTOS?
jfpoilpret

1
Es ist völlig unabhängig. Der Bootloader wird verwendet, um Flash mit irgendetwas zu schreiben. FreeRTOS kommt später, nachdem main () gestartet wurde. Ich behalte es einfach im selben Repository. Ich habe es nicht geschrieben, sondern nur für meine Zwecke modifiziert.
Feilipu

Das scheint interessant zu sein; Es wäre nützlich, wenn Sie wichtige Funktionen Ihres Bootloaders in Ihrer Antwort zusammenfassen könnten: Größe in Flash, maximale Upload-Geschwindigkeit, Arduino-Eber, mit denen es arbeiten kann, und einige weitere Details zu Hardwaretests).
Jfpoilpret

Es ist (basierend auf) dem von Mark Sproul aktualisierten Bootloader STK500v2 von Peter Fleury. Ich habe Änderungen vorgenommen, damit es mit dem Goldilocks-Board (einem ATmega1284p) unterstützt wird. Die Hauptfunktion besteht darin, das STK500v2-Protokoll zum Hochladen des Flash-Images auf das Arduino zu verwenden. Dieses Protokoll ist robuster und bietet bessere Fehlerfunktionen als das avr109-Protokoll. Abgesehen davon wird das avr109-Protokoll in der Arduino-Welt als "Arduino" bezeichnet, da es DTR umschaltet (um die Karte zurückzusetzen und automatisch in den Bootloader zu gelangen), und das STK500v2-Protokoll wird in der Arduino-Welt aus demselben Grund "Wiring" genannt Grund.
Feilipu

1
Vielen Dank für die Informationen. Ich habe Ihren Beitrag aktualisiert, da ich denke, dass diese Informationen direkt Teil Ihrer Antwort sein sollten. Fühlen Sie sich frei, weitere Informationen hinzuzufügen, wenn Sie es für richtig halten!
jfpoilpret

3

TinySafeBoot ist eine Alternative für ATtiny- und ATmega-Geräte.

  • Kompatibel mit vielen ATtinys und ATmegas (siehe unten)

  • Lese- / Schreibzugriff auf Flash und EEPROM.

  • Alle für die serielle Kommunikation verfügbaren E / A.

  • Eindraht, auch mit mehreren AVRs in einer Leitung

  • Autobaudierendes, robustes Protokoll.

  • Aktiviert durch Zurücksetzen + Passwort (optional)

  • Passwort und Timeout Benutzer jederzeit änderbar.

  • "Emergency Erase" zur Überwindung verlorener Passwörter - löscht alle Daten, lässt den Bootloader jedoch intakt.

  • ATtinys: ~ 550 Bytes,

  • ATmegas: <512 Bytes (!)

  • TSB for ATtiny kann sich selbst aktualisieren.

  • Der Quellcode ist freie Software (GPL)


Weiß jemand, wie TSB mit Optiboot verglichen wird? Das letzte Update scheint mindestens 2 Jahre her zu sein ...
Johny, warum

1

Gibt es Alternativen zum Optiboot-Bootloader?

Äh ... nicht wirklich. Es gibt tatsächlich eine [inoffizielle] Änderung an Optiboot, um das Hochladen zu beschleunigen .

So installieren Sie die Variationen mit hoher Baudrate…

  • Stellen Sie sicher, dass die Arduino IDE nicht ausgeführt wird
  • Laden Sie das 7-Zip-Archiv über den obigen Link herunter
  • Extrahieren Sie die drei Dateien in das folgende Verzeichnis: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Öffnen Sie die Datei board.txt im folgenden Verzeichnis: {Arduino Installation Root}\hardware\arduino\

Finden Sie diesen Abschnitt darin:

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

Fügen Sie den folgenden Abschnitt hinzu…

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
  • Ändern Sie die beiden hervorgehobenen Werte in die Baudrate, die Sie verwenden möchten: 250000, 500000 oder 1000000 Speichern und schließen Sie die Datei board.txt
  • Installieren Sie den neuen Bootloader mit Ihrem bevorzugten ISP-Programmierer. Vergessen Sie nicht zu: Stellen Sie sicher , das Arduino Uno / Upload Schnell Board gewählt wurde (Tools / Board) , gegebenenfalls sorgen für die serielle Schnittstelle Ihres Programmierer ausgewählt (Tools / Serial Port) , Sicherstellen , dass der Programmierer ausgewählt (Tools / Programmer ) , Ändern Sie nach der Installation des Bootloaders den seriellen Port in den seriellen Port Ihres Arduino Uno .

Der obige Text wurde aus Gründen der Kompatibilität mit der Site leicht geändert. Ursprünglicher Beitrag


Abgesehen davon und dem ATmegaboot-Bootloader können Sie keine Alternative finden. Ich würde mir vorstellen, dass Arduino, wenn es auf alle jemals produzierten Unos geladen wird, ziemlich optimiert ist. Der obige Hack beschleunigt die Upload-Zeit, verringert jedoch nicht die Größe des Bootloaders. Sie können auch die Wartezeit auf dem Bootloader entfernen, damit dieser schneller gestartet wird.

Wenn Sie sich Gedanken über die Maximierung von Flash machen, lesen Sie: So verkleinern Sie eine Skizze und diese Antwort [on on Was kann ich tun, wenn mir der Flash-Speicher oder der SRAM ausgehen? ].

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.