Forum: Compiler & IDEs AVR Bootloader in C, geht mit mega8 nicht


von Christian S. (roehrenvorheizer)


Angehängte Dateien:

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ß

von Thomas E. (thomase)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.