Guten Abend allerseits,
ich habe einen Bootloader auf meinem ATmega2560 der eigentlich von einem
anderen, kleineren ATmega kommt.
Solange ich Hex file mit einer Größe von <128k hochlade klappt auch
alles wie es soll. Ab 128k gib es Probleme.
Jetzt habe ich mir im Hexfile angesehen wie die ersten Byte nach der
Adresserweiterung (:020000022000DC) aussehen.
und habe diese dann im output von avrdude ( im verbose mode ) gesucht
und gefunden.
Die Adresse an die avrdude schreiben will läuft über und beginnt wieder
bei 0000 was auch Sinn macht da mit 0xFFFF = 64k eben die maximale WORD
Adresse erreicht ist ( "Byte adresse" 128k-1 ) die eben in 16 bit
passen.
Daher dachte ich mir: Könnte ich nicht in meinem Bootloader testen ob
gerade zum ersten oder zum zweiten mal auf die adresse 0x0000
geschrieben werden soll, und wenn es das zweite mal ist "einfach" 128k
aufaddieren?
Aktuell macht der Bootloader ohnehin schon so einen trick:
if (address.byte[1]>127 ) address_high = 0x01;
else address_high= 0x00;
RAMPZ = address_high;
address.word = address.word << 1; //address * 2 -> byte location
also dachte ich mir ich mache da folgendes draus:
if (address.byte[1]>127 && lower_round!=1) address_high=0x01;
else if(address.byte[1]<=127 && lower_round==1) address_high=0x02;
else if(address.byte[1]>127 && lower_round==1) address_high=0x03;
else address_high = 0x00;
Das ganze läd auch brav hoch, aber danach ist quasi kein lauffähiges
Programm auf dem AVR ... sieht jemand auf Anhieb den Fehler ?