Freescale S12X EEPROM, Hilfe!

OP #3172727
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
#3173063
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
OP #3173499
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!!!
OP #3173583
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.