Forum: Mikrocontroller und Digitale Elektronik STM32F4x9 - FMC - SSD196x


von GuteFrage (Gast)


Angehängte Dateien:

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 :-)

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

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

EDIT: Ich frage deshalb, weil ich schon zwei verschiedene TFT-Controller 
benutzt habe und am Ende hat mir LTDC am besten gefallen.

von GuteFrage (Gast)


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?

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?


von GuteFrage (Gast)


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!

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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 :).

von dasrotemopped (Gast)


Angehängte Dateien:

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.

von GuteFrage (Gast)


Lesenswert?

> Leider Falsch. 4LCD und 2 SDRAM packt der STM32F429 gleichzeitig.

Ja stimmt. Ich habe nicht realisiert, dass der FMC_NEx für SDRAM  NOR  
NAND jeweils an anderen Pins liegt.

von GuteFrage (Gast)


Angehängte Dateien:

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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Du hast einen Fehler in der Initialisierung. Guck mal in den von mir 
geposteten Thread nach dem dort geposteten Manual.
Ich bin leider gerade nicht in der Werkstatt sonst hätte ich dir meine 
Init-Routine geschickt...

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von GuteFrage (Gast)


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?

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von GuteFrage (Gast)


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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von GuteFrage (Gast)


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.

von GuteFrage (Gast)


Lesenswert?

Ich hatte noch einmal von vorne angefangen.
Der Fehler aber besteht weiterhin. Ich bin mit dem Thema durch für 
heute.

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.