UpdateLoader

UpdateLoader Bildschirmfoto #1

UpdateLoader ist eine grafische Benutzeroberfläche für den AVR Bootloader FastBoot von Peter Dannegger.
Viele der vom Bootloader unterstützten AVR Mikrocontroller (Atmel ATtiny und ATmega) können mit dieser Benutzeroberfläche über eine serielle Schnittstelle programmiert werden.

Das Programm unterstützt die derzeit aktuelle Bootloader-Version 2.1 und ist vollständig Open Source (GPL) verfügbar.
Für die serielle Kommunikation kommt die SynaSer Bibliothek von Ararat zum Einsatz.


Downloads

Aktuelle Version: 2.3.0 vom 1. Mai 2023 (1,40 MB)
UpdateLoader (15516 Downloads )

Versionsinfo

  • 2.2.0.34 (09/2012): Neu erstellte Version (Grundlage: altes UpdateLoader-Projekt 2.1 von 2009)
  • 2.2.1.63 (12/2012): Neue Signaturen für ATmega328P, ATmega168P; UNC/UTF8-Pfade; Reset-Impuls auf der DTR-Leitung (RC1 für 2.2.1)
  • 2.2.1.72 (08/2013): Neuer Programmpaket-Modus, Veröffentlichung der vorigen Änderungen
  • 2.2.2.0 (10/2013): Verbesserte Fehlerbehandlung, 0x0D wird vor dem Passwort gesendet (Baudrate-Erkennung), Programmpaket direkt in der Oberfläche konfigurierbar, neuer Info-Tab
  • 2.2.3.0 (12/2013): Verbesserter Verbindungsaufbau, Unterstützung für kleine Pufferspeicher, Korrektur Pufferlänge
  • 2.2.4.0 (05/2014): Korrekte Anzeige der Ports, längere Timeouts für Bluetooth-Adapter
  • 2.2.5.0 (10/2015): Firmware-Passwort, invertierte Übertragung, ATmega64 Signatur, neuer Hex-Parser, GUI aufgeräumt
  • 2.3.0 (04/2023): Übersetzung (i18n), Update-Log speichern, SynaSer Update, Korrekturen

Bedienung

Die Bedienung des Programms ist selbsterklärend:
Nach dem Start den gewünschten COM-Port auswählen, Bootloader-Passwort eingeben, Firmware laden und das Update starten.
Während dem Update-Vorgang erfolgt eine Benutzerführung mit diversen Hinweisen und Statusanzeigen.

Als Firmware muss eine gültige Intel HEX Datei geladen sein bevor das Update gestartet werden kann.
Dateien mit nicht unterstützte Records (z.B. für die erweiterte Adressierung) können nicht geladen werden. Zur Kontrolle steht im erweiterten Modus eine Hex-Ansicht zur Verfügung.

Um den Bootloader zu starten muss der Mikrocontroller während dem Verbindungsaufbau zurückgesetzt werden (Reset-Taster, Spannungsversorgung unterbrechen). Wird ein USB-UART Wandler (z.B. beim Arduino Duemilanove) verwendet darf die USB-Verbindung dabei nicht unterbrochen werden!
Alternativ kann der Bootloader auch automatisch aktiviert werden. Dazu muss die Firmware z.B. über den Watchdog einen Reset auslösen sobald das Bootloader-Passwort oder ein Steuerkommando (Firmware-Passwort) empfangen wurde.

Erweiterter Modus

UpdateLoader Bildschirmfoto #2
Neben dem Eingabefeld für das Bootloader-Passwort kann der „Erweiterte Modus“ aktiviert werden. Alle Einstellungen können bei Bedarf auf dem Reiter „Sonstiges“ zurückgesetzt werden, anschließend muss die Firmware neu geladen werden.

Tipps zur Baudrate & Verbindungsaufbau

Während ein Datenblock zum Mikrocontroller gesendet wird kann die Benutzeroberfläche nicht aktualisiert werden, daher läuft besonders bei niedrigen Baudraten die Animation der Fortschrittsbalken nicht flüssig.
Falls der UpdateLoader den Verbindungsaufbau zu schnell abbricht kann die Anzahl der Verbindungsversuche heraufgesetzt werden. Bei jedem Verbindungsversuch wird ein Steuerzeichen für die Baudraten-Erkennung und das Bootloader-Passwort einmalig übertragen.

Vor dem Verbindungsaufbau kann der DTR-Pin einmalig getoggelt werden (high-low-high, 50ms). Über den DTR Ausgang kann der Mikrocontroller zurückgesetzt werden, z.B. indem Reset über 100nF mit DTR gekoppelt wird.
Die 1-Wire Erkennung sollte nur aktiviert werden wenn der Bootloader tatsächlich im Eindrahtmodus verwendet wird. Zusätzlich können die übertragenen Bytes invertiert werden, z.B. um mit invertierenden RS-485 Treibern oder Pegelwandlern arbeiten zu können.

Mit Version 2.2.5 kann vor dem Verbindungsaufbau (und wahlweise alle 10 Versuche) ein Firmware-Passwort übermittelt werden. Durch die Hex-Eingabe ($48$69 = 0x48 0x69 = ‚Hi‘) können beliebige Kommandos an die Firmware geschickt werden um den Bootloader automatisch aufzurufen.

Funktionen wählen

In der mittleren Spalte können die durchzuführenden Schritte ausgewählt werden. Es muss mindestens “Programmieren” oder “Überprüfen” aktiviert sein um den Update-Vorgang starten zu können. Vom Bootloader nicht unterstützte Befehle werden übersprungen und müssen nicht deaktiviert werden.

Mit der Auswahl “Meldungen ausblenden” wird die komplette Benutzerführung deaktiviert. Dazu gehören sämtliche Hinweistexte während dem Update (“Gerät jetzt ausschalten, …”) und nicht-kritische Warnmeldungen (fehlerhafte Signatur, Überprüfung deaktiviert). Außerdem wird das Fenster bei deaktivierten Meldungen nicht mehr im Vordergrund gehalten.

Um die geladene Firmware zu überprüfen kann die Hex-Ansicht in der Fenstermitte aktiviert werden, die Daten können jedoch nicht bearbeitet werden.

Deaktiviert man im Hauptbildschirm den erweiterten Modus, wird das nächste Update mit den Standardeinstellungen ausgeführt. Die selbst getroffenen Einstellungen werden nicht gelöscht und können durch Umschalten in den erweiterten Modus wieder aufgerufen werden.

Kommandozeilen-Parameter

Beim Start kann eine Einstellungsdatei oder eine Firmware übergeben werden („X:\UL>UpdateLoader-win32.exe firmware.hex“). Die Datei wird anhand der Erweiterung (.ini oder .hex) unterschieden.
Es wird nur ein Parameter ausgewertet, um Konfiguration und Firmware zu übergeben muss der Firmware-Pfad in der Konfiguration hinterlegt und die Einstellungsdatei übergeben werden.
Um verschiedene Konfigurationen zu verwalten kann die UpdateLoader.ini einfach kopiert und angepasst werden. Änderungen werden in die jeweils geladene Datei zurückgeschrieben.

Im Windows-Explorer lässt sich die gewünschte Datei einfach auf die Anwendung ziehen („Mit UpdateLoader für Fastboot V2.1 öffnen“) und wird automatisch als Parameter übermittelt.

Spezialmodus für Programm-/Update-Pakete

UpdateLoader Bildschirmfoto #3

Ab Version 2.2.1 kann der UpdateLoader zusammen mit einer Einstellungsdatei und einer Firmware als Update-Paket ausgeliefert werden.
Um Änderungen an der Konfiguration zu verhindern können Teile der Benutzeroberfläche gesperrt oder komplett ausgeblendet werden. Alle Änderungen werden beim Beenden verworfen und die Einstellungsdatei nicht neu geschrieben.
Der erweiterte Modus kann über die Paketoptionen ausgeblendet werden, die Einstellungen werden auch bei unsichtbarem Reiter beachtet.

Update-Paket erstellen

  1. Anwendung vorbereiten
    1. UpdateLoader und die Firmware-Datei in einem Ordner ablegen
    2. Programm starten, Firmware-Datei laden und alle Optionen (Passwort, Baudrate, ggf. erweiterte Optionen) passend setzen
  2. Paket-Modus aktivieren
    1. Optionen auf dem Reiter „Sonstiges“ einstellen
    2. Konfiguration speichern, Programm beenden
    3. UpdateLoader.ini mit einem Texteditor öffnen und den Firmware-Pfad prüfen. Im Eintrag „FirmwareFilename“ darf nur der Dateiname, kein absoluter Pfad gesetzt sein.
      Richtig: FirmwareFilename=Firmware.hex
      Falsch: FirmwareFilename=C:\Software\Updates\Firmware.hex
      (So wird die Firmware-Datei aus dem Ordner des Update-Pakets verwendet)
    4. Programm mit den neuen Einstellung testen
  3. Update-Paket archivieren

Optionen in der Einstellungsdatei

Alle Einstellungen werden in der Datei „UpdateLoader.ini“ gespeichert, manuelle Änderungen sind mit einem Texteditor möglich. Fehlt die Datei wird sie standardmäßig im Verzeichnis der Anwendung neu angelegt.

Hinweis: Ab Version 2.2.5 werden die erweiterten Einstellungen in der Sektion „Advanced“ gespeichert!
Sind die erweiterten Einstellungen deaktiviert verwendet UpdateLoader die Standardwerte.

Sektion [UpdateLoader]

OptionStandardFunktion
ComPort=n1Nummer des verwendeten Ports (COM1, …)*
BootloaderPassword=txtPedaBootloader-Passwort, muss mit Mikrocontroller überein stimmen (25 Zeichen)
FirmwareFilename=txtAbsoluter Pfad oder Dateiname der Firmware
Page=0-10Reiter 0 (Dateiauswahl, Start) oder Reiter 1 (erweiterte Optionen) zeigen**

*: Im Paketmodus ignoriert
**: Zeigt Reiter 0 wenn der erweiterte Modus deaktiviert ist, im Paketmodus immer 0

Sektion [Advanced]

OptionStandardFunktion
Enabled=1/=00Erweiterte Einstellungen (Reiter 2) freigeben
ProgramWrite=1/=01Firmware in Flash schreiben*
ProgramVerify=1/=01Flash mit Firmware vergleichen*
ProgramStart=1/=01Firmware nach der Aktualisierung starten
ReloadFile=1/=01Firmware-Datei vor jedem Update neu einlesen**
ShowMemory=1/=00Geladene Firmware in der Hex-Ansicht (2. Reiter) darstellen**
HideMessages=1/=00Benutzerführung deaktivieren
BaudRate=n1152004800-128000 Baud (siehe Auswahl im Programm)
ConnectTries=n250Verbindungsversuche (Passwortübertragungen, 4 Stellen)
DetectOneWire=1/=00Erkennung von 1-Draht Verbindungen aktivieren
ToggleDTR=1/=01DTR-Pin beim Verbindungsaufbau toggeln (Reset-Impuls erzeugen)
InvertCom=1/=00Übertragene Bytes invertieren
EnableFirmwareKey=1/=00Beim Verbindungsaufbau Firmware-Passwort übertragen
FirmwareKey=txtFirmware-Passwort (z.B. für Bootloader-Start, 75 Zeichen)***
FirmwareKeyOnce=1/=01FW-Passwort einmalig oder alle 10 Verbindungsversuche übertragen
FirmwareKeyParseMode=1/=00Firmware-Passwort lesen als 0=ASCII, 1=HEX ($48$69 = 'Hi')***
SaveLog=1/=01Verlauf als "*_UpdateLog.txt" im Firmware-Ordner speichern

*: Mindestens ein Schritt muss ausgewählt werden
**: Bei großen Dateien (ab 10kB) wird die Darstellung nach dem automatischen Neu-Laden deaktiviert um den Wechsel zwischen den Reitern zu beschleunigen
***: Das Firmware-Passwort kann in ASCII (‚Hi‘) oder in Hex-Darstellung ($48$69 = 0x48 0x69 = ‚Hi‘) eingegeben werden, zur Übertragung von Sonderzeichen (String-Terminator o.ä.) sollte die Hex-Eingabe verwendet werden.

Sektion [PaketMode]

OptionStandardFunktion
Enabled=10Aktiviert den Paket-Modus (immer "1")*
MiniGUI=1/=00Minimalistische Oberfläche (siehe Bilschirmfoto)**
ModalGUI=1/=00Fenster immer im Vordergrund halten
HideAdvancedMode=1/=00Option "Erweiterter Modus" und Reiter ausblenden
LockFilename=1/=00Dateiname schreibgeschützt**
LockPassword=1/=00Passwort schreibgeschützt
HidePassword=1/=00Eingabefeld für das Passwort ausblenden

*: Im Paketmdus werden keine Änderungen in die Einstellungsdatei übernommen.
**: Bei aktivierter Option kann die Firmware nicht manuell geladen werden. Das Programm bricht mit einer Fehlermeldung ab wenn die vorgewählte Datei nicht vorhanden ist.


Übersetzung

In Version 2.3 wurde die Lazarus i18n Bibliothek eingebunden. Im Verzeichnis “bin/locale” liegen die Übersetzungen im .po-Format, das .mo-Format wird momentan nicht unterstützt. UpdateLoader versucht beim Start die richtige Sprache anhand der Systemeinstellungen zu laden. Alternativ kann man den Sprach-Code auch explizit per Kommandozeile vorgeben: „.\UpdateLoader-win32.exe –lang en“ für Englisch.

Eigene Sprache einbinden

Die Sprachdatei kann mit z.B. Poedit bearbeitet werden. Um eine neue Sprache hinzuzufügen, muss die vorhandene Datei “bin/locale/UpdateLoader-win32.po” kopiert und der Sprach-Code ergänzt werden – z.B. „dk“ (UpdateLoader-win32.dk.po) für eine dänische Übersetzung.

Falls jemand eine Übersetzung für den UpdateLoader zur Verfügung stellen möchte, freue ich mich auf eine Nachricht!


Tipps zum Kompilieren

Zum Kompilieren werden der Free Pascal Compiler und eine Lazarus-Installation benötigt.

Hinweis: Mit der neuen Lazarus IDE 1.6 (Februar 2016) wird auch der neue Free Pascal Compiler 3.0 ausgeliefert. In dieser Version wurden einige Units abgekündigt und z.B. das Verhalten von AnsiStrings verändert. Die alten Quelltexte (2015) können damit nicht mehr kompiliert werden! Bis eine aktualisierte Version zur Verfügung steht muss der alte Compiler verwendet werden.

Die letzte kompatible Version ist Lazarus 1.4.4 mit FPC 2.6.4 (lazarus-1.4.4-fpc-2.6.4-win32.exe).

UpdateLoader wurde als 32-Bit Anwendung erstellt um auf möglichst vielen System laufen zu können.

  • SynaSer-Bibliothek nicht gefunden
    Unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Pfade muss im Feld „Andere Units“ der folgende Pfad ergänzt werden: “..\lib\synaser”
  • Unbenutzte Variablen in der SynaSer-Bibliothek
    Fehler in Version 40 der Bibliothek, neuere Versionen erscheinen auf der Seite von Ararat Synapse
  • Intel-Hex Dateien werden nicht eingelesen, Byte-Variablen laufen über bzw. melden Bereichsfehler
    Für die Funktion „addWithOverflow“ aus tools.pas muss die Bereichsüberprüfung deaktiviert werden (Makros „{$R-}“ und „{$R+}“)

Bootloader

Jonas & Tim von „Pointless Circuits“ bieten einen Bootloader-Generator auf ihrer Seite an. Der Generator läuft online, nachdem man alle Einstellungen ausgewählt hat wird einfach der fertige Bootloader heruntergeladen.

6 Kommentare

  1. Hallo Leo,
    die „Pointless Circuits“-Seite mit dem Bootloader-Generator ist wieder online.

    Ich habe dort einen Bootloader für den Mega8 generiert.
    Mein Programmer will und lädt die Intel-Hex-Datei aber nach 000 – 1FF.

    Von der Größe zwar richtig, aber an falscher Stelle.
    Andere Bootloader z.B. TSB werden richtig nach 1E00 geladen.

    Ist dir da was bekannt?

    Ich verschiebe den Bootloader mal nach 1E00, schauen wir mal.

    Gerd

  2. Hallo Leo,

    will mich mal in die Bootloader-Systematik einarbeiten. Danke für Dein tolles Programm!

    Ein kleiner Hinweis: die „Pointless Circuits“-Seite mit dem Bootloader-Generator ist wohl nicht mehr online, ich finde sie nicht.

    Viele Grüße
    Günter

    • Hallo Günter,
      freut mich dass mir mein Programm gefällt!
      Danke für den Hinweis, ich lasse den Link erst mal drin, vielleicht funktioniert deren Seite bald wieder. Im mikrocontroller.net Wiki stehen auch viele Tipps, der Bootloader lässt sich leicht selbst kompilieren.
      Grüße
      Leo

  3. Hallo Leo,
    schön, dass mein Vorschlag Anklang findet.
    Ich kann mir vorstellen, dass das auch viele andere User gut gebrauchen können.

    Bisher habe ich immer nur das von dir bereits fertig erstellte Programm verwendet, es gab bisher auch keinen Grund für mich eine eigene Version zu erstellen. Ich werde das demnächst mal ausprobieren.

    Nochmals besten Dank,
    Stephan Weck

  4. Hallo Leo,

    erstmal vielen Dank für den UPDATELOADER.
    Dieses Programm hat mir den Bedienungskomfort von FastBoot deutlich erhöht, ich habe es oft im Einsatz.

    Eine Anregung für eine evtl. zukünftige Version hätte ich da noch:
    Ich würde gerne die ToggleDTR Option verwenden, um den Mikrocontroller automatisch zu resetten.
    Aber leider ist der das DTR Signal bei den meisten USB/UART-Wandlermodulen nicht nach außen beschaltet.
    Ich verwende z.B. die Module MM232R, UB232R und UMFT234XF von FTDI Chip.
    Diese besitzen keinen DTR- wohl aber einen RTS-Pin.
    Könnte man alternativ zu DTR auch RTS zum Resetten des Mikrocontrollers verwenden?

    Viele Grüße,
    Stephan Weck

    • Hallo Stephan,
      freut mich sehr dass du den Updater erfolgreich einsetzt!

      Deine Anregung werde ich in der nächsten Version umsetzen, danke dafür.
      Wenn du nicht bis dahin warten willst, kannst du dir selbst eine Version mit RTS statt DTR erstellen!
      Dazu brauchst du nur in „protocol.pas“ bei TBootloaderRoutines.connect alle „serialConnection.DTR“ durch „serialConnection.RTS“ ersetzen.
      Einen kleinen Fallstrick gibt es beim Compiler: Du musst die ältere Lazarus Version 1.4.4 „lazarus-1.4.4-fpc-2.6.4-win32.exe“ verwenden. Die neueren Versionen haben Änderungen für Unicode, die mit den alten Quelltexten nicht kompatibel sind. Viel Erfolg!

      Beste Grüße
      Leo

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert