Forum: Mikrocontroller und Digitale Elektronik STM32F407VGT FSMC + FPGA


von M. Н. (Gast)


Lesenswert?

Hallo, ich möchte einen STM32F407VGT (TQFP100) an einen FPGA 
anschließen. Der STM soll über den FSMC mit dem FPGA reden.

Leider habe ich festgestellt, dass der FSMC entweder komisch beschrieben 
ist, oder einfach absolut ungeeignet.

Mehrere Dinge sind mir aufgefallen, die ich gerne bestätigt/widerlegt 
wüsste:

1:
Das PSRAM Interface kann zwar synchron mit Clock und wait Signal 
kommunizieren. Im Reference Manual steht auch, dass es über einen 16 bit 
Datenbus zwar 8 bit Werte schreiben kann (Byte Enable leitungen). 
Allerdings kann es wohl keine 8 bit Lesezugriffe. Warum, verstehe ich 
absolut nicht. Im asynchronen Modus geht das ja auch. Und warum er die 
Byte Enables dafür nicht verwendet ist mir ein Rätsel.

2:
Das asynchrone RAM Interface kann kein Multiplexing der 
Daten/Adressleitungen. Das führt dazu, dass man beim TQFP100 die 
Adressleitungen A[0..9] nicht hat, weil der Port an dem die liegen in 
diesem Gehäuse nicht verfügbar ist.

Ist das wirklich so absolut beschis***, oder habe ich das Ganze 
schlichtweg nicht verstanden?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Zu1:

Die Byteenable Signale sind bei vielen Bus Systemen nur zum Schreiben 
da.
Beim Lesen wird immer alles auf den Bus geblasen was geht und die CPU 
sucht sich das passende Byte dann aus.
Beim Schreiben würde das Byte sonst überschrieben, beim Lesen geht ja 
nix kaputt.

So sieht das zB bei einem selber gebauten MIPS aus:
http://www.fritzler-avr.de/spaceage2/hw_memdatamux.htm

In der Uni haben wir auch einen ARM kern in VHDL gebaut, ARM hat sowas 
auch.
Aber der Artikel mit Bildern sollte verständlicher sein als etwas 
schnödes VHDL.

Bei einer geraden Adresse wird also das Byte0 zum Byte0 des internen 
STM32 AHB durchereicht und bei ungeraden Adressen wird Byte1 des FSMC zu 
Byte0 des AHB durchgereicht.

Zu2:
Der F407 im 100er kann doch NUR Muxed?
Also genau andersrum.
Klick dazu mal durch CubeMX.
Zum IO klicken ist das Programm gut, aber klick NIE auf Code generieren 
da kommt absolute Bloatware raus ;)
Ab dem 144er Gehäuse sollts gehen.

von M. Н. (Gast)


Angehängte Dateien:

Lesenswert?

Mw E. schrieb:
> Die Byteenable Signale sind bei vielen Bus Systemen nur zum Schreiben
> da.

Mir ist schon klar, wie Bussysteme funktionieren. Übrigens haben sehr 
viele Busse Byteselects auch für reads. In seltenenfällen kann man 
darüber Endian-Mixing machen und auch register implementieren, die clear 
on read sind. AXI hat z.B. Byteselects für reads.

Zum STM: Im angehängten Bild ist der 8 bit read beim PSRAM ausgegraut.
Zitat:
Table 218 below displays an example of the supported devices, access 
modes and
transactions when the memory data bus is 16-bit for NOR, PSRAM and SRAM.
Transactions not allowed (or not supported) by the FSMC in this example 
appear in gray.

Das heißt doch, dass der keine 8 bit reads kann.

Mw E. schrieb:
> Klick dazu mal durch CubeMX.

Habe kein CubeMX und werde es auch nicht installieren.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Irgendwas ist da komisch, da steht beim synchronen auch nicht mehr, dass 
er bei 32Bit das in 2FSMC Zugriffe splittet.
Ob der Praktikant nur beim grau markieren in Excel auf der Maus 
abgerutscht ist?

Den SYNC Mode hab ich noch nie benutzt, aber testes doch einfach ob dann 
ein Hardfault kommt.

von M. Н. (Gast)


Lesenswert?

Mw E. schrieb:
> Irgendwas ist da komisch, da steht beim synchronen auch nicht mehr, dass
> er bei 32Bit das in 2FSMC Zugriffe splittet.
> Ob der Praktikant nur beim grau markieren in Excel auf der Maus
> abgerutscht ist?
>
> Den SYNC Mode hab ich noch nie benutzt, aber testes doch einfach ob dann
> ein Hardfault kommt.

Ja. Das ist einfach schlecht gemacht diese Tabelle. Ich bin gerade dabie 
das zu implementieren. Soweit ich sehe, kann man wohl einen externen 
SRAM mit LAtch anschließen, wenn man den FSMC auf PSRAM stellt und den 
MUX Modus aktiviert und die BurstModes abschaltet. Warum auch immer das 
so komisch verwinkelt gelöst ist.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Guggema:
http://www.cnblogs.com/xiaomagee/p/5409024.html

Die Chinesen mit dem icore3 STM32F407+FPGA Board nehmen auch den muxed 
Mode (erkennbar am NADV).
Aber arbeiten auch garnicht erst mit Byte Enables.

von M. Н. (Gast)


Lesenswert?

Okay. Habe den FSMC nun im PSRAM Mode (ohne synchrone Bursts). Mux Mode 
enabled.
Das ganze funktioniert so.

Vielen Dank, aber die Doku von ST ist IMHO ziemlich verwirrend

Hier die Config:
1
FSMC_Bank1->BTCR[0] = FSMC_BCR1_WREN | FSMC_BCR1_MWID_1 | FSMC_BCR1_MTYP_0 | FSMC_BCR1_MUXEN | FSMC_BCR1_MBKEN;
2
FSMC_Bank1->BTCR[1] = (2 << 16) | (20U << 8) | (1<<4) | (1<<0);
3
FSMC_Bank1E->BWTR[0] = (2 << 16) | (20U << 8) | (1<<4) | (1<<0);

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Für die Magic Numbers 16, 8, 4 und 0 gibts doch sicherlich die passenden 
BLAHKEKS_pos defines im Header.

von M. Н. (Gast)


Lesenswert?

Mw E. schrieb:
> Für die Magic Numbers 16, 8, 4 und 0 gibts doch sicherlich die passenden
> BLAHKEKS_pos defines im Header.

Kann sein. War nur ein Test, damit die Timings irgendwelche Werte haben. 
Habe das ganze mit dem Logicanalyzer angeschaut.

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.