Forum: Mikrocontroller und Digitale Elektronik Freescale S12X EEPROM, Hilfe!


von leo M. (lm1)


Lesenswert?

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

von peterguy (Gast)


Lesenswert?

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.

von leo M. (lm1)


Angehängte Dateien:

Lesenswert?

laut Datenblatt müsste er eigentlich 4k EEPROM, 256K Flash und 14k Ram 
haben!

http://cache.freescale.com/files/microcontrollers/doc/data_sheet/MC9S12XDP512RMV2.pdf?fpsp=1&WT_TYPE=Data 
Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation

von Prädator (Gast)


Lesenswert?

Wenn der Bauer nicht schwimmen kann, liegts an der Badehose!

von Christian G. (christiang)


Lesenswert?

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

von leo M. (lm1)


Lesenswert?

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!!!

von Joerg W. (joergwolfram)


Lesenswert?

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

von leo M. (lm1)


Lesenswert?

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

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