STM32 Flash für Retain nutzen

Gast #5238787
Lesenswert?
• ▲
▼
Hallo,

ich möchte auf ein EEPROM verzichten und im Flash direkt retain 
Variablen speichern. Ich benutze einen STM32F413VGT6.

Ich habe mir dazu folgende Funktionen geschrieben. Würden diese 
funktionieren? Habe ich es richtig verstanden, dass ich immer einen 
ganzen 128kb Sector löschen muss? Es gibt keine kleineren Pages? Das 
finde ich schade. Dann müsste ich ja ganze 128kB zwischenspeichern, auch 
wenn nur ein Byte verändert werden soll.

Lesen werde ich wohl mir einem normalen Pointer, der auf die 
entsprechende Flash-Adresse gerichtet ist oder?
1
uint8_t *p = 0x08040000; //z.B. lesen
2

3
void Flash_Unlock(){
4
  FLASH->KEYR = 0x45670123;
5
  FLASH->KEYR = 0xCDEF89AB;
6
}
7

8
void Flash_Lock(){
9
  FLASH->CR |= FLASH_CR_LOCK;
10
}
11

12
void Flash_Erase(uint8_t ucSector){
13
  while(FLASH->SR & FLASH_SR_BSY);
14
  FLASH->CR |= FLASH_CR_SER;
15
  FLASH->CR |= (ucSector << 3);
16
  FLASH->CR |= FLASH_CR_STRT;
17
  while(FLASH->SR & FLASH_SR_BSY);
18
}
19

20
void Flash_Write(uint8_t * pucSrc, uint8_t * pucDest, uint16_t usSize){
21
  while(FLASH->SR & FLASH_SR_BSY);
22
  FLASH->CR |= FLASH_CR_PG;
23
  while(usSize-- > 0){
24
    *pucDest++ = *pucSrc++;
25
  }
26
  while(FLASH->SR & FLASH_SR_BSY);
27
}
#5238866
Lesenswert?
• ▲
▼
Du könntest auch die EEPROM-Emulation von ST verwenden, falls das eine 
Option wäre. Dann musst du (mindestens) zwei Flash-Seiten freihalten, 
die dann für die Emulation verwendet werden. Je nach Controller-Typ 
musst du dann schauen, wie das Speicher-Layout aussieht, und wie groß 
die Seiten sind. Diese geben dann vor, wie groß dein emulierter EEPROM 
mindestens ist. Um das Löschen und Kopieren kümmert sich dann die 
Bibliothek, sobald eine Seite voll ist.

Müsstest mal für deinen Controller auf der ST-Seite nach der 
entsprechenden Application Note suchen.

Antwort schreiben

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.

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.