Forum: Mikrocontroller und Digitale Elektronik Bootloader modifizieren für ATmega2560


von Kolja W. (-jkw-)


Lesenswert?

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 ?

von Kolja W. (-jkw-)


Lesenswert?

Also ich hab noch etwas debug hinzugefügt, er erkennt an der richtigen 
Stelle das es nun statt 0x01 0x02 in das RAMPZ schreiben muss ... 
scheint mir sinnig ... aber klappen tut es dennoch nicht ;)

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.