Hi,
ich versuche jetzt schon einige Zeit auf meinem Arudino-Uno Board
(atmega328P) ein kleines Programm zum Beschreiben des Eeproms zum Laufen
zu bekommen, aber leider ohne Erfolg.
Eigentlich lege ich nur ein Array im Eeprom an und flashe das dann mit:
1 | uint8_t eeData[] EEMEM = {[2] = 0x04, [3] = 0x00};
|
wird zu folgendem im eep-File
1 | :0400000000000400F8
|
2 |
|
3 | :00000001FF
|
Flashe ich das nun, so lese ich mittels avrdude das auch wieder aus
(siehe Bild eeprom_01). Wundern tut mich dabei, dass der Rest des
Speichers nicht einheitlich etwa mit "FF" beschrieben ist, so wie ich
das von meinem atmega644 kenne, sondern teils mit "08" und teils mit
irgendwelchem Kauderwelsch, ohne dass ich jemals was im Eeprom gemacht
habe.
Daraufhin wollte ich das Eeprom ablöschen, jedoch ohne Erfolg. Da war
mir klar, dass EESAVE evtl. nicht passen könnte. Leider kann ich aber
weder über die GUI in Eclipse noch über die Konsole mit avrdude die
Fuses auslesen. In der Konsole bekomme ich sowohl für lfuse als auch
hfuse nur
1 | :0100000000FF
|
2 | :00000001FF
|
War mir dann auch egal, ich lösche einfach das Eerpom "per Hand" in
meinem Code ab.
Nun funktioniert das aber auch nicht. Jeder Schreibbefehl führt nur
dazu, dass wieder Kauderwelsch beliebiger Größe am falschen Ort im
Eeprom erzeugt wird. Beispielsweise bewirkt folgender Befehl, was im
Bild eeprom_02 steht:
1 | eeprom_write_byte((uint8_t*)0x06, (uint8_t)0xAF);
|
Schön längsam bin ich ratlos. Warum nur funktioniert das alles nicht???
Ich bin schon am überlegen, ob da was mit meiner avr-libc nicht passt.
Ich habe da vor Uhrzeiten mal was gemacht, um mir die Speicherbelegung
in Prozent anzeigen zu lassen. Scheint aber alles auf dem neusten Stand
zu sein, oder?
avr-libc 1:1.6.7-1ubuntu2
gcc-avr 1:4.3.4-1