AVR Bootloader in C, geht mit mega8 nicht

OP #3023654
Lesenswert?
• ▲
▼
Hallo allerseits,


ich wollte mal zu Übungszwecken, möglichst ohne zu Denken dieses 
Tutorial

http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung

ausprobieren, da ich erst Erfahrung mit dem Bootlader sammeln wollte, 
bevor ich das IRMP nachbaue. Also habe ich mir das erst mal ausführlich 
durchgelesen.

Nun hatte ich mir extra bei Reichelt mehrere Mikrocontroller-Typen 
bestellt, damit ich in solchen Fällen genau den richtigen aus der Kiste 
ziehen kann, der im Tutorial vorgeschlagen wird. In diesem Fall war der 
Mega88 defekt!! Kam schon mit verbogenen Pins an. Ebenso die beiden 
Mega168-Exemplare. Was geht, sind die Mega8-8-Typen und die 
Mega8-16-Typen, die einwandfrei ankamen. Mega48er sind auch einwandfrei. 
Deshalb stehe ich jetzt in der Not, das Programm aus dem Tutorial an den 
Mega8 anpassen zu müssen, denn es macht schlicht nichts! das heißt, 
nicht ganz: eine Kontroll-LED vor der Schleife eingefügt, blinkt. 
Startet das Programm immer wieder neu? Ich mußte im Datenblatt nachlesen 
wegen der "BOOTRST-Fuse" und der Einstellung "BOOTSZ auf 1024 words".

Folgende Fuses habe ich auf 1 (=unprogrammed) gesetzt: BOOTSZ1, BOOTSZ0, 
BOOTRST, CKSEL2 ->8MHz

hier noch ein Ausschnitt aus main.c:

    /* Interrupt Vektoren verbiegen */

    char sregtemp = SREG;
    cli();
  temp = GICR;
  GICR = temp | (1<<IVCE);
  GICR = temp | (1<<IVSEL);
    SREG = sregtemp;

....
     cli();
Enable change of Interrupt
    GICR = (1<<IVCE);
    Move interrupts to boot Flash section
    GICR = (1<<IVSEL);*/


Also wenn die Geschichte mit den IVCE und IVSEL-Bits nicht stimmt, geht 
es im nächsten Schritt wieder schief, wenn der "echte" Bootlader dran 
kommt. Siehe "main.c"

Diese UART-Library habe ich verwendet:
http://beaststwo.org/avr-uart/Updated%20_UART_Library.zip

Der Programmcode erscheint in Ponyprog ab Adresse 1800 hex. Wie 
erwartet.

Es erscheint in AVR-Studio 4.18 folgende Warnung:
../main.c:38: warning: unused variable 'p_mode'


Hat da jemand vielleicht eine Idee, was ich da ändern könnte?

mit freundlichem Gruß
Angehängte Dateien:
#3023721
Lesenswert?
• ▲
▼
Christian S. schrieb:
> Nun hatte ich mir extra bei Reichelt mehrere Mikrocontroller-Typen
> bestellt, damit ich in solchen Fällen genau den richtigen aus der Kiste
> ziehen kann, der im Tutorial vorgeschlagen wird. In diesem Fall war der
> Mega88 defekt!! Kam schon mit verbogenen Pins an. Ebenso die beiden
> Mega168-Exemplare.
Bieg die Pins gerade, fahr zu Reichelt und nagel den Idioten die Dinger 
an die Backe.
Aber das hilft dir ja jetzt nicht weiter.

Christian S. schrieb:
> Enable change of Interrupt
>     GICR = (1<<IVCE);
>     Move interrupts to boot Flash section
>     GICR = (1<<IVSEL);*/

Diese Tutorial ist eigentlich gar nicht schlecht. Aber die 
Interruptgeschichte ist einfach ein bisschen oversized. Ein Bootloader 
macht nichts anderes als Daten empfangen und diese ins Flash zu 
schreiben.
Er wartet auf Daten und wenn die da sind, brennt er die. Ein Interrupt 
ist da vollkommen überflüssig.
Den Uart kann man dann auch genau so gut pollen und sich die 
Umschalterei mit den Vektoren sparen.

mfg.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.