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

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