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!
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
Wow - richtig gut. Probiere ich aus. Vielen herzlichen Dank!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.