How to write a low resolution and slow interface display panel driver

Revision as of 15:25, 22 July 2024 by Registered User (→‎Article purpose)
Applicable for STM32MP13x lines, STM32MP15x lines, STM32MP25x lines


1. Article purpose[edit source]

Low resolution display panels can be connected to STM32 boards using low speed interfaces like I2C, SPI or FMC. Some famous of this category of display panels are:

  • the SSD1306 monochrome OLED panels,
  • the GC9A01 round 16-bit color panels,
  • the 1602 monochrome 2 text lines panels.


The purpose of this article is to:

  • briefly describe the main characteristics of the low resolution panels,
  • present some hardware attention points to consider before writing a panel software driver,
  • introduce the Linux® kernel frameworks used to control these display panels,
  • describe how to write, test and debug your own display panel driver,
  • demonstrate simple use cases based on these display panels,
  • suggest alternatives for driving these display panels.
Info white.png Information
Before you continue reading this article, you might be interested in the following articles: DRM KMS overview, How to write a display panel or bridge driver, I2C overview, SPI overview.

2. Main characteristics of low resolution slow interface panels[edit source]

The main characteristics of low resolution slow interface panels are the followings:

  • the possible bus interfaces are I2C (serial), SPI (serial) and FMC (parallel).
  • the display resolution goes from few text lines to nearly 320x240 QVGA pixels. For instance: 128x64 pixels for many SSD1306 panels, 240x240 for GC9A01 round panels.
  • the interface speed goes from few kHz to nearly 10MHz. For instance: up to 400KHz in I2C, 10MHz in SPI and 3.3Mhz in parallel for SSD1306 panels.
  • the color format goes from monochrome to RGB24. For instance, SSD1306 panels are monochrome, GC9A01 panels are up to 262K colors but are often used in RGB16 as a compromise between simplicity and performance.
  • these panels are RAM-based: pixels are stored in an embedded memory inside the panel IC driver. The main reason is because the display update process from the host is slow and not continuous. Nevertheless, RAM-based panels sometimes offer useful features like:
    • partial updates: possibility to update only a rectangle part on the screen, that is more efficient than a full screen update.
    • partial refresh: possibility to update only few lines on the screen to save power as only the related RAM is powered.
    • low power mode for the system: the panel continues to display something while the host is in a low power state (sleep, off...).
    • low color mode: the panel uses less colors to save RAM and power.
    • horizontal & vertical scrollings: possibility to scroll the display content and to update only the new lines.
    • 90/180/270° rotation, horizontal & vertical mirrors: possibility to adjust the display panel content to the mechanical orientation or the user usage.

3. Hardware considerations[edit source]

4. Linux Kernel[edit source]

4.1. Architecture[edit source]

Alternate text

4.2. Software frameworks and drivers[edit source]

4.3. Tests and Debug[edit source]

4.4. Performance considerations[edit source]

5. Use case examples[edit source]

5.1. System monitoring[edit source]

5.2. Video playbacks[edit source]

5.3. Graphics with GPU[edit source]

6. Backlight[edit source]

7. U-boot[edit source]

8. Procedure 1[edit source]

Explain the outcome of this procedure. In the table below, list each high-level step which will be documented in detail below the table.

Step What to do Notes
1
2
3

8.1. Step-by-step instructions[edit source]

  1. Do step 1
  2. Do step 2
    1. Do substep 2.1
  3. Do step 3

9. Procedure 2[edit source]

Explain the outcome of this procedure. In the table below, list each high-level step which will be documented in detail below the table.

Step What to do Notes
1
2
3

9.1. Step-by-step instructions[edit source]

  1. Do step 1
  2. Do step 2
    1. Do substep 2.1
  3. Do step 3

10. Related pages[edit source]

  • Link to related page 1
  • Link to related page 2


11. References[edit source]