Freescale S12X EEPROM, Hilfe!

OP #3172727
Hallo zusammen,

ich bin schon lange passiver und eifriger Leser und habe hier schon 
viele gute Antworten, Beispiele und Anregungen gefunden. Weiter so ;) !

Nun stehe ich aber vor einem Problem das ich trotz intensiver Recherche 
und Langem rumprobieren noch nicht selbstständig gelöst bekommen habe.

Für ein Projekt innerhalb meines Studiums muss ich mit einem "Freescale 
MC9S12XD256" arbeiten und u.a. Werte mit dem ADC einlesen und auf dem 
internen EEPROM (und später auch evtl. FLASH) Speicher ablegen...
Aber die Geschichte mit dem EEPROM klappt momentan überhaupt nicht, ich 
kann zwar Werte aus dem EEPROM(innerhalb des Lokalen-Adressraums) 
auslesen aber Schreiben und Befehle (wie z.B. "Mass Erase") wollen 
nicht.

...wenn mir jemand helfen kann wäre ich echt dankbar!


gruß leo
Gast
Hat der S12X überhaupt ein echtes EEPROM?

Ich hab für den S12X vor ein paar Jahren mal die EEPROM emulation von 
Freescale in Betrieb genommen, weil mein Derivat kein EEPROM hatte.
Na so schwer ist das doch nicht.
Das EEPROM-Modul initialisieren (ECLKDIV, max. Taktfrequenz beachten) 
und dann die Statemaschine aus dem Datenblatt eins zu eins nachbauen. 
Schon kannst du löschen und schreiben.
Ganz wichtig ist natürlich, dass du immer nur vier Byte am Stück 
schreiben bzw. löschen (Ausnahme Mass Erase) kannst. Ansonsten steht 
eigentlich alles im Dateblatt. Einfach mal die paar Seiten ausdrucken 
und in Ruhe lesen, dann wird die Materie schnell verständlich.


Gruß,
Christian
OP
Sorry!  Ich sollte vlt. doch noch etwas weiter ausholen:

Ich hab auf meinem µC gezwungenermaßen das Monitorprogramm "TwinPEAKs" 
am Laufen, mit dessen Hilfe ich (über eine RS232 Schnittstelle) meine 
Programme landen und starten kann.
Die Programmierung erfolgt in Assembler und ich verwende für den Anfang 
nur den Adressraum  der LocalMemoryMap(0x0000 - 0xFFFF), das mit den 
Pages hab ich noch nicht so ganz verstanden :/

Mithilfe von TwinPEAKs habe ich schon beliebige Werte in den EEPROM 
geschrieben und mit einem Selbstgeschriebenen Programm wieder 
ausgelesen. So weit, so gut.

Nachdem ich jetzt ein Paar Werte in  meinem EEPROM stehen hab, dachte 
ich mir ich versuch erst mal nen MassErase.
Natürlich habe ich schon das Datenblatt zu Rate gezogen und dabei kam 
folgendes raus:


  INCLUDE "s12x.inc"


  ORG $1000    ;Ram Start


  MOVB #$CA,ECLKDIV   ;ClockPrescaler einstellen für 16MHz Quarz
  MOVB #$00,ECNFG      ;EEPROM-Interrupts aus
  MOVB #$FF,EPROT    ;EEPROM-Protection aus



w1:  BRCLR  ESTAT,#$80,w1  ;Warte auf CBEIF = 1 -> EEPROM bereit


  MOVB #$30,ESTAT    ;ACCERR und PVIOL löschen(ACCERR=1,PVIOL=1)

  MOVB #$00,EDATAHI  ;EDARA = 0x0000
  MOVB #$00,EDATALO

  MOVB #$00,EADDRHI  ;EADDR = 0x0000
  MOVB #$00,EADDRLO

  MOVB #$41,ECMD    ;Befehl für MassErase

  MOVB #$80,ESTAT    ;CBEIF löschen (CBEIF=1) -> MassErase Starten



  JMP $F000    ;zurück zu TwinPEAKs


END


Das kleine Programm sollte einfach nur einen MassErase starten, tut aber 
nicht (Die Werte im EEPROM sind immer noch da).

Irgendwo mach ich was grundlegend Falsch!!!
Ich bin mir jetzt nicht ganz sicher, da ich zuletzt hauptsächlich mit 
dem S12XE zu tun hatte.
EADDR und EDATA braucht man nicht zu beschreiben, anstelle dessen müsste 
ein WRITE auf eine (beliebige) Adresse im EEPROM-Bereich genügen:

MOVB #00,$0C00

Jörg
OP
Hi, Jörg

danke du hast recht, EDATA und EADDR sind fürn Ar***, ich habs endlich 
jetzt hinbekommen!!!

  INCLUDE "s12x.inc"


  ORG $1000    ;Ram Start

  ;EEPROM Initialisieren
  MOVB #$CA,ECLKDIV   ;ClockPrescaler einstellen für 16MHz Quarz
  MOVB #$00,ECNFG      ;EEPROM-Interrupts aus
  MOVB #$FF,EPROT    ;EEPROM-Protection aus



w1:  BRCLR  ESTAT,#$80,w1  ;Warte auf CBEIF = 1 -> EEPROM bereit


  MOVB #$30,ESTAT    ;ACCERR und PVIOL löschen


  MOVW #$0000,$0800  ;Wort an eine Addresse des EEPROMs schreiben
  ;MOVB #$00,$0800   ;Move Byte geht nicht!!!


  MOVB #$41,ECMD    ;Befehl für MassErase (oder MOVB#$20,ECMD zum 
Schreiben)

  MOVB #$80,ESTAT    ;CBEIF löschen (CBEIF=1) -> Befehl ausführen


  JMP $F000    ;zurück zu TwinPEAKs


END

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.