MSP430F5438 Flash write Problem

Gast #1258348
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
}
#1258371
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.
Gast #1258414
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren