Es handelt sich um einen ATxmega256A3AU der mit dem internen 32MHz betrieben und unter Assembler programmiert wird und durch PDI mit dem Atmel Studio 6 verbunden ist. In das EEprom schreiben oder aus dem EEprom lesen funktioniert sehr gut. Jetzt wollte ich den EEprombereich durch die Software Erasen, also alle Speicherstellen im EEprom löschen bzw. auf 0xFF zurück setzen. Aber das funktioniert aus meiner Software heraus nicht! Wenn ich mit dem Programmiertool aus dem Atmel Studio und einem Programmer über PDI das Erase mache, dann funktioniert es. Stelle mal den verwendeten Code ein: eeprom_erase: nvm_eeprom_busy_check_1: lds r16, NVM_STATUS ;Prüfen, ob NVM noch Busy oder nicht sbrc r16, 7 rjmp nvm_eeprom_busy_check_1 ldi r16, NVM_CMD_ERASE_EEPROM_gc ;Erase EEprom Kommando laden (0x30) sts NVM_CMD, r16 ldi r16, 0b00000001 ;Bit0=CMDEX mit 1 vorladen ldi r17, 0xD8 ;Signatur zum Freischalten laden out CPU_CCP, r17 ;Schreibschutz für NVM_CTRLA aufheben. sts NVM_CTRLA, r16 ;CMDEX Bit0 jetzt auf 1 setzen und Befehl ausführen nvm_eeprom_busy_check_2: lds r16, NVM_STATUS ;wieder warten bis NVM fertig sbrc r16, 7 rjmp nvm_eeprom_busy_check_2 ldi r16, NVM_CMD_NO_OPERATION_gc ;KEIN Kommando in NVM_CMD laden sts NVM_CMD, r16 ret ;FERTIG! FUNZT ABER NICHT! Ich habe jetzt das Datenblatt schon mehrere male durchgesehen und auch die zusätzlichen Dokumente auf der Microchip Seite. Habe hier im Forum alles was mit ATxmega zu tun hat durchgeschaut. Ich kann keine andere Information finden, als den Ablauf, den ich auch Programmiert habe: 1. Warten bis NVM nicht mehr Busy ist. 2. Kommando für das Erase in das NVM_CMD Register schreiben 3. Den Schreibschutz für 4 Take für das Register NVM_CTRLA aufheben 4. NVM_CTRLA Register Bit0 mit 1 beschreiben und damit das Kommando ausführen. 5. Warten bis NVM fertig ist. Daran habe ich mich doch in meinem Programmcode gehalten. Aber nachdem diese Routine durchlaufen wird, ist der EEprom noch immer gefüllt mit den Werten die mal eingeschrieben wurden. Hier im Forum habe ich gelesen, das bei 32MHz Takt der Zugriff auf EEprom problematisch sein soll. Habe dann auf den internen 2MHz Takt "runter geschaltet", auch alle Interrupts abgeschaltet. Aber der EEprom wird enfach nicht erased! Da ich keine Idee mehr habe, wo der Fehler liegen könnte, bleibt mir nichts anderes mehr übrig, als hier mal um Rat zu bitten. Kennt eventuell jemand dieses Problem, oder könnte mir bitte dabei Helfen?
Tom schrieb: > Jetzt wollte ich den EEprombereich durch die Software Erasen, also alle > Speicherstellen im EEprom löschen bzw. auf 0xFF zurück setzen. Aber das > funktioniert aus meiner Software heraus nicht! Wenn ich mit dem > Programmiertool aus dem Atmel Studio und einem Programmer über PDI das > Erase mache, dann funktioniert es. Stelle mal den verwendeten Code ein: Fusbit EESAVE aktiviert? Vgl. Manual, Table 33-5. NVM commands available for external programming Fussnote 1: "If the EESAVE fuse is programmed, the EEPROM is preserved during chip erase." Evtl. "denkt" das Atmel Studio ja mit und deaktiviert das Fuse-Bit? Da ich dieses nicht verwende, kann ich dazu nichts sagen. Grüßle Volker
Volker B. schrieb: > Fusbit EESAVE aktiviert? Danke für den Tip. Bei den Fuses hatte ich wirklich noch nicht nachgesehen. Aber das EESAVE ist nicht aktiviert. Auch ist kein Bootloader aktiviert der eventuell irgendwelche Auswirkung auf das EEprom haben könnte. Also der ATxmega ist was die Fuses anbelangt noch im default oder Auslieferungsstadium.
Tom schrieb: > In das EEprom schreiben oder aus dem EEprom lesen funktioniert sehr gut Warum schreibst du dann nicht einfach 0xff an allen Adressen rein? Georg
Georg schrieb: > Tom schrieb: >> In das EEprom schreiben oder aus dem EEprom lesen funktioniert sehr gut > > Warum schreibst du dann nicht einfach 0xff an allen Adressen rein? > > Georg Georg schrieb: > Warum schreibst du dann nicht einfach 0xff an allen Adressen rein? Ja, daran hatte ich auch schon gedacht und das wäre auch möglich, weil das Beschreiben ja funktioniert. Auch vorhandene Datenwerte im EEprom kann ich problemlos mit neuen Datenwerten überschreiben. Die 4kByte würden auch in annehmbarer Zeit bei 32MHz Takt beschrieben sein. Aber, das wäre keine Lösung, so wie es vorgesehen ist. Das Kommando um den EEprom aufzufrischen gibt es ja und dann muss es auch funktionieren! Mir geht es in erster Linie darum, zu verstehen, was das Problem ist, warum es nicht funktioniert.
Hallo zusammen, ich habe das gleiche Problem wie Tom. Alle Versuche den "Erase" Befehl zum Laufen zu bekommen sind fehlgeschlagen. Das Bank-Erase geht auch nicht. Ich lösche das EEPROM in meinem XMEGA256A3 jetzt auch durch Beshreiben einzelner Bytes. Das dauert für den ganzen 4K Speicher dann aber eine gefühlte Ewigkeit. Ich hatte im Internet Hinweise gefunden, daß man auf jeden Fall die NVM-Adressen laden sollte, auch wenn das widersinnig beim Erase-Befehl erscheint. Geholfen hat das auch nichts. Da ich den Prozessor erst im Juni bei Digikey gekauft hatte, gehe ich von einer aktuallen Revision ohne den EEPROM Bug aus. Möglicherweise ist dieser Bug aber immer noch vorhanden. So langsam kommen mir Zweifel, ob ich nicht langsam die Finger von diesem Atmelzeug lassen sollte und auf TI oder ST umsteigen sollte. Die Atmel-Bugs haben ja mittlerweile ein traurige Tradition. Das ist ein Schlamperladen. Gruß, Dirk
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.