Forum: Mikrocontroller und Digitale Elektronik Flash in msp430 F4xxx


von Laila (Gast)


Lesenswert?

Hallo Kollegen,

entschuldigt bitte die komplette Newbie-Frage.
ich habe paar verständniss Fragen

- wie oft darf man den MSP430F4xxx flashen bzw. earsen?
- wie liest man einen bestimmten(ab vor gegebenen adr) Flash bereich?
- gibt es fertige methoden zum schreiben und lesen vom Flash bereiche?

Danke
Gruß
Laila

von Gero (Gast)


Lesenswert?

TI-Example:
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
  FCTL3 = FWKEY;                            // Clear Lock bit
8
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
9
  *Flash_ptr = 0;                           // Dummy write to erase Flash seg
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
}
21
22
void copy_C2D(void)
23
{
24
  char *Flash_ptrC;                         // Segment C pointer
25
  char *Flash_ptrD;                         // Segment D pointer
26
  unsigned int i;
27
28
  Flash_ptrC = (char *)0x1040;              // Initialize Flash segment C ptr
29
  Flash_ptrD = (char *)0x1000;              // Initialize Flash segment D ptr
30
  FCTL3 = FWKEY;                            // Clear Lock bit
31
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
32
  *Flash_ptrD = 0;                          // Dummy write to erase Flash seg D
33
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation
34
35
  for (i = 0; i < 64; i++)
36
  {
37
    *Flash_ptrD++ = *Flash_ptrC++;          // copy value segment C to seg D
38
  }
39
40
  FCTL1 = FWKEY;                            // Clear WRT bit
41
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
42
}

von Laila (Gast)


Lesenswert?

Vielen Danke für die schnelle Antwort.

wie oft darf man den MSP430F4xxx flashen bzw. earsen?

es ist bestimmt eine definierte Zahl oder?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Laila schrieb:
> wie oft darf man den MSP430F4xxx flashen bzw. earsen?
>
> es ist bestimmt eine definierte Zahl oder?

Das steht im Datenblatt im Abschnitt Flash Memory unter 
"Program/erase endurance".

Üblich sind Werte zwischen 10000 und 100000 mal, im Datenblatt des 
'543x steht beispielsweise mindestens 10^4 und typisch 10^5.

von Laila (Gast)


Lesenswert?

vielen Dank, für die Antworten

von Laila (Gast)


Lesenswert?

Hallo Kollegen,

im Flash werde ich sehr wahrscheinlich mehr als 10^4 mal schreiben und 
earsen, dh. nach 10^4 sind diese Segmente nicht mehr ansprechbar? habe 
ich richtig verstanden?

gibt es eine Idee oder trick mit dem man beliebig die flash Segmente 
überarbeiten darf?

MFG

von Gernod (Gast)


Lesenswert?

Laila schrieb:
> gibt es eine Idee oder trick mit dem man beliebig die flash Segmente
> überarbeiten darf?

Nicht immer die gleichen benutzen.

von ./. (Gast)


Lesenswert?

Externen I2C-EEPROM nehmen und sockeln....

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Laila schrieb:
> gibt es eine Idee oder trick mit dem man beliebig die flash Segmente
> überarbeiten darf?

Nein. Es ist ein Designfehler, wenn Flashspeicher zu oft beschrieben 
werden soll.

Untersuche, warum sooft Daten ins Flash geschrieben werden sollen und 
warum die nicht woanders gespeichert werden können.

Untersuche, ob es nicht z.B. genügt, die Daten im RAM zu puffern und bei 
Abschaltung des Systems im Flash zu sichern, das erfordert natürlich 
eine stabile Abschalteerkennung, aber die ist beim 
einfach-so-im-Flash-herumschreiben nicht minder wichtig.

von Johnny B. (johnnyb)


Lesenswert?

Laila schrieb:
> gibt es eine Idee oder trick mit dem man beliebig die flash Segmente
> überarbeiten darf?

Leider nicht.
Aber TI hat reagiert und wird bald MSP430 Mikrocontroller im Sortiment 
haben, welche statt Flash auf FRAM Technologie basieren und damit 
praktisch beliebig oft beschreibbar sind. Die Typen heissen dann 
MSP430FRxxxx soweit ich gehört habe.
Samples sollen angeblich bald auch für die breite Masse zur Verfügung 
stehen.

von Laila (Gast)


Lesenswert?

> Nein. Es ist ein Designfehler, wenn Flashspeicher zu oft beschrieben
> werden soll.

Was meinst du mit designfehler?

> Untersuche, warum sooft Daten ins Flash geschrieben werden sollen und
> warum die nicht woanders gespeichert werden können.

es wird oft von verschiedene Sensoren daten gefordert und aktualisiert
(5 mal pro Sec), die aktualisierten Werte müssen für eine sehr lange 
Zeit im flash gesichert bleiben.

> Untersuche, ob es nicht z.B. genügt, die Daten im RAM zu puffern und bei
> Abschaltung des Systems im Flash zu sichern, das erfordert natürlich
> eine stabile Abschalteerkennung, aber die ist beim
> einfach-so-im-Flash-herumschreiben nicht minder wichtig.

Der Nachteil des RAM-Speichers ist, dass die Daten bei einem 
unvorhergesehenen Neustart im Feld nicht mehr zuverlässig erhalten 
bleiben und bei Spannungseinbrüchen komplett verloren gehen. Somit ist 
es erforderlich die Daten zyklisch in den flash zu sichern.

von Laila (Gast)


Lesenswert?

> Aber TI hat reagiert und wird bald MSP430 Mikrocontroller im Sortiment
> haben, welche statt Flash auf FRAM Technologie basieren und damit
> praktisch beliebig oft beschreibbar sind. Die Typen heissen dann
> MSP430FRxxxx soweit ich gehört habe.
> Samples sollen angeblich bald auch für die breite Masse zur Verfügung
> stehen.

Es hört sicht toll an, dann lasse ich mein Projekt frieren bis Ti sich 
entscheidet ;-)
ne spass bei Seite, danke für den Tip.

von Johnny B. (johnnyb)


Lesenswert?

Kommt halt immer auf den Zeithorizont des Projektes an. ;-)
Aber wenn Du es jetzt gleich brauchst, nimmst Du vielleicht besser ein 
externes EEPROM oder Flash mit mehr möglichen Schreibzyklen.

von Christian R. (supachris)


Lesenswert?

Naja, dafür ist Flash halt einfach nicht geeignet. Deswegen 
Designfehler.
Bau einen externen FRAM Chip in der passenden Größe an und gut. Oder 
halt Spannungseinbruch überwachen und daten aus dem RAM in den Flash 
sichern. Unerwartete Neustarte im Feld verhindert man durch sauberes 
Programmieren.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Laila schrieb:
> Der Nachteil des RAM-Speichers ist, dass die Daten bei einem
> unvorhergesehenen Neustart im Feld nicht mehr zuverlässig erhalten
> bleiben und bei Spannungseinbrüchen komplett verloren gehen.

Nein. Dann ist halt eine ausreichende Pufferung der Stromversorgung mit 
Kondensatoren, Goldcaps o.ä. erforderlich, und eine saubere Erkennung 
des Stromausfalls, so daß in diesem Fall die Daten aus dem RAM ins Flash 
kopiert werden können.

Damit wird die Flashschreibrate ganz erheblich reduziert, nämlich nur 
vor jeden Abschaltvorgang.

Alternativ könnte man ein externes explizit batteriegepuffertes seriell 
anzusteuerndes RAM oder eben ein FRAM verwenden.

Man könnte natürlich auch die Stromversorgung des MSP430 selbst puffern, 
so hoch ist dessen Stromverbrauch schließlich nicht.


Was ist das für ein System, bei dem im 5-Sekunden-Takt irgendwelche 
Sensordaten erfasst werden müssen und nur diese im Flash gespeichert 
werden sollen? Oder soll das eine Art Datenlogger sein?

In letzterem Falle bietet sich die Verwendung eines ausreichend großen 
externen Flash-Speichers wie z.B. einer SD-Karte an. Die wird dann halt 
allmählich gefüllt und hält aufgrund ihrer erheblich größeren 
Speicherkapazität länger durch als das Flash-ROM des MSP430.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ein MSP430 lässt sich im entsprechenden Sleep-Modus über Monate mit 
einem Goldcap puffern. Den Sleep-Modus kann man ja bei Ausfall der 
Spannungsversorgung aktivieren. Somit kann das RAM durchaus zur 
Datenspeicherung verwendet werden. Selbst, wenn das RAM nur als 
Datencache verwendet wird und der Hauptspeicher das Flash ist, lassen 
sich die Schreibzyklen signifikant reduzieren.

Grüße,

Peter

von Laila (Gast)


Lesenswert?

Hallo,

> Was ist das für ein System, bei dem im 5-Sekunden-Takt irgendwelche
> Sensordaten erfasst werden müssen und nur diese im Flash gespeichert
> werden sollen? Oder soll das eine Art Datenlogger sein?


Es handelt sich um ein Meßgerät, der Werte speichert bis ihn sein 
bezitzer besucht, es koönnte 2 bis 5 Jahre dauren bis es ausgelesen 
wird.


MFG

von Stefan H. (stefanhennig)


Lesenswert?

Also, ohne die Architektur vom MSP zu kennen und ohne lange 
nachzudenken, würde ich das ungefähr so angehen:

1. die Daten werden n-fach in unterschiedlichen Blöcken abgelegt, so 
dass jeder Block nur 1/n Schreibzyklen abbekommt.
2. in jedem Block wird zusammen mit den Nutzdaten ein laufender Zähler 
abgelegt.
3. der Block mit dem höchsten Zähler enthält die letztgültigen Daten.
4. der Block mit dem niedrigsten Zähler wird vom neuen Datum 
überschrieben.

Natürlich musst Du weiterhin eine Brown-Out Erkennung und eine Prüfsumme 
implementieren.

Bei Deinem Auto funktionierts ja auch; da haben auch immer mehr Kombis 
kein EEPROM mehr...

Grüße,
  Stefan

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Laila schrieb:
> Es handelt sich um ein Meßgerät, der Werte speichert bis ihn sein
> bezitzer besucht, es koönnte 2 bis 5 Jahre dauren bis es ausgelesen
> wird.

Das ist ein Datenlogger. Verwende eine SD-Karte, dann gibt es auch 
keine Probleme mit der Speicherkapazität.

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.