STM32F4x9 - FMC - SSD196x

Gast #4592009
Lesenswert?

Guten Tag,

http://www.waveshare.com/wiki/Core429I

ich habe das Board, dessen Schaltplan im Anhang zu sehen ist. Wenn ich 
jetzt ein SSD1963 anschließen will, so muss ich doch das SDRAM (links 
unten) ablöten, weil ich den FMC_NE1 für den Chip-Select des SSD 
bräuchte, oder?

PS: Vermutlich ist der Schaltplan an dieser Stelle unkorrekt. Der 
FMC_NE1 liegt an PD7 nicht an PH6 und überall steht FSMC obwohl der 429 
den FMC hat.

Prinzipiell müsste ich den SSD wie folgt anschließen, oder?
FMC_D0 - FMC_D15 => D0 - D15
FMC_NOE          => E(/RD)
FMC_NWE          => /RM(/WR)
FMC_NE1          => /CS
FMC_A16          => D/C

Ich bin über eure Hilfe sehr dankbar :-)
Angehängte Dateien:
Gast #4592031
Lesenswert?

> Direkt über den LTDC des µC willst du nicht, oder?

Danke für deine Antwort :-)
Nein. Ich habe ein Display Modul und dort nur die Kontakte des SSD1963 
nach außen geführt.
Der SSD1963 würde, wenn ich es richtig verstanden habe, die Rolle des 
SDRAMs und des Controllers (LTDC) übernehmen?!

Demnach muss der "alte" SDRAM (links unten im Schaltplan) runter, nicht?
(Firma: HEGRO GmbH) #4592039
Lesenswert?

GuteFrage schrieb:
> Der SSD1963 würde, wenn ich es richtig verstanden habe, die Rolle des
> SDRAMs und des Controllers (LTDC) übernehmen?!
Ja genau, der SDRAM wird vom SSD gesteuert, du greifst nur indirekt über 
den SSD darauf zu.

GuteFrage schrieb:
> Nein. Ich habe ein Display Modul und dort nur die Kontakte des SSD1963
> nach außen geführt.
Ich glaube ich habe auch das gleiche rumliegen. War mir zu langsam und 
habe deswegen auf LTDC gewechselt.
Das Teil ist relativ langsam. Da flüssig etwas Bewegtes darzustellen 
habe ich nicht hinbekommen. Ich kann dir allerdings nicht sagen ob es an 
meinen Fähigkeiten lag oder der SSD einfach zu langsam war. Habe einfach 
den kompletten Hintergrund abwechselnd mit zwei Farben füllen lassen. 
FSMC habe ich so weit hochgeschraubt, dass keine Fehler mehr zu erkennen 
waren. Und trotzdem war das Teil relativ langsam. Wenn ichs noch recht 
im Kopf habe, waren es um die 10FPS.

GuteFrage schrieb:
> Demnach muss der "alte" SDRAM (links unten im Schaltplan) runter, nicht?
Also normal kannst du das einfach dazustecken. Mit dem CS wird dann 
entweder der SDRAM oder der SSD aktiviert bzw. angesprochen.
Gast #4592044
Lesenswert?

Danke für den Beitrag.

Bewegte Bilder sollen es nicht werden, wodurch der SSD erst einmal 
reichen soll :-) Ich will nur Texte ausgeben, die sich selten ändern.

Stimmt. Das NE1 ist der ChipSelect. Wenn ich diesen auf beiden SDRAMs 
nutzen, kommt es zum konflikt. Deswegen muss ich den alten "SDRAM" 
entfernen müssen :(

Danke!
(Firma: HEGRO GmbH) #4592059
Lesenswert?

GuteFrage schrieb:
> Bewegte Bilder sollen es nicht werden, wodurch der SSD erst einmal
> reichen soll :-) Ich will nur Texte ausgeben, die sich selten ändern.
Ja, dann passt der auf jeden Fall! Die Ansteuerung ist auch bissle blöd. 
Du kannst den Speicher nicht direkt beschreiben. Du musst ihm vorher ein 
paar Befehle senden, welchen Speicherbereich du beschreiben möchtest. 
Naja, wirst ja sehen, Spaß macht es auf jeden Fall!

GuteFrage schrieb:
> Stimmt. Das NE1 ist der ChipSelect. Wenn ich diesen auf beiden SDRAMs
> nutzen, kommt es zum konflikt. Deswegen muss ich den alten "SDRAM"
> entfernen müssen :(
Eigentlich gibt es ja ein NE0 und auch noch. Ich habe grad keine Zeit 
mich da reinzulesen, aber ich würde an deiner Stelle mal schauen, ob es 
nicht doch so geht. Auf keinen Fall musst du das gesamte SDRAM 
entfernen!

Hier noch ein paar Links zu dem Thema:
Beitrag "STM32F4 Discovery - SSD1963 TFT"
Beitrag "STM32F4 SSD1963 TFT FONTS"

Hey, ich sehe gerade, ich habe den SSD1963 auch schon am Core429I 
gehabt, siehe die beiden Threads :) Und ich habe da nichts 
weggeschnibbelt :).
Gast #4592230
Lesenswert?

>Das NE1 ist der ChipSelect. Wenn ich diesen auf beiden SDRAMs
>nutzen, kommt es zum konflikt. Deswegen muss ich den alten "SDRAM"
>entfernen müssen.

Leider Falsch. 4LCD und 2 SDRAM packt der STM32F429 gleichzeitig.
Wäre ja auch blöd, wenn man Grafik nicht mit mehr RAM kombinieren 
könnte.

Gruß,

dasrotemopped.
Angehängte Dateien:
Gast #4593534
Lesenswert?

Guten Morgen,

ich habe das Display nun erfolgreich anschließen können.
Aktuell ändere ich immer nur die Hintergrundfarbe:
1
while (1) {
2
  SSD1963_Clear(SSD1963_ConvertColor(0x00000000));
3
  SSD1963_Clear(SSD1963_ConvertColor(0xffffffff));
4
}

1) Schwarz funktioniert, das 0xFF ist aber eher ein heller Blauton.

2) Das ganze arbeitet gerade mit geschätzten 3-4 FPS. Lässt sich da noch 
irgendwie mehr rausholen oder bin ich an der Grenze?

Beste Grüße.
Angehängte Dateien:
(Firma: HEGRO GmbH) #4593626
Lesenswert?

Bei mir hatte ich das gleiche Problem.
Dein Takt ist nicht gesetzt. Ich hatte damals zwei Zeilen vertauscht 
gehabt. Überprüfe das nochmals.
Dann schau dir die Befehle für die Pixelformate und Ähnliches an. Da ist 
ein Fehler im Manual. Probiere diese Einstellungen einfach mal alle 
durch.
Gast #4593673
Lesenswert?

Danke, Reginald Leonczuk.

Das war bislang sehr hilfreich. Das neuere Datenblatt enthält auch 
irgendwie mehr Infos. Die Farben werden nun korrekt angezeigt. Ich 
versuche noch gerade die FPS anzukurbeln.

> Dein Takt ist nicht gesetzt.

GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz;

Da es ohne diese Zeile erst gar nicht funktionieren würde, denke ich, du 
meinst etwas anderes?
(Firma: HEGRO GmbH) #4593705
Lesenswert?

GuteFrage schrieb:
> GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz;
>
> Da es ohne diese Zeile erst gar nicht funktionieren würde, denke ich, du
> meinst etwas anderes?
Nee, ich meinte die SSD PixelClock. Schau dir deine Init-Routine nochmal 
genau an. Da muss entweder irgendwas vertauscht sein bzw. VCO und PLL 
stimmt nicht. Zumindest war das bei mir der Fall.
Gast #4593744
Lesenswert?

Okay,

vielleicht habe ich einen Denkfehler drinn:

Am OSCIN des SSD habe ich 10 Mhz.

VCO = Input clock * (M + 1) = 10 Mhz * (M + 1)
PLL = VCO / (N + 1)

mit 250 Mhz < VCO < 800 Mhz
und PLL < 110 Mhz

(aus dem DB 
http://www.solomon-systech.com/files/ck/files/SSD1961_2_3_Application_note_v1.7.pdf 
Seite 16/28).

In dem Beispiel des DBs ist auch ein 10 Mhz Quarz angeschlossen. Also 
habe ich die selben Werte genommen, was zu einer PLL frequenz von 100 
Mhz führt.

M = 29, N = 2

SSD1963_Write_cmd(0xE2);
SSD1963_Write_data(0x001D);
SSD1963_Write_data(0x0002);
SSD1963_Write_data(0x0054);

//ENABLE PLL
SSD1963_Write_cmd(0xE0);
SSD1963_Write_data(0x0001);
delay_us(10);
SSD1963_Write_cmd(0xE0);
SSD1963_Write_data(0x0003);
delay_us(10);

Ich habe mit den Werten auch etwas rumgespielt, es ist aber kaum eine 
Veränderung zu sehen. Irgendwie vermute ich den Fehler woanders - was 
aber auch nur eine Vermutung ist.
(Firma: HEGRO GmbH) #4593790
Lesenswert?

GuteFrage schrieb:
> Ich habe mit den Werten auch etwas rumgespielt, es ist aber kaum eine
> Veränderung zu sehen.
Das bestärkt mich in meiner Vermutung, dass da irgendwas vertauschst ist 
in der Init-Routine. Ich erinnere mich noch, dass ich ewig den Fehler 
gesucht habe, ja schon gedacht habe, dass der SSD Schrottreif ist. Bis 
ich gemerkt habe, dass in meinem Code eine Zeile nicht da war, wo sie 
hingehört hat.

Wie gesagt, wäre ich in der Werkstatt, hätte ich dir meinen Code 
zugespielt.

Muss man nicht am Ende der Übertragung des PLLs und der Teiler noch 
irgendwie das ganze "Locken"?

Ach und noch was:
Guck dir mal die FSMC-Timings an. Ist der Code kopiert? Falls ja, lies 
dich da mal ein bisschen ein und schraube die Werte mal ordentlich 
runter. Vielleicht kommen die Befehle nicht korrekt an. Nur mal so als 
Test.
Gast #4593832
Lesenswert?

>  Ich erinnere mich noch, dass ich ewig den Fehler
> gesucht habe, ja schon gedacht habe, dass der SSD Schrottreif ist.

Sehr motivierend :-)

Laut Datenblatt gibt es ein Dummy Byte welches später gesendet werden 
muss. Habe ich auch gemacht.

Ich gehe nochmal alles Schritt für Schritt durch.
Der Teufel steckt im Detail.

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