OpenOCD STM32F4 Flash Adresse

OP #7183588
Lesenswert?
• ▲
▼
Guten Morgen

Ich arbeite derzeit an einem Projekt für einen STM32F4VET, welches aus 
einem Bootloader und dem eigentlichen Programm besteht. Als IDE benutze 
ich CLion, dort wird zum flashen und debuggen OpenOCD verwendet.

Der Programmcode funktioniert ohne Probleme, wenn ich die .hex des 
Bootloaders (mit Flash Erase) und anschließend die des eigentlichen 
Programms (ohne Flash Erase) per ST-Link-Utility flashe. Ein Problem mit 
dem eigentlichen Programm besteht also nicht. Im ST-Link-Utility ist 
klar zu erkennen, dass die richtigen Flash Bereiche beschrieben werden. 
Eine kontrolle der .map Dateien bestätigt dies.

Versuche ich jedoch aus CLion heraus das eigentliche Programm per 
OpenOCD zu flashen, werden Veränderungen am ersten Sektor vorgenommen, 
in welchem mein Bootloader liegt, sodass dieser nicht mehr ausführbar 
ist. An den Parametern mit denen OpenOCD aufgerufen wird ist zu 
erkennen, dass die .elf Datei benutzt wird, nicht die .hex.
Ich verwende die Konfigurationsdatei "stm32f412g-disco.cfg". Diese und 
die ihr angehängten Konfigurationsdateien habe ich bereits erfolglos 
nach einer festen Flashadresse durchsucht.

Ich habe versucht mit dem elf-Viewer "ELF Parser" zu schauen, ob in der 
.elf Datei die richtige Flash-Adresse enthalten ist, dort bin ich im Tab 
PHeaders auf die Adresse von Sector 0 gestoßen. Ich bin mir jedoch nicht 
sicher ob dies das Problem ist, da in der .hex, welche aus der .elf 
erzeugt wird die richtige Adresse enthalten ist.

Geplante Flash Nutzung:
Sector 0 (0x08000000-0x08003FFF): Bootloader,
Sector 1 (0x08004000-0x08007FFF): EEPROM-Emulation,
Sector 2 (0x08008000-...) und folgende: Programm

Auszug aus *_FLASH.ld des Bootloaders:
1
MEMORY
2
{
3
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 256K
4
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 16K
5
}

Auszug aus *_FLASH.ld des Programms:
1
MEMORY
2
{
3
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 256K
4
  FLASH    (rx)    : ORIGIN = 0x8008000,   LENGTH = 480K
5
}

CLion Befehlszeile zum Aufruf von OpenOCD:
1
D:\OpenOCD-20211118-0.11.0\bin\openocd.exe -s D:\OpenOCD-20211118-0.11.0\share\openocd\scripts -f board/stm32f412g-disco.cfg -c "tcl_port disabled" -c "gdb_port disabled" -c "tcl_port disabled" -c "program \"D:/*****/STM32-Project-Test/cmake-build-debug/STM32-Project-Test.elf\"" -c reset -c shutdown

Ich hoffe es kann mir jemand helfen...

Viele Grüße
Chris
OP #7183659
Lesenswert?
• ▲
▼
Jörg W. schrieb:
> Du hast übrigens 2x "tcl_port disabled" – sollte eines der beiden
> vielleicht "telnet_port disabled" hätte werden sollen?

Die Befehlszeile wird vom CLion Plugin automatisch generiert, da kann 
ich bis auf die Auswahl der .cfg leider keinen Einfluss drauf nehmen.

Jörg W. schrieb:
> Kannst du vielleicht das ELF-File einfach mal hier anhängen?

Ist im Anhang.
Angehängte Dateien:
Moderator Persönliche Seite #7183677
Lesenswert?
• ▲
▼
1
$ arm-none-eabi-objdump -h STM32-Project-Test.elf 
2
 
3
STM32-Project-Test.elf:     file format elf32-littlearm
4

5
Sections:
6
Idx Name          Size      VMA       LMA       File off  Algn
7
  0 .isr_vector   000001c4  08008000  08008000  00008000  2**0
8
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
9
  1 .text         0000274c  080081c4  080081c4  000081c4  2**2
10
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
11
  2 .rodata       00000010  0800a910  0800a910  0000a910  2**2
12
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
13
  3 .ARM.extab    00000018  0800a920  0800a920  0000a920  2**2
14
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
15
  4 .ARM          000000d0  0800a938  0800a938  0000a938  2**2
16
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
17
  5 .preinit_array 00000000  0800aa08  0800aa08  00010438  2**0
18
                  CONTENTS, ALLOC, LOAD, DATA
19
  6 .init_array   00000004  0800aa08  0800aa08  0000aa08  2**2
20
                  CONTENTS, ALLOC, LOAD, DATA
21
  7 .fini_array   00000004  0800aa0c  0800aa0c  0000aa0c  2**2
22
                  CONTENTS, ALLOC, LOAD, DATA
23
  8 .data         00000438  20000000  0800aa10  00010000  2**3
24
                  CONTENTS, ALLOC, LOAD, DATA
25
  9 .bss          000000e8  20000438  0800ae48  00010438  2**2
26
                  ALLOC
27
…

Die Startadresse (Section .isr_vector) ist 0x8008000, das passt also.

Habe keinen STM32 zur Hand um zu gucken, was da bei mir passiert. Sieht 
zumindest auf den ersten Blick nicht falsch aus so.

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.