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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.