Hi,
ich arbeite gerade mit einem STM32F103 Prozessor und dessen FSMC
Interface - leider noch ohne zählbaren Erfolg. Als Device ist ein
ICS2008B SMPTE Prozessor angeschlossen. Die Register dieses Prozessors
können bzw. sollen über das Ext. Memory Interface ausgelesen und
beschrieben werden können.
Beim Schreibzugriff stürzt mir bis jetzt aber immer der STM32 Prozessor
ab und ausgelesen bekomme ich auch nichts brauchbares.
Hier mal meine Hardware-Verbindungen zwischen beiden ICs, vielleicht ist
hier bereits was falsch:
STM-Prozessor ICS2008B
A[0, 1] A[0, 1] Addressbus
D[0, 7] D[0, 7]
FSMC_NWE IOW
FSMC_NOE IOR
FSMC_NE3 UARTCS
FSMC_NE2 SMPTECS
Externe Pullups oder ähnliches sind nicht installiert.
Write-Pulse-Width vom ICS2008B muss mindestens 150ns lang sein; > daraus
schließe ich eine Frequenz von maximal 6,66MHz. HCLK ist bei mir die
SYSCLK. Der STM32 Prozessor läuft mit 72MHz.
einen Fehler hab ich gefunden. Im zweiten GPIO_Init muss GPIOE stehen.
Allerdings ist das Ergebnis immer noch dasselbige.
Hab ich den ICS2008B richtig an den STM32 angeschlossen?
Ich kämpfe auch gerade mit dem STM32.
Hast Du mal versucht den Takt soweit herunter zu teilen bzw.
Einzelschritt debuggen das so etwas wie ein Einzelschrittbetrieb
entsteht?
Dann kannst Du mit LEDs live die Ports beobachten, also eine simple
Logik Analyse.
Man kann leider viele Fehler beim STM32 machen :-(
die einzlnen Pins wiei NWE oder NOE werden auf jeden Fall entsprechend
gesetzt. Die HCLK hab ich durch 16 geteilt, weil der ICS2008B lediglich
6,66MHz verträgt. Aber im Speicherbereich wird leider immer nur das
gleiche Muster 0x0A07 angezeigt - egal welche Einstellungen ich mache.
HCLK = SYSCLK = AHB-Clock = 72MHz
Mit diesen Settings werden zwar irgendwelche Daten über das Ext.
Memory-Interface übertragen aber nicht die richtigen.
ICS2008B (auf Seite 15 ist das Timing-Diagramm aufgeführt)
http://datasheet.octopart.com/2008BY-10-IDT-datasheet-7619573.pdfSTM32 Reference Manual
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf
Sobald ich den p.FSMC_DataSetupTime Wert größer als 1 wähle, bleibt
unabhängig von den anderen Einstellungen (wie AddressHoldTime und
AddressSetupTime) das angezeigte Ergebnis im Memory-Viewer immer gleich.
Bei einem p.FSMC_DataSetupTime = 0 bekomme ich einen Hardfault-Error,
den ich auch nicht ganz nachvollziehen kann.
Gruß
Jens
Jens schrieb:> STM-Prozessor ICS2008B>> A[0, 1] A[0, 1] Addressbus
Du hast nur vier verschiedene Adressen, sehe ich das richtig?
> D[0, 7] D[0, 7]
Ok.
> FSMC_NWE IOW
Ist das write enable auf der ICS-Seite auch low-aktiv?
> FSMC_NOE IOR
Das passt nicht. NOE ist ein low-aktives output enable und kein
read.
oe(aktiv) AND we(aktiv) = write
oe(aktiv) AND we(inaktiv) = read
Da muß wahrscheinlich etwas glue logic dazwischen.
> FSMC_NE3 UARTCS> FSMC_NE2 SMPTECS
Passt hier die Polarität?
Hast Du ein Oszi oder Logicanalyzer zur Hand?
Damit solltest Du Dir die Signale mal anschauen und mit dem Datenblatt
vergleichen.
Grüße
Sven
Sven Wagner schrieb:>> FSMC_NWE IOW> Ist das write enable auf der ICS-Seite auch low-aktiv?>>> FSMC_NOE IOR> Das passt nicht. NOE ist ein low-aktives output enable und kein> read.
Das sollte so schon passen (Seite 500 sieht man den verwendeten Read und
Write-Access
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf).
Beide Signals sind bei beiden Prozessoren low-active.
Sven Wagner schrieb:> oe(aktiv) AND we(aktiv) = write> oe(aktiv) AND we(inaktiv) = read
Bei Write ist WE active und bei Read ist OE active. Bei beiden Zugriffen
ist zusätzlich der jeweils benötigte CS low-active. Besitze leider nur
ein normales Oszi mit zwei Eingängen. Auf allen Leitungen (OE, CS, NWE
und den Addr und Datenleitungen) kann ich die Aktivität mir anschauen.
Eddy Current schrieb:> Klassiker bei STM32: Clock eingestellt, aber nicht enabled.
Die Clocks hab ich auch enabled
Ich habe noch nichts mit dem F103 und dessen FSMC gemacht (Nur am F4),
aber kann es sein das sich
1
p.FSMC_CLKDivision
nur auf den Clockout des FSMCs bei Synchronen Interfaces (PSRAM etc)
bezieht?
So habe ich das jedenfalls beim F4 verstanden. Und mein F4 läuft ganz
gut mit einem Memory Mapped FPGA dran , Buszyklus nur durch Setup und
Hold Parameter auf das Interface angepasst.
Bezüglich des Hardfault bei
1
p.FSMC_DataSetupTime=0
meint das ST RM folgendes :
1
Duration of the second access phase (DATAST+1 HCLK cycles for
2
write accesses, DATAST+3 HCLK cycles for read accesses).
Claude Schwarz schrieb:> meint das ST RM folgendes :Duration of the second access phase (DATAST+1 HCLK
cycles for
> write accesses, DATAST+3 HCLK cycles for read accesses).> This value cannot be 0 (minimum is 1).
ok, das würde das auf jeden Fall erklären.
Claude Schwarz schrieb:> Ich habe noch nichts mit dem F103 und dessen FSMC gemacht (Nur am F4),> aber kann es sein das sichp.FSMC_CLKDivision
Ich schätze mal, dass diese sehr ähnlich aufgebaut sein werden. Das mit
dem CLKDevision hab ich auch im Datenblatt gelesen. Wird nur bei
synchronen Interfaces.
Jens schrieb:> p.FSMC_AddressSetupTime = 1;> p.FSMC_AddressHoldTime = 1;> p.FSMC_DataSetupTime = 1;> p.FSMC_BusTurnAroundDuration = 8; //> p.FSMC_CLKDivision = 0; //not supported> p.FSMC_DataLatency = 0; //not supported> p.FSMC_AccessMode = FSMC_AccessMode_A;
Im Prinzip hab man ja nur drei Parameter zur Auswahl mit denen man das
Timing ggf. anpassen kann - AddressSetuptime, -holdtime und
DataSetupTime. Die BusTurnAroundDuration gibt nur den zeitlichen Abstand
zwischen zwei Zugriffen auf den extern angeschlossenen IC an.
Gruß
Jens
Jens schrieb:>>> FSMC_NOE IOR>> Das passt nicht. NOE ist ein low-aktives output enable und kein>> read.>> Das sollte so schon passen (Seite 500 sieht man den verwendeten Read und> Write-Access> http://www.st.com/internet/com/TECHNICAL_RESOURCES...).
Ok. Ich ziehe meine Aussage zurück und behaupte das Gegenteil :)
Die haben aber auch eine komische Nomenklatur bei STM. M.E. etwas zu
sehr SRAM-fixiert.
> Besitze leider nur> ein normales Oszi mit zwei Eingängen. Auf allen Leitungen (OE, CS, NWE> und den Addr und Datenleitungen) kann ich die Aktivität mir anschauen.
Nagut. Bei mir haben eigentlich alle Oszis vier Eingänge. Aber was nicht
ist, kann ja noch werden :)
Stimmen den die gemessenen Pulslängen (und evtl. die Abstände der Pulse)
der einzelnen Signale mit den Erwartungen (und den Angaben im Datenblatt
des ICS2008B) überein?
Grüße
Sven
Jens schrieb :
>Im Prinzip hab man ja nur drei Parameter zur Auswahl mit denen man das>Timing ggf. anpassen kann - AddressSetuptime, -holdtime und>DataSetupTime. Die BusTurnAroundDuration gibt nur den zeitlichen Abstand>zwischen zwei Zugriffen auf den extern angeschlossenen IC an.
Genau , und hier auf Seite 17 wird beschrieben was für Werte Du für
einen 150ns Write Cycle einstellen musst :
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00200423.pdf
Claude Schwarz schrieb:> Genau , und hier auf Seite 17 wird beschrieben was für Werte Du für> einen 150ns Write Cycle einstellen musst :
Danke für den Link; hatte erst jetzt wieder Zeit an diesem Projekt
weiterzuarbeiten -> leider noch ohne Erfolg.
DATAST × tHCLK = tPWE1 -> bei dem IC muss tPWE1 mindestens 150ns
-> DATAST = 10.8 -> = 11;
DATAST >= (tAA + tsu(Data_NE) + tv(A_NE))/tHCLK – ADDSET – 4
11 >= (150ns + 52.76ns)/13.88ns - ADDSET - 4
-> wenn ADDSET = 0 -> 11 = 11;
((ADDSET + 1) + (DATAST + 1)) × tHCLK >= max (tWC)
24 * 13.88ns = 333ns >= 200ns
Alle drei Gleichungen sind locker erfüllt, aber die Daten kann ich aus
dem ICS2008B immer noch nicht auslesen. Egal welche Zeiten ich für
Datasetup oder Addrsetup eingebe, ich lese immer die gleichen Zahlen aus
dem IC aus :-(