Forum: Mikrocontroller und Digitale Elektronik AVR Bootloader für AT1280 wird nicht geflasht


von tsmc (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgendes Problem. Ich wollte für meinen ATmega1280 ein 
Bootloader schreiben. Also versuchte ich einen genau wie bei dem 
Tutorial „AVR_Bootloader_in_C_-_eine_einfache_Anleitung“ einen zu 
Programmieren.

Da dieser schon nicht funktionierte habe ich einfach Programm 
geschrieben das nur eine LED Toggeln lässt.
1
#include <avr/io.h>
2
3
#define LIFEBITCONT      PB3
4
#define LIFEBITCONT_PORT  PORTB
5
#define LIFEBITCONT_DDR  DDRB
6
7
int main()
8
{
9
  LIFEBITCONT_DDR |= (1<<LIFEBITCONT);
10
  do{  
11
    LIFEBITCONT_PORT ^= (1<<LIFEBITCONT);
12
  }while(1);
13
  return 0;
14
}

Flashe ich das Programm ohne der Linker Option (-Ttext=0x1E000) 
funktioniert das Programm wunderbar. Aber das Programm soll ja in die 
Bootloader Section.

Wenn ich das Programm mit der  Linker Option (-Ttext=0x1E000) Kompiliere 
und mir die HEX File anschaue sieht auch alles richtig aus, zumindest 
mit den Adressen. Das Programm fängt ab Adresse 0001E000 an und geht bis 
0001E125. Also alles im grünen Bereich.

Wenn ich dann aber das Programm Flashe , macht der µC nichts. Lese ich 
mir dann den Flash wieder aus und schaue mir das HEX File an steht 
nichts mehr drin.

Als Programmer benutze ich den AVRISP mkII.

Meine Fuses sollten auch richtig sein siehe Anhang.
Benutze ich den Bootlader  „AVR-Bootloader mit Verschlüsselung von Hagen 
Re“ funktioniert dieser ohne Probleme. Schau ich mir aber die HEX Datei 
an fängt dieser erst bei 0001FC00 an. Warum???

Ich hoffe das ihr mir helfen könnt.

Vielen Dank schon mal.

von tsmc (Gast)


Lesenswert?

Hat keiner eine Idee

von Georg G. (df2au)


Lesenswert?

In HEX Dateien sind die Adressen "Byte Adressen", der AVR organisiert 
seinen Programmspeicher aber Wortweise. Das hat bei GCC unter AVR-Studio 
zur Folge, dass du in den Speicheroptionen das Code Segment nach 0xf000 
legen musst (so steht es auch in deinem Bild der Fuses). Im Makefile 
steht dann aber 0x1e000.

Wenn nach dem Flashen nichts im Speicher steht, hast du nicht geflasht 
sondern nur simuliert.

Und noch ein Hinweis: das Code Segment heißt oft ".text" und nicht 
"text".

von marixstorm (Gast)


Lesenswert?

Hallo.

Aus https://github.com/baerwolf/USBaspLoader kann man sich ableiten:

(https://github.com/baerwolf/USBaspLoader/blob/master/firmware/Makefile)

LDFLAGS += --section-start=.text=0x1E000

Wichtig ist also die Option beim Linken. Ich vermute mal, du hast Sie 
beim Kompilieren dem avr-gcc uebergeben.

MfG marixstorm

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.