PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme Flash Bootloader AtMega2560



The Dude
24.07.2014, 01:33
Hallo Forum,
Ich bin derzeit dabei einen Bootloader für einen AtMega2560 zu
schreiben,
das Programm entspricht dem in dem Mikrocontroller-Artikel
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
Zusätzlich dazu frage ich lediglich den EEPROM auf eine Flag ab und
resette am Ende eines erfolgreichen Flash-Vorgang mithilfe des
Watchdogs.
Allerdings würde ich hier nicht posten, wäre kein Problem aufgetreten
und da der Fehler sehr seltsam ist, bin ich auch relativ ratlos:
Der Flashvorgang wird erfolgreich ausgeführt (Der Parser des Bootloaders
meldet keine Fehler beim Empfang der HEX über UART), ABER: Die ersten
Zeichen des Flash werden nicht beschrieben, sie lauten alle 0xFF, das
heißt, der Botloader löscht diese Zeichen, aber beschreibt sie nicht
wieder.
Dazu kommt, es ist immer das selbe Muster (das ich nachreichen werde,
sobald ich nochmal Zeit dazu habe den Fehler zu reproduzieren) und ich
habe keine Hinweise darauf gefunden, was der Fehler sein könnte, ich
vermute mal es ist irgendwas dämliches, aber Fakt ist ich komme nicht
drauf.
Ich habe nichts im Internet gefunden, was mein Problem umschreibt. Es
wurde nur irgendwo darauf hingewiesen, man solle doch die Brownout Fuse
setzen, was das Problem ebenfalls nicht behoben hat.
Ich habe auch mit der Optimierung rumgespielt, ebenfalls ohne Erfolg...
Wie hoch stehen die Chancen, das das Problem nicht 50cm vorm Monitor
sondern im AVR-GCC Compiler liegt?
Das einzige was ich mir vorstellen kann (da ich die Funktion zum
beschreiben des Flash nicht verändert habe) das ich irgendwo nen
Overflow produziert habe, aber da bis auf die ersten Zeilen der Rest
korrekt beschrieben wird, halte ich das für unwahrscheinlich.
Wie wahrscheinlich ist es, das das auslesen des EEPROM am Anfang des
Bootloaders und das beschreiben des EEPROMs am Ende des Bootloaders
Einfluss auf den Flash hat?
Würde mich sehr freuen, wenn mir jemand helfen könnte

Wsk8
24.07.2014, 09:23
Das einzige was ich mir vorstellen kann (da ich die Funktion zum
beschreiben des Flash nicht verändert habe) das ich irgendwo nen
Overflow produziert habe, aber da bis auf die ersten Zeilen der Rest
korrekt beschrieben wird, halte ich das für unwahrscheinlich.
Was heißt nicht verändert??
Die Register müssen für den Mega2560 angepasst werden. Zudem hat dieser µC mehr als 128kb flash. Das muss auch noch hinzugefügt werden.

Eine Besonderheit ist zu beachten, wenn der verfügbare Flash-Speicher größer als 128kB ist. In der Regel wird der Bootloader im oberen Teil des Speichers liegen und daher ist ein einfacher Rücksprung mit normaler 2Byte Wordadressierung nicht möglich. Leider hat gcc hier einen Bug und verwendet das vom Controller zusätzlich herangezogene Register EIND nicht. Dieses Register muß daher explizit vor dem Rücksprung auf 0 gesetzt werden.

Das sollte auch beachtet werden:

Die erweiterten Adressräume (HEX-Zeilentyp 2 bis 5) werden noch nicht unterstützt. Für ATmega-Devices mit > 64K Flash muss der Bootloader noch erweitert werden.



Wie wahrscheinlich ist es, das das auslesen des EEPROM am Anfang des
Bootloaders und das beschreiben des EEPROMs am Ende des Bootloaders
Einfluss auf den Flash hat?
Wie wärs, wenn du einfach die E2PROM Abfrage entfernst und es dann probierst?? Wobei es aber vermutlich nicht daran liegt, sondern an einem anderem (vermutlich vorher genanntem) Problem.

mfg