Forum: Mikrocontroller und Digitale Elektronik MSP430F5438 Flash write Problem


von Rex Gildo jr. (Gast)


Lesenswert?

Hallo!
Ich hatte hier letzens schonmal gepostet wegen dem Problem.
Ich bekomme den Flashspeicher des MSP430F5438 nicht beschrieben.
Es handelt sich dabei um das Segment C des Info Memory mit der 
Anfangsadresse 0x1880.
Vielleicht kann mir ja jetzt doch jemand weiterhelfen :(

Hier mal meine verwendeten Funktionen bzw. Routinen.
1
#include ".\flash.h"
2
#include <stdlib.h>
3
4
char test1 = 0x11;
5
char test2 = 0x22; 
6
char test3 = 0x33;
7
8
//* ====================================================================== */
9
//* Funktion um Flash zu beschreiben                                       */
10
//* ====================================================================== */
11
12
void write_SegA(char offset,char *buf, unsigned char length,bool longwrite) { 
13
unsigned short i;
14
  Flash_ptr = (char *) 0x1880;                    // Flash Pointer Initialsierung 
15
  FCTL1 = FWKEY + ERASE;                          // Set Erase bit
16
  FCTL3 = FWKEY;                                  // Clear Lock bit
17
  *Flash_ptr = 0;                                 // Dummy write to erase Flash segment
18
  FCTL1 = FWKEY + WRT;                            // Set WRT bit for write operation
19
  for(i=0; i < length; i++)  {
20
      *Flash_ptr++ = buf[i];                      // buffer kopieren
21
      _NOP();                                     // SET BREAKPOINT HERE
22
  }                         
23
  
24
  FCTL1 = FWKEY;                                  // Clear WRT bit
25
  FCTL3 = FWKEY + LOCK;                           // Set LOCK bit
26
}
27
     
28
29
//* ====================================================================== */
30
//* Funktion um Flash zu lesen                                             */
31
//* ====================================================================== */
32
 
33
void read_SegA(char offset,char *buffer, unsigned short laenge) {
34
35
  unsigned short i=0;
36
  Flash_ptr = (char *) 0x1880;                    // Reinitialisierung Flash Pointer
37
  Flash_ptr = Flash_ptr + offset;                 // Offset
38
  while(i < laenge) {                             // Flash lesen
39
    buffer[i] = *Flash_ptr++;
40
    i++;
41
  }
42
_NOP();
43
}
44
45
void flash_laden(void) {
46
 read_SegA(ABS_P_OFFSET_OFFSET,(char*)test1,1);
47
 read_SegA(ABS_P_STEIGUNG_OFFSET_OFFSET,(char*)test2,1);
48
 read_SegA(DELTA_P0_OFFSET_OFFSET,(char*)test3,1);
49
}
50
51
void flash_speichern(void)  {
52
 write_SegA(ABS_P_OFFSET_OFFSET,(char*)&test1,1,false);
53
 write_SegA(ABS_P_STEIGUNG_OFFSET_OFFSET,(char*)&test2,1,false);
54
 write_SegA(DELTA_P0_OFFSET_OFFSET,(char*)&test3,1,false);
55
}

von Rex Gildo jr. (Gast)


Lesenswert?

PS: Das Longwrite iat natürlich überflüssig und gehört nicht mehr rein. 
Historisch gewachsen ;)

von Hans W. (hans_wurst)


Lesenswert?

Hallo,

ich habe zwar gerade keine Zeit deinen Code genau durchzusehen, aber 
damit du nicht womöglich an der gleichen Stelle hängen bleibst wie mir 
es mal ging, hier ein Hinweis:
Du kannst den Flash nur im run-Modus beschreiben. Im debug-Modus wird 
das erforderliche timing nicht eingehalten und ein erfolgreiches 
Schreiben kommt somit nie zustande.

von Jörg S. (joerg-s)


Lesenswert?

>Ich bekomme den Flashspeicher des MSP430F5438 nicht beschrieben.
D.h. das Flash wird zwar gelöscht (alles auf 0xFF), aber es kommen keine 
neuen Daten rein?

Wo ist deine Initialisierungsroutine für den Flash Controller? Frequenz 
richtig eingestellt?

von Jörg S. (joerg-s)


Lesenswert?

>Im debug-Modus wird das erforderliche timing nicht eingehalten und ein
>erfolgreiches Schreiben kommt somit nie zustande.
Bist du dir da sicher? Kann ich mich nicht dran erinnern.

von Rex Gildo jr. (Gast)


Lesenswert?

Hallo!
Eben diese Initialisierungsroutine für den Flashcontroller gibt es nicht 
mehr :(

Datenblatt:
>FCTL2 has been eliminated as it was the clock control for the flash, >which is 
now implemented using the MODOSC and requires no setup.

Gruß

Rex

von Jörg S. (joerg-s)


Lesenswert?

>Eben diese Initialisierungsroutine für den Flashcontroller gibt es nicht
>mehr
Na das ist doch schön. Ein Problem weniger (theoretisch :) ).

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.