Hallo Ihr,
Ich habe einen STM32F43X mit einem externen SRAM.
Die Ansteuerung funktioniert wie gewünscht. Ich kann den Speicherbereich
des SRAMs innerhalb der Memory Bank des STM32F4 benutzen.
Jedoch mag ich zu bezweifeln, dass ich das Themengebiet vollständig
verstanden habe, was die Timings und eventuell die Einstellungen angeht.
Ich habe den SRAM CY7C1051DV33:
http://www.cypress.com/file/42786/download
Das Referenzhandbuch vom STM32F4xx findet ihr hier:
http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf.
Ab Seite 1589 wird es für diese Frage interessant. ;)
Was ich nicht ganz verstehe, ist die Zeiten des SRAM richtig zu
konfigurieren.
Ich kann folgende Zeiten einstellen (STM Seite 1600 /Tabelle 258) und
ich würde diese auf folgende Zeiten (aus dem Datasheet des SRAM, Seite
6) anpassen.
+ Address Setup <------- Address Setup to Write End?
+ Address Hold <------- Data Hold from Address Change?
+ Data Setup <------- Data Setup to Write End?
+ Bus Turn <-------- ?
+ Clock divide ratio <-------- ?
+ Data latency <----------- ?
+ AccessMode <------------- ?
Ich bin mir aber absolut nicht im klaren ob meine nicht vollständigen
Zuordnungen richtig sind.
---
Mein Verständnis über die allgemeine Taktzeit des SRAMs ist folgende:
Die Taktfrequenz des SRAM leitet sich von meiner HCLK dividiert durch
die CLock Divide Ratio ab. Bei einer HCLK von 100 MHz und eine Clock
Divide Ratio von 2 erhalte ich 50 Mhz (20 ns). Dies sieht für mich so
aus, als würden meine Verzögerungen des Microcontrollers stehts größer
sein als die maximalen Timings des SRAMS (12 ns). Lieg ich mit meiner
Annahme richtig?
Schon einmal vielen Dank für eure Hilfe!
---
Meine NORSRAM bank Konfiguration sieht übrigens so aus:
1 | init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
|
2 | init.MemoryType = FMC_MEMORY_TYPE_SRAM;
|
3 | init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
|
4 | init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
|
5 | init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
|
6 | init.WrapMode = FMC_WRAP_MODE_DISABLE;
|
7 | init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
|
8 | init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
|
9 | init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
|
10 | init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
|
11 | init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
|
12 | init.WriteBurst = FMC_WRITE_BURST_DISABLE;
|
13 | init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
|