www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F5438 Flash write Problem


Autor: Rex Gildo jr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

#include ".\flash.h"
#include <stdlib.h>

char test1 = 0x11;
char test2 = 0x22; 
char test3 = 0x33;

//* ====================================================================== */
//* Funktion um Flash zu beschreiben                                       */
//* ====================================================================== */

void write_SegA(char offset,char *buf, unsigned char length,bool longwrite) { 
unsigned short i;
  Flash_ptr = (char *) 0x1880;                    // Flash Pointer Initialsierung 
  FCTL1 = FWKEY + ERASE;                          // Set Erase bit
  FCTL3 = FWKEY;                                  // Clear Lock bit
  *Flash_ptr = 0;                                 // Dummy write to erase Flash segment
  FCTL1 = FWKEY + WRT;                            // Set WRT bit for write operation
  for(i=0; i < length; i++)  {
      *Flash_ptr++ = buf[i];                      // buffer kopieren
      _NOP();                                     // SET BREAKPOINT HERE
  }                         
  
  FCTL1 = FWKEY;                                  // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                           // Set LOCK bit
}
     

//* ====================================================================== */
//* Funktion um Flash zu lesen                                             */
//* ====================================================================== */
 
void read_SegA(char offset,char *buffer, unsigned short laenge) {

  unsigned short i=0;
  Flash_ptr = (char *) 0x1880;                    // Reinitialisierung Flash Pointer
  Flash_ptr = Flash_ptr + offset;                 // Offset
  while(i < laenge) {                             // Flash lesen
    buffer[i] = *Flash_ptr++;
    i++;
  }
_NOP();
}

void flash_laden(void) {
 read_SegA(ABS_P_OFFSET_OFFSET,(char*)test1,1);
 read_SegA(ABS_P_STEIGUNG_OFFSET_OFFSET,(char*)test2,1);
 read_SegA(DELTA_P0_OFFSET_OFFSET,(char*)test3,1);
}

void flash_speichern(void)  {
 write_SegA(ABS_P_OFFSET_OFFSET,(char*)&test1,1,false);
 write_SegA(ABS_P_STEIGUNG_OFFSET_OFFSET,(char*)&test2,1,false);
 write_SegA(DELTA_P0_OFFSET_OFFSET,(char*)&test3,1,false);
}


Autor: Rex Gildo jr. (Gast)
Datum:

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

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rex Gildo jr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg S. (joerg-s)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.