Forum: Mikrocontroller und Digitale Elektronik MSP430G2553: 10 Werte/Bytes permanent im Flash ablegen


von Sven Scholz (Gast)


Lesenswert?

Hallo Gemeinde,

ich würde gerne meinen MSP430G2553 eine eindeutige ID verpassen und 
müsste hierfür max. 10 Bytes im Flash ablegen bzw. für die "Ewigkeit" 
speichern.

Die Werte sollten auch nach dem Hochladen neuer Software via MSP-Fet 
unter CSS persistent sein.

Gibt es irgendwo eine Beschreibung wie ich das bewerkstellige?
Meine SW lässt sich in <5kB unterbringen.
Ich hätte jetzt spontan die Möglichkeit gesehen, die Werte für die ID in 
die letzte Flash-Speicherbank abzulegen.
Dann dürften die doch nicht überschrieben werden?

Wie ich dann elegant von der SW aus auf diese Werte zugreife ist mir 
allerdings noch nicht ganz klar...

Ist das prinzipiell überhaupt möglich oder sollte ich mir lieber ein 
EEPROM besorgen?

Vielen Dank!

von Gerald K. (geku)


Lesenswert?

Der MSP430 hat 4x 64Byte Informationsspeicher Segment A bis D.

Segment A ist schon belegt und sollte nicht verwendet werden.

Beispiel fürs Schreiben eines Strings ins Segment B :

1
    #define SEGM_A (char *)0x1000
2
    #define SEGM_B (char *)0x1040
3
    #define SEGM_C (char *)0x1080
4
    #define SEGM_D (char *)0x10C0
5
 
6
            char *ps;
7
            char *pd;
8
             
9
            strcpy(ibuf,"ID=1234567890\r\n");
10
11
            ps=ibuf;
12
            pd=SEGM_B;
13
14
            BCSCTL1=CALBC1_1MHZ;   //run with 16MHz DCO
15
            DCOCTL=CALDCO_1MHZ;
16
17
            {
18
                FCTL1=FWKEY+ERASE;  // Set Mass Erase bit
19
                FCTL3=FWKEY;        // Clear Lock bit
20
                *pd=0;              // Dummy write to erase Flash segment B
21
                FCTL1=FWKEY+WRT;    // Set WRT bit for write operation
22
                FCTL1=FWKEY;        // Clear WRT bit
23
                FCTL3=FWKEY+LOCK;
24
            }
25
26
            while ((*ps!='\r')&&(*ps!='\n')&&(*ps!=0))
27
            {
28
                FCTL1=FWKEY+WRT;
29
                FCTL3=FWKEY;
30
                *(unsigned char *)pd=*ps;
31
                FCTL1=FWKEY;
32
                FCTL3=FWKEY+LOCK;
33
                ps++;
34
                pd++;
35
            }

Eine ID lässt sich auch, ohne SW, über die Speicherzugriffsfunktion 
MEMORY des Code Composer Studios ins FLASH schreiben.

PS : ich habt den Takt der MCU auf 1MHz heruntergeschaltet um den 
vollen Betriebsspannungsberreich für den Batteriebetrieb nutzen zu 
können.

Der Takt kann nach dem Beschreiben des Flashs wieder hinauf gesetzt 
werden.

: Bearbeitet durch User
von Sven Scholz (Gast)


Lesenswert?

Wow - richtig gut.
Probiere ich aus.
Vielen herzlichen Dank!

von Gerald K. (geku)


Lesenswert?

Sven Scholz schrieb:
> Wie ich dann elegant von der SW aus auf diese Werte zugreife ist mir
> allerdings noch nicht ganz klar...
1
#define SEGM_B (char *)0x1040
2
3
char *px;
4
5
px= SEGM_B; 
6
7
printf("%s",px);

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.