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