STM32F439 - embedded Flash

Gast #4240730
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 ?
Gast #4240744
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.
#4240813
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.
Gast #4240848
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 ?
#4240871
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.
Gast #4240970
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
Gast #4241042
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.
#4241591
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

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