Forum: Mikrocontroller und Digitale Elektronik msp430 Flash


von Bergie B. (bergie)


Lesenswert?

Moin moin,

ich habe mal eine Frage zu meinem MSP430F248 auf die ich bis jetzt noch 
keine Antwort finden konnte. Ich möchte Daten im Flash ablegen  und 
diese nach dem nächsten Neustart benutzen. Nun habe ich mir das Beispiel 
von TI besorg und adaptiert. In dem hier vorliegendem Beispiel werden 
aber immer gleich 64 Bytes geschrieben(Ein Paket?).

Ist es für die Lebensdauer des Speichers Sinnvoll immer 64Byts auf einen 
rutsch wie hier zu beschreiben?

'Beschreit' es diese sowieso immer auch wenn ich nur 1Byte beschreibe?



LG Bergie






void write_SegC(USIGN8* value)
{
  char *Flash_ptr;                          // Flash pointer
  unsigned int i;

  Flash_ptr = (char *)0x1040;               // Initialize Flash pointer
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  *Flash_ptr = 0;                           // Dummy write to erase 
Flash seg

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

  for (i = 0; i < 64; i++)
  {
    *Flash_ptr++ = value[i];                   // Write value to flash
  }

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

von Daniel G. (daniel83)


Lesenswert?

Hallo Bergie,

In dem Beispiel werden nicht 64 Bytes auf einmal geschrieben sondern 
64x1Byte.

von Bergie B. (bergie)


Lesenswert?

Über die Forschleife werden 64 Byte geschrieben, hintereinander weg

Wenn ich nun die einenfolge in dem ich den Falsh beschreibe nicht über 
n++ sondern über  (64+(n--))  abarbeiten lasse oder die 64 Addressen in 
zufälliger sich nicht wiederholender Reihenfolge anspreche, gibt es dann 
ein Nachteiliges Verhalten im bezug auf die Lebenserwartung meines 
Flashspeichers?

LG

von Jörg S. (joerg-s)


Lesenswert?

>(Ein Paket?)
Ein Block

>Ist es für die Lebensdauer des Speichers Sinnvoll immer 64Byts auf einen
>rutsch wie hier zu beschreiben?
Eigentlich nicht, Nein

>'Beschreit' es diese sowieso immer auch wenn ich nur 1Byte beschreibe?
Nein.


Grundsätzliches zum Flash:
Du kannst die Bits im Flash immer von "1" auf "0" problemlos ändern. 
Willst du aber eine "0" in eine "1" ändern, so kannst du nur den 
gesamten Block (64 Byte) in einem rutsch auf "1" setzen. Daher der Name 
"Flash" (Bitzartig alles auf "1" setzen).

von Bergie B. (bergie)


Lesenswert?

> Grundsätzliches zum Flash:
> Du kannst die Bits im Flash immer von "1" auf "0" problemlos ändern.
> Willst du aber eine "0" in eine "1" ändern, so kannst du nur den
> gesamten Block (64 Byte) in einem rutsch auf "1" setzen. Daher der Name
> "Flash" (Bitzartig alles auf "1" setzen).

Achso,

das Grundsätzliche war mir nicht bewust. Deswegen ist mien Flash wohl 
nach dem löschen auch mit 1en geflutet und nicht mit 0en ;)

Gut das Hilft mir erst mal weiter! danke

von Stefan (Gast)


Lesenswert?

Lies mal die AppNote, da ist das beschrieben:
http://focus.ti.com/lit/an/slaa334a/slaa334a.pdf
(Besonders cumulative programming time!)

Was mich jetzt gerade sehr stutzig macht, ist folgendes:
Das DB zum F248 sagt: cumulative programming time: max. 4ms
Laut der obigen AppNote kann man diese (also 4ms) nur einhalten, wenn 
man den Flash Memory Controller mit der maximalen Frequenz von 476kHz 
taktet!
Ist die Frequenz kleiner, darf man (rein theoretisch) nicht alle 64 
Bytes nacheinander byteweise flashen! Wordweise würde allerdings 
gehen... ?!

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.