Forum: Mikrocontroller und Digitale Elektronik Custom Solution für die Flash-Programmierung beim FG461x


von Frank (Gast)


Lesenswert?

Hallo,

hat schon jemand Erfahrung bei der Flash-Programmierung der FG461x 
Devices. Meine Routine läuft wunderbar für alle MSP430 mit einem 
Flash-Bereich. Beim FG461x habe ich allerdings Probleme den Bereich >= 
0x10000 (also den 2. Flashspeicher) zu beschreiben.

Hier kurz meine Lösch- und Schreibroutinen:

Löschen
=======

    // SMCLK/10 = 3,99MHz / 10 = 399kHz
    FCTL2 = FWKEY + FSSEL_2 + FN3 + FN0;
    FCTL3 = FWKEY;
    FCTL1 = FWKEY + GMERAS + MERAS;

    // dummy write
    Address  = (unsigned char *) 0x00FC10;
    *Address = 0;

    // wait for ending busy state
    n = 0;
    while((FCTL3 & BUSY) != 0 && n < 1000000) n++;


Schreiben
=========

  FCTL3 = FWKEY;
  FCTL1 = FWKEY + BLKWRT + WRT;
  for(n=0; n<64; n++) {
     ActAddress = (unsigned char *) (FlashAddress + n);
    *ActAddress = Buffer[n];

    m = 0;
    while((FCTL3 & WAIT) == 0 && m < 50000) m++;
 }

  m = 0;
  FCTL1 = FWKEY;
  while((FCTL3 & BUSY) != 0 && m < 50000) m++;
  FCTL3 = FWKEY + LOCK;

Mein Programm zur Flashprogrammierung wird im RAM ausgeführt.

Gruß

Frank

von Frank (Gast)


Lesenswert?

Problem gelöst:

ActAddress = (unsigned char *) (FlashAddress + n);

ist ein 16-Bit-Zeiger. Daher schreibt der µC bei der Adressierung des 
oberen Flashbereiches wieder in den unteren.

Frank

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.