Fahren von Nokia TFT LCD mit STM32

Wie erhöhe ich die Aktualisierungsrate eines Nokia LCD, das ich mit dem STM32F103-Mikrocontroller fahre?

Das LCD ist 132*162 und nimmt einen 9-Bit-Befehl/DATEN mit RGB für jedes Pixel im 565-Format. Da SPI auf STM32 keine 9 Bits ausführen kann, verwende ich USART (mit maximal 4.000.000 Bit / s, da ich HSPI verwende) im 9-Bit-Modus, um das LCD anzusteuern.

Das funktioniert ganz gut, aber die Bildwiederholfrequenz ist nicht so toll. Im Moment brauche ich ungefähr 230 ms, um den gesamten Bildschirm zu schreiben.

Grob gerechnet, (132*162*2*9)/4e6 = 97 ms. Meins ist aufgrund von Overheads höher + der Tatsache, dass ich jedes Byte vor dem Senden spiegeln muss, da USART zuerst nur LSB macht.

Ich suche nach einigen Vorschlägen, wie ich die Bildwiederholfrequenz reduzieren kann.

  1. Verwenden Sie DMA? Ich bin mir nicht sicher, wie nützlich es in diesem Fall wäre, da mein Mikrocontroller nur das LCD ansteuert. Nichts anderes.

  2. Puffern Sie das LCD-Display im RAM und senden Sie es auf einmal an das LCD. Ich kann nicht, da der Mikrocontroller nur 16 KB RAM hat.

  3. Bit Bang GPIO zum Ansteuern des LCD. Ich bin mir nicht sicher, ob dies eine Rate von mehr als 4 MHz von USART erreichen würde. Außerdem verliere ich damit die Möglichkeit, DMA bei Bedarf in Zukunft zu verwenden.

Das von mir verwendete LCD wird in der Nokia C100-Serie verwendet und verwendet den Controller SPFD54124B.

Verwenden Sie DMA mit SPI mit 3x8-Bit-RGB und verschachteln Sie W/R-Frames, wenn Updates erforderlich sind
Oder verwenden Sie 18 Bit mit ILI9325 GRAM-Treiber mit mühelosem SPI und ohne redundante Bytes
Deine Frage ist etwas unklar. Verwendest du HSPI oder UART? Sie sollten auch den LCD-Controller angeben.
Unter der Annahme, dass es sich um den ILI9163 handelt, können Sie auf die 4-Draht-SPI-Schnittstelle umschalten, wenn Sie Zugriff auf die D/CX-, IM2- und 4WSPI-Pins des Controllers haben.
@TisteAndii Ich verwende usart-Peripheriegeräte im Spi-Modus
@TisteAndii zur Frage hinzugefügt. Es ist ein Nokia LCD mit spfd54124b Controller
Haben Sie Zugriff auf die Auswahlpins der Controller-Schnittstelle, sodass Sie auf 4-Draht-SPI (oder einen anderen Modus) umschalten können? Andernfalls stecken Sie in diesem Modus fest und es scheint keine einfache Möglichkeit zu geben, die Dinge zu beschleunigen, während DMA im Bild bleibt.

Antworten (3)

Sie wollen etwas, das wie SPI aussieht, also würde ich versuchen, SPI zum Laufen zu bringen.

Unter der Annahme, dass Ihr LCD (das Sie vielleicht spezifizieren möchten) kein bestimmtes Timing zwischen den Wörtern benötigt, sollten Sie einfach die Wortmodi verwenden, die der STM32F1 zu bieten hat (8 oder 16 Bit, iirc), und 8 Wörter bei ausgeben einmal – das wären 72 Bit, und das kann in 9 SPI-Übertragungen aufgeteilt werden.

Hmm. Ich habe etwas Ähnliches wie das von Ihnen vorgeschlagene versucht, bei dem ich die Lcd-Schreibvorgänge sozusagen zwischenspeichere, bis ein Puffer von 72 Bit voll ist, und dann alles aussende, sobald er voll ist. Aber ich habe keine signifikante Geschwindigkeitssteigerung aufgrund all der Verschiebungen bemerkt, die ich machen musste, um einen 9-Bit-Wert in einem Byte-Array zu speichern. fügte der Frage auch die Controller- und LCD-Details hinzu

Der SPFD54124B verfügt über eine 4-polige 8-Bit-SPI-Schnittstelle. Verwenden Sie diese einfach anstelle der 3-poligen 9-Bit-"SPI-ähnlichen" Schnittstelle.

Siehe folgendes Datenblatt Seite 118.

Die vierpolige SPI-Schnittstelle verwendet a

  • "CSX": Chip Select (MCU->Display-Controller)
  • "SCL": Serielle Uhr (->)
  • "DCX": Daten||Befehl (->)
  • "SDA": Daten (->)

CSX, SCL, SDA können vollautomatisch von SPI-Hardware auf Ihrer MCU verarbeitet werden. DCX müsste ein GPIO sein. Das ist kein Problem. Sie können den GPIO-Pin einfach auf Daten setzen, Ihre High-Rate-Pixeldaten streamen, dann den Interrupt abfangen, wenn das erledigt ist, den DCX-Pin umschalten, Befehle senden, den Interrupt abfangen, wenn er fertig ist, und wieder in den Datenmodus wechseln.

Wirklich, ich bin irgendwie traurig, dass du so lange gebraucht hast, um zu sagen, welchen Controller du verwendest. Du hättest viel, viel schneller eine Antwort bekommen können.

Guter Punkt. Es war ein Versehen meinerseits, den Controller nicht früher angegeben zu haben. Abgesehen davon ist mir der Modus bekannt, auf den Sie sich bezogen haben, aber leider ist dieser spezielle Modus nach allen Informationen, die ich aus dem Internet sammeln konnte, auf diesem LCD nicht aktiviert (der D / C-Pin ist nicht zugänglich), daher man bleibt im 9-Bit-Modus hängen. Vielleicht sollte ich das auch in die Frage aufnehmen. Danke!

Sie verwenden LCD mit serieller Schnittstelle. Das hat großen Einfluss auf die Geschwindigkeit. Sie sollten LCD mit paralleler Schnittstelle verwenden, wenn Sie die Bildwiederholfrequenz erheblich beschleunigen möchten.