Hello, Guest the thread was called1.7k times and contains 9 replays

last post from for(;;) at the

XS-1541 Bootloader

  • Weil es immer wieder angefragt wird, wie man Firmware Updates in das XS-1541 bringt ohne Programmer, - die Lösung ist ein Bootloader. Ich habe mehrere Bootloader ausprobiert und finde den von Martin THOMAS sehr praktisch.


    Der Bootloader von Martin THOMAS braucht nur 2K Speicher und arbeitet direkt mit HEX Dateien. Zudem braucht es am PC keine besondere Software. Es genügt das Programm AVR-Prog das beim AVR Studio dabei ist und kostenlos von Atmel geladen werden kann.


    Die Fuse BOOTSZ wird auf flashsize=1024 gesetzt und das BOOTRST Bit wird gelöscht (Highfuse auf 0xDC). Dazu wird das Lockbit BLB1 gesetzt auf "SPM prohibited" (Lockbit auf 0xEF) damit der Bootloader geschützt wird.


    Der Bootloader wartet nach einem Reset 3 Sekunden lang auf Aktivierung, dann wird das XS-1541 gestartet. Die Aktivierung erfolgt durch Eingabe eines großen 'S', das der AVR-Prog beim Starten sendet. Man muss also den AVR Prog unmittelbar nach einem Reset starten. Alternativ dazu kann man das S auch vom Terminalprogramm aus senden und den Bootloader quasi manuell starten.
    Danach erkennt AVR Prog das Modul als Programmer. Nicht vergessen dass Terminal Programm beenden bevor AVR Prog gestartet wird, sonst ist der COM Port belegt und AVR findet das Modul nicht.



    Den Sourcecode des Bootloader gibt es hier: klick



    Anbei der Bootloader für den Atmega644 - brennfertig. Hex Datei flashen, Fuses setzen und freuen ...
    .

  • Ich würde den bootloader ja gerne nutzen, habe jetzt aber schon wieder Stunden verbraucht und bekomme ihn nicht ans laufen.


    Ich habe einen STK200-kompatiblen Parallelport-Programmierer und würde das gerne unter Linux (zur Not auch unter XP) installieren.


    Hat das schon jemand gemacht und kann mir jemand detaiillertere Anweisungen geben?
    Ich glaube, das flashen und fuses setzen hat wohl geklappt, jedenfalls bekam ich einmal eine Meldung AVRBOOT im Terminal-Programm. Aber wie genau (im Detail) spiele ich dann die XS-Firmware mit dem Bootloader auf?

  • Leider hab ich von Linux keine Ahnung. Unter XP ist das ganz easy:

    • Board resetten
    • innerhalb von 3 Sekunden das AVR Prog aufrufen


    Wenn man zu langsam war, dann meldet das AVR Prog einen Fehler. Sonst kommt es mit dem üblichen Dialog wo man dann flashen, lesen, verifizieren kann.


    .

  • für AVRdude braucht es eine eigene Variante des Bootloader.

    ja? Wieso? Was ist da anders?


    Ich habe es jetzt mit der bestehenden hinbekommen.


    Danach wollte ich mir noch ein schönes Script schreiben, das den Vorgang automatisiert und dabei habe ich mir die Fuses zerschossen und mich von meinem einzigen 644er ausgesperrt - zu blöd, ganz blöder Flüchtigkeitsfehler...
    Aber es lief jedenfalls.


    Ich wollte sowieso noch ein paar Teile bestellen, dann kommen da eben noch ein paar 644er dazu.


    Ablauf jedenfalls wie folgt:


    Ich habe den Bootloader von main.hex nach bootloader.hex umbenannt, daher:


    Flashen des Bootloaders:

    Code
    1. avrdude -v -c stk200 -P /dev/parport0 -p m644p -U flash:w:bootloader.hex:i


    Natürlich würde die Syntax von avrdude es erlauben, das Flash und die Fuses alle auf einmal zu schreiben. In der Praxis hat sich avrdude oder der Atmel aber dabei zickig angestellt, deswegen jetzt hier alles einzeln, dann ging es immer:


    low fuse:

    Code
    1. avrdude -v -c stk200 -P /dev/parport0 -p m644p -U lfuse:w:0xFF:m


    high fuse:

    Code
    1. avrdude -v -c stk200 -P /dev/parport0 -p m644p -U hfuse:w:0xD4:m


    ext'd fuse:

    Code
    1. avrdude -v -c stk200 -P /dev/parport0 -p m644p -U efuse:w:0xFC:m


    lock fuse:

    Code
    1. avrdude -v -c stk200 -P /dev/parport0 -p m644p -U lock:w:0x2F:m


    Jetzt ist der Teil mit dem ISP-Programmer fertig und über den frisch installierten Bootloader kann nun die Firmware aufgespielt werden:


    Reset drücken und innerhalb drei Sekunden absenden, also erst tippen, dann reset, dann ENTER drücken:

    Code
    1. avrdude -v -c avr109 -P /dev/ttyS0 -b 115200 -p m644p -F -u -U flash:w:XS1541-0.01.25-644p.hex:i


    Fertig! :-)


    Die high fuse habe ich von DC nach D4 geändert, um den EEPROM-Inhalt zu erhalten.
    Das Lock-Byte wäre zwar mit EF logisch richtiger, avrdude liest aber die nicht vorhanden Bits 6 und 7 als 0, also als programmiert ein und beschwert sich dann irrtümlich, daß die Programmierung nicht erfolgreich gewesen wäre. 2F ist der Wert, der sich ergibt, wenn man die ungenutzten Bits nicht auf 1, sondern auf 0 hat, daher wird hier direkt 2F verwendet um sich die Fehlermeldung zu ersparen.
    Das -u / -F ist erforderlich, da die Signatur nicht richtig erkannt wird, da wird wohl in der falschen Reihenfolge ausgewertet.


    Alles auf eigene Gefahr und wie gesagt: Vorsicht mit den Fuses, sonst sperrt man sich aus und braucht ein HV-Progger um das Ding wieder zugänglich zu machen.


    Der verwendete ISP-Programmierer war ein STK200-kompatibler, die verwendete avrdude Version: avrdude: Version 5.5, compiled on Nov 10 2007 at 00:07:28
    Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

  • Mit einem Highvoltage Programmer (zb. STK500 oder MyAvrUsbProg MK3) kannst du den 644er retten.



    Der Bootloader arbeitet klasse. Habe jetzt ca. 100 mal problemlos neu geflashed. Geht übrigens sauschnell über USB ...



    Im Source des Bootloader steht folgendes:

    Code
    1. /* Device-Type:
    2. For AVRProg the BOOT-option is prefered
    3. which is the "correct" value for a bootloader.
    4. avrdude may only detect the part-code for ISP */
    5. #define DEVTYPE DEVTYPE_BOOT
    6. // #define DEVTYPE DEVTYPE_ISP
  • Mit einem Highvoltage Programmer (zb. STK500 oder MyAvrUsbProg MK3) kannst du den 644er retten.


    Ich hoffe, ich kann das erst mal bei einem Freund machen... wollte mir eigentlich nicht so ein Ding besorgen und die Euros lieber anderweitig anlegen. Aber falls ich irgendwann einen Stapel 644er hier liegen habe ;-) sollte ich wohl mal über den Bau eines preiswerten HV-Programmierers nachdenken. Im Netz gibts ja fertige Anleitungen.


    Zwei 644er habe ich jetzt jedenfalls erst mal bestellt.


    AVRDUDE scheint nachgebessert worden zu sein, vermute ich mal, jedenfalls hat die Meldung AVRBOOT, die der Bootloader ausgibt und das -c avr109 gut zusammengearbeitet.

  • Scheint wieder zu laufen.


    Versehentlich habe ich 644er statt 644P erwischt.


    Wenn ich die "AVR508 Migration from ATmega644 to ATmega644p" richtig lese, scheint bei der P-Variante ein zweiter USART dazu gekommen zu sein und der Oszillator für besonders wenig Stromverbrauch bei langsamen Frequenzen optimiert zu sein - gehe ich Recht in der Annahme, daß beides für das XS-1541 uninteressant ist, ich also ohne weiteres auch die 644er ohne P verwenden kann?