Lesen Sie den Fachbeitrag in der aktuellen Polyscope Ausgabe oder im E-Paper.

Moderne Displays unter Linux einbinden

TFT Display Systemintegration

Wenn es etwas gibt was stetig ist, dann ist es die Veränderung. Ein Paradebeispiel für den stetigen Wandel stellt auch die Elektronikbranche dar. Displays sind hiervon nicht ausgenommen. Was bei Halbleitern und Mikroprozessoren der Wunsch nach immer kleineren Strukturen ist, ist bei Displays der Wunsch nach immer höheren Pixeldichten auf den Paneln sowie die Reduktion des Stromverbrauchs. Dies sind jene Merkmale welche bei der Auswahl eines Displays für ein neues Produkt als erstes auffallen.

Display industrie TFT rund

Doch nicht nur im Bereich der Pixeldichte sowie des Stromverbrauchs gab es Veränderungen, auch im Bereich der Schnittstellen hat sich in der vergangenen Zeit einiges getan. Der Trend hin zu mehr «Weniger ist Mehr» wird auch hier fortgesetzt. So sind besonders jene Schnittstellen beliebt, welche wenig physischen Platz und damit oft auch wenige Leitungen benötigen, bei gleichzeitig hohen Datenraten.

Bilddaten, welche früher über eine RGB-Schnittstelle mit rund 30 Leitungen geführt werden mussten, lassen sich heute problemlos mittels zweier differentieller Signalpaare übermitteln. Dies spart enorm viel Platz und ermöglicht die Entwicklung von deutlich kompakteren Ansteuerboards.

Eine Schnittstelle, welche diese Vorteile bietet, ist beispielsweise das DSI. Das DSI (Display Serial Interface) wird von der MIPI-Allianz spezifiziert und umfasst die Spezifikation eines seriellen Übertragungsbusses sowie ein dazugehöriges Kommunikationsprotokoll zwischen dem Host und dem Display. Ursprünglich angedacht, um eine einheitliche Spezifikation für Mobile-Geräte zu schaffen, findet diese Schnittstelle zunehmend auch im Industriellenbereich Anwendung.

Initialisierung

Das DSI lässt sich in zwei verschiedenen Modi betreiben, im Low-Power- (LP) oder im High-Speed-Modus (HS). Der LP-Modus ist dazu gedacht, Konfigurationen an das Display bzw. den Displaycontroller zu senden. Im HS-Modus werden die eigentlichen Bilddaten gesendet.

TFT Display DSIr die Initialisierung stehen zwei verschiedene Command Sets zur Verfügung. Einmal das DCS (DSI Command Set) sowie das MCS (Manufacturer Command Set). Ersteres ist allgemein spezifiziert und wird daher von fast allen Controllern unterstützt. Letzteres enthält spezielle Kommandos welche herstellerspezifisch sind. Beispielsweise um eine Gammakorrektur der Displayfarben vorzunehmen.

Integration

Die Integration eines DSI-Displays läuft in wenigen Schritten ab. Zuerst werden die Konfigurationsdaten an das Display gesendet, dabei werden unter anderem die Displaytimings konfiguriert sowie das Datenformat des DSI. Ist dies abgeschlossen, wird in den HS-Modus gewechselt und es werden Bildinformationen gesendet.

Inzwischen gibt es viele Mikrocontroller und Prozessoren, welche bereits einen DSI-PHY enthalten. Also einen integrierten, dedizierten HW-Block zur Ansteuerung von DSI-Displays. Dies erleichtert die Integration deutlich.

Device-Tree macht vieles leichter

Da heutzutage auf vielen Geräten ein Linux-Betriebssystem im Hintergrund läuft gibt es oft die Anforderung ein DSI-Display mit einem solchen System zu verbinden. Gewisse Linux-Kernel-Forks[1], wie beispielsweise jener von Rockchip, erleichtern einem diese Arbeit markant.

So wurde im Rockchip Kernel der Display-Treiber „panel-simple.c“ so angepasst, dass dieser die gesamte Konfiguration bequem aus einem Device-Tree auslesen kann und die DSI-HW entsprechend initialisiert.

Eine mögliche (unvollständige) Konfiguration könnte z.B. so aussehen:

dsi_panel: panel@0 {

status = „okay“;

compatible = „simple-panel-dsi“;

dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO_SYNC_PULSE)>;TFT Display Embedded Board

dsi,format = <MIPI_DSI_FMT_RGB888>;

dsi,lanes  = <2>;

panel-init-sequence = [

05 00 02 B2 50

];

disp_timings: display-timings {

native-mode = <&timing0>;

timing0: timing0 {

clock-frequency = <120000000>;

hfront-porch = <104>;

hback-porch = <127>;

pixelclk-active = <0>;

};

};

};

 

Der obige Abschnitt kann auch als Overlay kompiliert werden. Dadurch lässt sich das DSI bequem aktivieren, ohne erneutes Kompilieren des gesamten Kernels oder einzelner Module davon. Voraussetzung ist jedoch, dass der verwendete Kernel einen Treiber für «simple-panel-dsi» entweder bereits integriert hat oder dieser Treiber als Modul vorhanden ist.

Blick in die Zukunft

Das DSI findet zunehmend Verbreitung in der Displaybrache. Nicht zuletzt auch aufgrund der Tatsache, dass viele mobile Geräte fast ausschliesslich auf dieses Interface setzen. Auch wir sehen einen zunehmenden Trend in diese Richtung. Die Nachfrage ist aktuell zwar eher gering jedoch lohnt es sich, diese Schnittstelle bei zukünftigen Projekten ebenfalls zu berücksichtigen.