Forum: Mikrocontroller und Digitale Elektronik STM32 SRAM Timings


von Toni N. (toni_n)


Lesenswert?

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;

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.