MSP430F5438 Info Memory Flash Segment A Probleme

Gast #1254228
Hallo !
Ich versuche grade im Zuge meines Projektes den Flash Speicher, im 
einzelnen das 128 Byte große Flash Segment A im info Memory Bereich 
(0x1980 - 0x19FF) zu Beschreiben bzw. zu lesen.

Dazu release ich erstmal den gesamten Info speicher über low setzen des 
LOCKINFO Bits in FCTL4.
Als nächstes wird durch Togglen des LOCKA Bits im FCTL3 Register, das 
Lock Bit für das Segment A ausser Kraft gesetzt. Ein einfaches auf 0 
setzen des Bits im Register funktioniert laut Datenblatt nicht :

Datasheet:

>The state of the LOCKA bit is toggled when a 1 is written to it.
>Writing a 0 to LOCKA has no effect. This
>allows existing flash programming routines to be used unchanged.

Jedes Mal wenn ich jedoch in den Flash ab der Stelle 0x1980 schreiben 
will, bekomme ich ein Access violation interrupt flag :(
Bei den älteren MSP´s läuft meine flashroutine leicht abgeändert ganz 
passabel, ist auch glaub ich zusammengestrick aus TI Code schnipseln.
Jedoch finde ich d nix Zusammenhängendes auf der TI HP.

Vielleicht hat ja von euch jemand nen Tip was ich falsch mache :(



1
#include "flash.h"
2
#include <stdlib.h>
3

4
//* ====================================================================== */
5
//* Funktion um Flash zu beschreiben                                       */
6
//* ====================================================================== */
7

8
void write_SegA(char offset,char *buf, unsigned char length) {
9
  WDTCTL = WDTPW + WDTHOLD;
10
  _DINT();
11
  FCTL4  = FWKEY;
12
  FCTL3  = FWKEY + LOCKA;                         // Toggle(Clear) Lock bit
13
 
14
  unsigned short i;
15
  Flash_ptr = (char *) 0x1980;                    // Initialisierung Flash Pointer
16
  Flash_ptr = Flash_ptr + offset;                 // Offset
17
  
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 (DEBUGGER)
22
  }                         
23

24
  FCTL1 = FWKEY;                                  // Clear WRT bit
25
  FCTL3 = FWKEY + LOCKA;                          // Toggle(Set) LOCK bit
26
  FCTL4 = FWKEY + LOCKINFO;                       // Set LOCK bit
27
  _EINT();
28
}
29

30
//* ====================================================================== */
31
//* Funktion um Flash zu lesen                                             */
32
//* ====================================================================== */
33
 
34
void read_SegA(char offset,char *buffer, unsigned short laenge) {
35

36
  unsigned short i=0;
37
  Flash_ptr = (char *) 0x1980;                    // Initialisierung Flash Pointer
38
  
39
  Flash_ptr = Flash_ptr + offset;                 // Offset
40
  while(i < laenge) {                             // Flash lesen
41
    buffer[i] = *Flash_ptr++;
42
    i++;
43
  }
44

45
}


Viele Grüße

Rex

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.