AVR bootloader per bootloader überschreiben (fastboot)?

Gast #6657841
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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 #6658071
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren