Forum: Mikrocontroller und Digitale Elektronik STM32F439 - embedded Flash


von FS-embd (Gast)


Lesenswert?

Guten Tag,

bei einem STM32F439 leigt der 2 MByte interne Flash an der Adresse 
0x0800 0000 bis 0x081F FFFF.
Ich verstehe noch nicht ganz, was in dem Bereich von 0x0000 0000 bis 
0x001F FFFF liegt. Ich möchte gerne, dass mein Controller nach dem Start 
Programmcode vom internen Flash ausführt. Also Boot From Flash.

Im Scatter File ist der interne Flash im Bereich 0x0800 0000 bis 0x081F 
FFFF angegeben. Kann ich den bereich von 0x0000 0000 bis 0x001F FFFF 
völlig ignorieren oder wann bzw. für was wird dieser gebraucht ?

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Datenblatt Seite 84 Figure 19. Memory Map

von Bauteiltöter (Gast)


Lesenswert?

Die Antwort findest du auf Seite 84 des Datenblatts

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00077036.pdf

"Memory map"

Im Bereich 0x0000 0000 - 0x001F FFFF liegt der Bootbereich, kann auhc in 
den RAM gespiegelt werden.
0x0020 0000 - 0x07FF FFFF ist "reserved", in dem Bereich ist also 
tatsächlich einfach nichts. bei einer späteren Version mit mehr Fash 
könnte das Flash zum Beispiel da rein verlegt werden.

von FS-embd (Gast)


Lesenswert?

Kenne ich, aber das zeigt mir ja nur das was ich schon geschrieben habe.

von FS-embd (Gast)


Lesenswert?

Welchen Bereich muss ich dann im Scatter File für meinen Programmcode ( 
+RO)
angeben ? Den ab 0x0000 0000 oder den Bereich, in dem der Flash liegt 
0x0800 0000 ?

von ./. (Gast)


Lesenswert?

2. [x]

von 6a66 (Gast)


Lesenswert?

FS-embd schrieb:
> Den ab 0x0000 0000 oder den Bereich, in dem der Flash liegt
> 0x0800 0000 ?

STM32F Flash liegt ab 0x0800... (zumidest bei den mir bekannten F1, F4, 
F7).

rgds

von FS-embd (Gast)


Lesenswert?

Ja da liegt der Flash.
Ich verstehe aber nicht ganz, wann oder ob ich den Bereich ab 0x0000 
0000 im Scatter File überhaubt verwenden muss. Mein Programmcode liegt 
im internen Flash.

von Little B. (lil-b)


Lesenswert?

es hat was mit der Architektur des Controllers zu tun.

Das folgende ist nur grob zusammengefasst und vieleicht nicht ganz 
korrekt:
Der ARM hat einen Architektur-Hybrid aus vonNeumann und Harvard. Es kann 
sowohl Instruktionen vom I-Bus gelesen werden, so wie es bei einem 
Harvard gemacht wird. Zusätzlich können aber auch Instruktionen vom 
D-Bus gelesen werden, so wie es bei von Neumann der Fall ist. Dies ist 
natürlich etwas langsamer, da der Bus-Traffic sich nicht mehr aufteilt.

Jetzt kommt das relevante für dich:
Der I-Bus hat einen begrenzten Adressraum, hier von 0x0 bis 0x1F FFFF. 
Hier werden verschiedene Speicherbereiche reingemappt. Beim POR 
entscheiden zunächst die Bootpins, welcher Speicher das ist. Im 
laufenden Programm kann das über Systemregister nochmals umgestellt 
werden, wenn man z.B. Programme aus dem RAM ausführen will.

In den genannten Speicherbereich wird also nichts geschrieben, sondern 
ist nur ein Alias für andere Speicherbereiche für den I-Bus.

von FS-embd (Gast)


Lesenswert?

Vielen Dank für deine Erklärung.

Vielleicht kannst du mir noch bei einer anderen Frage weiterhelfen:

Ich habe gelesen:

"The DMA has its own data bus which is wired to the 128 kB nin CCM-SRAM. 
Also it is not possible to use the Non CCM SRAM for both the DMA and 
Core at the same time. "

Der STM32F439 besitzt drei SRAM Bereiche. Einmal 112kB, 16 kB und 64 kB.
Wenn mein DMA beispielsweise sehr oft Daten über einen UART in den SRAM 
lädt, kann es ja zu Verzögerungen kommen, wenn der Core auf den gleichen 
SRAM Block zugreifen möchte.
Bezieht sich diese Einschränkung auf alle drei Bereiche oder kann ich 
beispielsweise einen festen Bereich für den DMA in den 64 kB SRAM Block 
legen legen, während alles andere vom Core auf diesen Block nie zugreift 
?

Ich meine wenn der DMA den 64 kByte SRAM blockiert, sind dann auch die 
zwei anderen blockiert oder kann der Core auf diese ohne Einschränkung 
gleichzeitig zugreifen ?

von Little B. (lil-b)


Lesenswert?

Das geht extrem tief in die Bus-Architektur des Controllers. Solche 
spezifischen Fragen kann dir dann nur der STM-Support zuverlässig 
beantworten.

Wenn du aber tatsächlich Daten vom USART ins RAM speichern willst, 
solltest du dir um die Bandbreite absolut keine sorgen machen.
Der schnellste USART im Chip kann 8Mbit, also nicht ganz 1MB/s (wegen 
start und stop bits).
Das Ethernet mit 100Mbit full dublex oder DMA transfers memory-to-memory 
würde mir da mehr Sorgen machen.

Aussage beim Cortex-M7-HandsOn in Frankfurt:
Die Buslast ist de facto so gering, dass man sich um 
Arbitrierungsprobleme zwischen Core und DMA keine Sorgen machen muss.

Da der STM32F4 die selbe peripherie hat wie der STM32F7, vermute ich in 
deinem Fall ähnliches.

Um aber sicher zu gehen solltest du den STM-Support fragen.

von m.n. (Gast)


Lesenswert?

FS-embd schrieb:
> "The DMA has its own data bus which is wired to the 128 kB nin CCM-SRAM.
> Also it is not possible to use the Non CCM SRAM for both the DMA and
> Core at the same time. "
>
> Der STM32F439 besitzt drei SRAM Bereiche. Einmal 112kB, 16 kB und 64 kB.

Du solltest schon etwas aufmerksamer lesen.
Zum einen hat der ..439 mehr RAM und CCM ist für DMA tabu. Siehe 
Abschnitt: Multi-AHB bus matrix

von FS-embd (Gast)


Lesenswert?

Ja, der hat drei SRAM Bereiche, mit CCM 4. Deshalb frage ich ja, ob Core 
und DMA auf zwei Blöcken parallel arbeiten können ohne sich gegenseitig 
zu blockieren.

Das DMA nicht auf CCM zugreifen kann habe ich geschrieben. Leider ist 
ein Rechtschreibfehler mit drin. Das sollte non CCM-SRAM heißen.

von Martin K. (martinko)


Lesenswert?

FS-embd schrieb:
> Ja, der hat drei SRAM Bereiche, mit CCM 4. Deshalb frage ich ja, ob Core
> und DMA auf zwei Blöcken parallel arbeiten können ohne sich gegenseitig
> zu blockieren.
>

Klar können sie, dazu sind sie ja da.

DMA und CPU kommen sich nur dann in die Quere, wenn der Zugriff von 
beiden in gleichzeitig in die selben Speicherbereiche gehen. In die 
Quere heisst aber nur, dass der Zugriff für die CPU während des Transfer 
vom/zum DMA gebremst wird. Bei Deinem UART wirst Du das gar nicht 
merken.

Gruß Martin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.