STM32: Page Erase + Program funktioniert nicht nacheinader

Gast #6562849
Lesenswert?
• ▲
▼
Hallo :)
Ich versuche während der Laufzeit Daten in den Flash (STM32F303K8) zu 
schreiben. Dabei stieß ich auf verschiedene Probleme:
1
void put_in_Flash(uint32_t data)
2
{  
3
  const uint32_t pageAddress = 0x800F800;
4
  HAL_FLASH_Unlock();
5
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_SR_PGERR );
6
  FLASH_PageErase(pageAddress);
7
  HAL_Delay(5000);
8
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_SR_PGERR );
9
  HAL_FLASH_Program(TYPEPROGRAM_WORD, pageAddress, (uint64_t)data);
10
  HAL_FLASH_Lock();
11
}

Ich rufe mit set_in_Flash(0xAAAA); auf.

Nun zu meinem Problem: Wenn ich den Code so wie er ist ausführe, dann 
wird lediglich die Page gelöscht, aber nicht beschrieben. Wenn ich die 
Zeile zum Löschen jeodch auskommentiere, schreibt er meine Werte. Daher 
denke ich, dass etwas im Ablauf nicht ganz passt. Kann mir jemand hier 
einen Tipp geben, was noch fehlt?

Daneben habe ich noch eine Frage: Müssen immer 64bit beschrieben werden? 
Bzw ein Vielfaches davon? Und ist es diese Passage im Manual, die das 
aussagt:
1
Memory organization: 16 Kbit x 64 bits in STM32F303x6/8 and STM32F328x8 devices
#6562945
Lesenswert?
• ▲
▼
Karin schrieb:
> Müssen immer 64bit beschrieben werden?
> Bzw ein Vielfaches davon? Und ist es diese Passage im Manual, die das
> aussagt:
> Memory organization: 16 Kbit x 64 bits in STM32F303x6/8 and STM32F328x8
> devices

Nein, der Datenbus zum Flash ist 64 Bit breit, man kann 64 Bit parallel 
lesen, aber schreiben muss man 16 Bit, nicht mehr und nicht weniger. Die 
Feinheiten sind im RM0316 unter - Flash program and erase operations - 
Main Flash memory programming - beschrieben.

Vorsicht: Die Flash-Programmierung funktioniert bei allen STM32 sehr 
unterschiedlich. Der F205 ist z.B. 128 Bit breit und man darf 8, 16, 32 
oder 64 Bit am Stück schreiben. Der L552 ist umschaltbar 64 oder 128 Bit 
breit und muss immer mit 64 Bit geschrieben werden, weil daraus 8 
ECC-Bits berechnet werden. Und so weiter...

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.