AVR bootloader per bootloader überschreiben (fastboot)?

Gast #6657841
Ich nutze fastboot 
(https://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger) 
auf einem attiny45, habe reset deaktiviert und muss den bootloader 
ändern - ohne HV-Programmer.

Gibt's irgendwo ein Programm, in dem ich den neuen Bootloader als Daten 
(hex, bin?) einfügen kann, und das diese dann an die richtige Adresse 
schreibt (und sich evtl. selbst löscht)?

Beim nächsten Reset läuft dann der neue Bootloader und ich kann die 
eigentliche Anwendung übertragen...
Gast #6657915
Sollte aber doch bei einem ATtiny45 möglich sein, oder? Zumindest finde 
ich auf die Schnelle nichts Gegenteiliges im Datenblatt.
  Wobei ich selbst HV-Programmierung vorziehen würde, ist einfacher und 
schneller.
#6657923
Solch ein Programm kann man sich natürlich bauen. Es hat Ähnlichkeit mit 
dem russischen Roulett. Um den neuen Bootlader zu programmieren muss es 
den alten löschen. Wenn nun ein Fehler auftritt oder der neue Bootlader 
eine Macke hat, steht man dumm da. Ich rate dringend davon ab.
Gast #6658054
S. Landolt schrieb:
> modifizierte fastboot

Bestimmt, das wäre für mich aber ein großer Umbau in Assembler. Da geht 
umlöten schneller.
Statt Schnittstelle gibt es Daten aus dem Flash und die Zieladresse ist 
nicht am Ende vom Bootloader sondern irgendwo am Anfang.
Gast #6658071
Hier ist, was ich suche, aber ich kann es nicht benutzen:

https://github.com/micronucleus/micronucleus/blob/master/firmware/upgrade.c

    // Upgrade is an in-place firmware upgrader for tiny85 chips
    // The 'bootloaderAddress' variable in bootloader.h, and the 
bootloaderData
    // progmem array with the bootloader data, are generated by the 
makefile.
    //
    // Upgrade will firstly rewrite the interrupt vector table to 
disable the bootloader,
    // rewriting it to just run the upgrade app. Next it erases and 
writes each page of the
    // bootloader in sequence, erasing over any remaining pages leaving 
them set to 0xFFFF
    // Finally upgrader erases it's interrupt table again and fills it 
with RJMPs to
    // bootloaderAddress, effectively bridging the interrupts in to the 
new bootloader's
    // interrupts table.
    //
    // While upgrade has been written with attiny85 and micronucleus in 
mind, it should
    // work with other bootloaders and other chips with flash self 
program but no hardware
    // bootloader protection, where the bootloader exists at the end of 
flash
    //
    // Be very careful to not power down the AVR while upgrader is 
running.
    // If you connect a piezo between pb0 and pb1 you'll hear a bleep 
when the update
    // is complete. You can also connect an LED with pb1 positive and 
pb0 or gnd negative and
    // it will blink


https://github.com/micronucleus/micronucleus/blob/master/firmware/Makefile#L145

Wie kann ich ein eigenes .hex bzw. .bin dort einbauen? Inwiefern muss 
ich auf Adressen / die Größe von fastboot aufpassen?
Gast #6658105
folgendes auskommentiert:

    main.bin:  $(OBJECTS)
    #  @$(CC) $(CFLAGS) -o main.bin $(OBJECTS) $(LDFLAGS)
    #  @avr-objdump -d -S main.bin > main.lss

    main.hex:  #main.bin

das bin kann man erzeugen mit avr-objcopy.exe -I ihex boot.hex -O binary 
boot.bin

mal schauen, ob das funktioniert...
Gast #6658148
S. Landolt schrieb:

> Sollte aber doch bei einem ATtiny45 möglich sein, oder?

Das ist generell möglich, zumindest so lange keine Lockbits gesetzt 
sind. Allerdings muss man dazu natürlich die bestehende "Infrastruktur" 
benutzen, d.h. den alten Bootloader, zumindest einen kleinen Teil davon.

Machbar ist das. Aber wohl nicht für den TO...
#6658195
Man kann eine Applikation schreiben (einen sogenannten Bootloader 
Updater), welche den Bootloader austauscht.

Diese Applikation flasht man mit dem alten Bootloader.
Die Applikation startet und überschreibt den alten Bootloader mit dem 
neuen.

Währenddessen darf aber nichts schieflaufen. Weil sonst startet der 
Kontroller nicht mehr.

Danach kann man wieder eine normale Applikation flashen.
#6658694
Was willst Du denn mit der ganzen Aktion eigentlich erreichen?

Der Sinn eines Bootloaders ist, daß er nach dem Reset immer als erstes 
ausgeführt wird und so das Laden einer neuen Applikation ermöglicht. 
Insbesondere, wenn eine Applikation fehlerhaft oder unvollständig ist.
Gast #6658763
Genau - und jetzt soll eben, einmalig, die "neue Applikation" ein 
geänderter Bootloader sein; für den Autor von fastboot wäre das sicher 
eine fünfminütige Fingerübung.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.