MSP430 FLASH beschreiben Problem

Gast #3927857
Lesenswert?
• ▲
▼
Hallo zusammen,

ich möchte eine bestimmte Variable im Falle eines Spannungsverlustes im 
Flash Speicher ablegen und Sie beim nächstern power on wieder auslesen, 
als Sicherung sozusagen.

Zunächst habe ich versucht überhaupt mal irgendeinen Wert zur Laufzeit 
im Flash abzulegen. Beim ersten Mal schreiben wird der Wert der Variable 
(Wert = 60) noch richtig abgespeichert. Beim nächsten Programmdurchlauf 
nur noch Blödsinn, Wert = 16, Wert = 0. Danach wird nur noch 0 
geschrieben.

Jemand eine Idee was hier schief läuft?
1
void write_memory (unsigned int value)
2
{
3
  unsigned int *Flash_ptr;               // Flash pointer
4

5
  Flash_ptr = (unsigned int *) 0xFF00;              
6
  FCTL2 = FWKEY + FSSEL0 + FN1;
7
  FCTL3 = FWKEY;                         // Clear Lock bit
8
  *Flash_ptr = 0;                  
9
  FCTL1 = FWKEY + WRT;                   // Set WRT bit for write operation
10

11
  *Flash_ptr = value;                   // Write value to flash
12

13
  FCTL1 = FWKEY;                         // Clear WRT bit
14
  FCTL3 = FWKEY + LOCK;                  // Set LOCK bit
15
}


Viele Grüße
Gast #3928344
Lesenswert?
• ▲
▼
Super, danke!

Jetzt funktioniert es. Das Beispiel von TI ist da sehr hilfreich:
1
void write_SegC (char value)
2
{
3
  char *Flash_ptr;                          // Flash pointer
4
  unsigned int i;
5

6
  Flash_ptr = (char *) 0x1040;              // Initialize Flash pointer
7
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
8
  FCTL3 = FWKEY;                            // Clear Lock bit
9
  *Flash_ptr = 0;                           // Dummy write to erase Flash segment
10

11
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation
12

13
  for (i=0; i<64; i++)
14
  {
15
    *Flash_ptr++ = value;                   // Write value to flash
16
  }
17

18
  FCTL1 = FWKEY;                            // Clear WRT bit
19
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
20
}

Beste Grüße

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.