N95 8GB LCD mit STM32F4

Einleitung

Nachdem ich für einen Bekannten ein Nokia N95 8GB neu aufgesetzt und seine Daten überspielt hatte, war ich von dem verbauten Display überrascht. Die für ein Handy recht große Displayfläche und gute Auflösung machen das Display für eigene Entwicklungen interessant. Auf der Suche nach Informationen bin ich im Internet auf die Seiten von Andy Brown gestoßen. Auf diesem beschreibt er, wie er verschiedene Nokia-Displays einem Reverse Engineering unterzogen hat und dadurch die Ansteuerung bzw. den Displaycontroller ermitteln konnte. Das größte Display seiner Nokia-Serie stammt glücklich weiße aus einem N95 8GB. Daraufhin habe ich mich mit diesem Display etwas näher auseinander gesetzt und die Ergebnisse auf dieser Seite dokumentiert.

Detailinformationen zum Display

Herkunft: Nokia N95 8GB (überarbeitete Version des N95)
Display-Anzeigefläche: 57 x 42 mm  -  2,8"
Display-Auflösung: 320 x 240 Pixel  - QVGA
Display-Farben: 16.777.216 Farben
Display-Modul Maße: 67 x 47 x 2 mm
Display-Beleuchtung: Transflektiv
Display-Controller: LDS285


Nokia N95 8GB Display-Modul im Größenvergleich mit einer Euromünze

Wie man auf dem Foto sehen kann, ist das Display sehr kompakt. Besonders die geringe Dicke von nur ca. 2 mm ermöglicht den Einbau in besonders kleine und flache Geräte.

Rückseite des Nokia N95 8GB Display-Modul


Steckverbinder

Das Display-Modul des Nokia N95 8GB kommt im Gegensatz zum Display des Vorgänger-Handys N95 mit einem 24 poligen Steckverbinder am FPC. Dadurch lässt sich dieses etwas besser in eigene Schaltungen integrieren.

Steckverbinder des Nokia N95 8GB Displays

Das notwendige Steckersystem ist vom Typ JST 24R. Pitch ist 0,4 mm. Die folgenden Bilder zeigen die passende Buchse zum Display-Stecker.



Display-Adapter

Der Versuch, dünne Litze direkt an die Buchse an zulöten,  ist gescheitert, da sich die einzelnen Pins schon bei minimaler Belastung aus dem Steckverbinder lösen. Deshalb habe ich eine Adapterplatine erstellt, welche die Signalleitungen des Displays im gut zu verarbeitenden 2,54 Raster zur Verfügung stellt. Dadurch kann das Display auf Lochrasterplatinen oder mit Pfostensteckverbindern mit der Zielhardware verbunden werden. Damit ließen sich dann einfach eigene Versuche mit dem Display durchführen.


Schaltplan des Display-Adapters

Generell handelt es sich um einen 1:1 Adapter, der jeden einzelnen Pin des Displaysteckers zur Verfügung stellt. Dies hat den großen Vorteil, dass die Platine auch universell für andere Nokia Displays dieser Serie mit gleichem Steckverbinder genutzt werden kann, die zum Teil eine abweichende Pin-Belegung besitzen. Speziell für das N95 8GB Display können die vier Bauelemente R1 und C1-C3 in der Bauform SMD 0805 auf der Platine bestückt werden, welche die Versorgungsspannung puffern und den RD/Reset Pin beschalten. Über die optionale Lötstelle SJ1 lässt sich Pin 1 des Displays auf Masse legen und mit SJ2 können die getrennten Versorgungsspannungen VBAT und VIO_APE miteinander verbunden werden.

Layout des Display-Adapters

Die Abmessungen der kompakten Platine betragen 24 x 35 mm. Über zwei Bohrungen lässt sich der Adapter in eigenen Projekten befestigen, damit die Platine halt bietet und die Belastung auf das Display-Kabel geringer wird. Der Bestückungsdruck auf der Oberseite der Platine passend für das N95 8GB Display zeigt die genauen Bezeichnungen der einzelnen Pins und vereinfacht somit die Verbindung mit einem beliebigen Mikrocontroller.

Vorder- und Rückseite der Platine
bestückte Platine


Von den Adapterplatinen habe ich aufgrund der geringen Größe einige mehr fertigen lassen. Bei Interesse an einer Platine oder dem passenden Displaystecker könnt Ihr über das Kontaktformular unter About mit mir Kontakt aufnehmen. Solange der Vorrat reicht.


Verbindung mit STM32F4 Discovery

Die Verbindung mit dem STM32F4 Discovery Board ist denkbar einfach. Folgende Tabelle zeigt die notwendigen Verbindungen am Beispiel eines STM32F4-Discovery-Evaluation-Boards.

 Display Pinbelegung an Adapterplatine  STM32F4 Discovery Pin
 Pin 1: KBBC  GND
 Pin 2: GND  GND
 Pin 3: WR (Write Enable)  PD5
 Pin 4: CS (Chip Select)  PD7
 Pin 5: D6  PE9
 Pin 6: D4  PE7
 Pin 7: D2  PD0
 Pin 8: D0  PD14
 Pin 9: GND  GND
 Pin 10: 3V3 (VIO_APE)  3V3
 Pin 11: GND  GND
 Pin 12: 3V3 (VBAT)  3V3
 Pin 13: 3V3 (VBAT)  3V3
 Pin 14: GND  GND
 Pin 15: TE (Tearing Effect)  ---
 Pin 16: RES (Reset)  PE1
 Pin 17: D1  PD15
 Pin 18: D3  PD1
 Pin 19: D5  PE8
 Pin 20: D7  PE10
 Pin 21: RS (Register Select)  PD11
 Pin 22: RD (Read Enable)  PD4
 Pin 23: GND  GND
 Pin 24: 3V3 (VIO_APE)  3V3

Die GND-Pins sind im Display miteinander verbunden. Mittels SJ2 können auch alle 3V3 Pins auf der Platine miteinander verbunden werden. Somit müssen nicht alle Versorgungs-Pins der Platine verbunden werden. Die Nummerierung der Stiftleiste ist auf der Platine gekennzeichnet und identisch mit der Nummerierung des Display-Steckers.

Anzeige von Text


Darstellung von Bildern

Anbei noch ein kurzes Video des Displays im Betrieb mit der Adapter-Platine am STM32F4 Discovery:




STM32F4-Discovery LCD-Shield

Neben der universell einsetzbaren Adapterplatine habe ich noch ein LCD-Shield konstruiert, welches die Nutzung speziell in Verbindung mit dem F4-Discovery-Board vereinfacht. Somit lässt sich das Display einfach als Shield auf das Discovery-Board aufstecken.

Ein optionaler 3.3V Regler auf der Platine kann aus der 5V Versorgungsspannung des Discovery-Boards die notwendige Displayspannung erzeugen. Alternativ können kann aber auch die 3V des Discovery-Boards durchverbunden werden. Ebenfalls optional können die Buttons "User" und "Reset" sowie die vier Discovery LEDs bestückt werden, welche durch die Shield-Platine verdeckt sind. Die Breite des Shields ist identisch mit der des Discovery Boards.

Da das Display leider nicht wirklich zwischen die beiden 50-poligen Stiftleisten des Discovery-Boards passt, wurden diese zum Shield durchverbunden und etwas nach außen gesetzt (im 2,54 Raster). Die Beschriftung der einzelnen Pins auf dem Shield wurde als Bestückungsdruck hinzugefügt. Das Display kann bspw. mit einem Stück doppelseitigen Klebeband mit der Platine verbunden werden. Alternativ existieren vier Lötpunkte an den Ecken. Das Shield besitzt eine größere Ausfräsung an der Stelle des Kopfhörer-Anschlusses. Auch von den Shield-Platinen habe ich noch ein paar Platinen zu vergeben. Bei Interesse einfach melden.


unbestückte Shield Platine

N95 8GB Shield auf STM32F4-Discovery

N95 Shield in Betrieb

Anbei noch ein kurzes Video des Displays im Betrieb mit der Adapter-Platine am STM32F4 Discovery:




Software

Wie bereits erwähnt, lohnt sich ein Besuch der Seiten von Andy Brown (Suchmaschine). Er hat eine sehr umfangreiche C++ Library für verschiedene Display Typen mit unterschiedlichen Controller entwickelt, welche die Ansteuerung sehr einfach und komfortabel gestalten. An dieser Stelle nochmals vielen Dank an Andy Brown für das Reverse Engineering und den Code. Ohne diese Vorarbeit wäre diese Software nicht entstanden.

Da ich momentan in vielen Projekten mit C statt mit C++ programmiere, habe ich mich dazu entschieden, die generelle Ansteuerung des Displays nach C zu portieren. Nach einigen Versuchen ist mir dies auch gelungen. So könnt ihr auf meiner Seite ein C-Variante herunterladen, welche die grundlegende Initialisierung und Ansteuerung des Displays erlaubt. 

Den aktuellen Source Code findet Ihr unter folgendem Link:

http://www.mikrocontroller.net/topic/320791

Zum Kompilieren verwende ich den GCC und die Yagarto Toolchain. Es sollte mit geringen Anpassungen aber auch mit anderen Entwicklungsumgebungen laufen. Zusätzlich wird die kostenfreie ST Firmware Bibliothek benötigt. Das STM32F4 Discovery Board sollte auf eine Taktfrequenz von 168 MHz konfiguriert werden.

Für die Ansteuerung des Displays wird der FSMC Bus der STM32F4 Controller verwendet. Alle Funktionen und Treiber befinden sich in den zugehörigen *.c/*.h Files. Die Initialisierung erfolgt über den Aufruf der Funktion LDS285_Init_Display(); und eine kurze Demonstration ist über den Aufruf der Funktion LDS285_Demo(); möglich.

Der Code ist kommentiert und sollte sich soweit von selbst erklären. Funktionen zum Zeichnen von geometrischen Formen, zur Ausgabe von Text oder zur Darstellung von Abbildungen wie im Video lassen sich einfach aus anderen Display-Projekten integrieren. Diese sind jedoch im Code nicht enthalten.


Zusammenfassung

Das Handy-Display eignet sich aus meiner Sicht sehr gut für eigene Projekte, vor allem bei mobilen, batteriebetriebenen Geräten mit geringem Platz. Prinzipiell kann man es mit dem S65-Display vergleichen. Ich habe die positiven und negativen Punkte in einer Tabelle zusammen getragen, gerade auch im Bezug auf die vielen günstigen Displays aus China, welche gleiche Auflösungen bieten.

Vorteile:
- Versorgungsspannung von 3,3V ausreichend auch für Hintergrundbeleuchtung
- gute Bildqualität, Auflösung und Farbdarstellung etc.
- geringes Gewicht und Abmessungen
- günstiger Preis (als Ersatzteil auf Auktionsseiten um die 10€)
- einfache und schnelle Ansteuerung mit wenigen Pins (FSMC 8-Databits)

Nachteile:
- die Displayoberfläche ist ohne Schutzfolie empfindlich für Kratzer
- kein Touch-Screen

Damit bleibt mir nur noch viel Erfolg beim Einsatz in eigenen Projekten zu wünschen!

Bei Fragen könnt Ihr mit mir unter About über ein Mail-Formular in Kontakt treten.