LCDGFX LCD display driver  1.2.0
Lightweight graphics library for SSD1306, SSD1325, SSD1327, SSD1331, SSD1351, SH1106, SH1107, IL9163, ST7735, ST7789, ILI9341, PCD8544 displays over I2C/SPI
Controller Capability Matrix

This page documents the per-controller capabilities of every display driver shipped with lcdgfx. It is generated from the code-generator templates in tools/templates/lcd/<controller>/<controller>.json (functions.interface_list field) and verified against the auto-generated drivers in src/v2/lcd/<controller>/.

Legend

  • BPP: native bits-per-pixel of the controller's frame data.
  • Resolutions: panel resolutions for which an init sequence is shipped.
  • Bus: data bus types supported by the HAL (SPI, I2C, custom).
  • Rotation: software (sw) or hardware (hw) rotation. sw means the library rotates pixel coordinates before sending; hw means the controller has a memory-access-control register that handles the transform itself.
  • Invert: normalMode() / invertMode() colour-inversion API available.
  • Contrast: setContrast() API available.
  • HW scroll: hardware vertical-scroll register exposed (setStartLine).
  • Flip H/V: flipHorizontal() / flipVertical() API available.
  • FB needed: a software framebuffer (NanoCanvas) is required to use this controller efficiently in some modes (e.g. SH1107 landscape).
  • Status: stable (well-tested, no known correctness bugs); limited (works but has documented constraints); buggy (has open known issues — see notes).

Monochrome OLED / LCD (1 bpp)

Controller BPP Resolutions Bus Rotation Invert Contrast HW scroll Flip H/V FB needed Status Notes
SSD1306 1 64x32, 64x48, 128x32, 128x64 SPI, I2C, custom sw no stable The reference driver for this library.
SH1106 1 128x64 SPI, I2C sw no stable SSD1306-compatible command set with column offset.
SH1107 1 128x64, 64x128 SPI, I2C sw yes (landscape) limited 64x128 landscape rotation requires a software framebuffer (memory layout is page-based on the long axis).
PCD8544 1 84x48 SPI sw no stable Nokia 5110. No invert / contrast API.

Greyscale OLED (4 bpp)

Controller BPP Resolutions Bus Rotation Invert Contrast HW scroll Flip H/V FB needed Status Notes
SSD1325 4 128x64 SPI, I2C sw no buggy fillRect has a known nibble-packing issue at odd column boundaries with setColor(0x0F) — see unittest/canvas_tests.cpp.
SSD1327 4 128x128 SPI, I2C sw no limited printFixedN with BOLD / SIZE_2X is not supported (architectural — the renderer assumes 1-bpp glyphs at this scale).

Colour OLED (8 / 16 bpp)

Controller BPP Resolutions Bus Rotation Invert Contrast HW scroll Flip H/V FB needed Status Notes
SSD1331 8, 16 96x64 SPI hw (setRotation) no stable Hardware-accelerated drawLine and copyBlock.
SSD1351 16 96x96, 128x128 SPI hw (setRotation) no stable setOffset() and setRgbMode() available.

Colour TFT (16 bpp, RGB565)

Controller BPP Resolutions Bus Rotation Invert Contrast HW scroll Flip H/V FB needed Status Notes
IL9163 16 128x128, 128x160 SPI hw (setRotation) no stable Backlight control is the user's responsibility.
ST7735 16 80x160, 128x128, 128x160 SPI hw (setRotation) no stable setOffset() and setRgbMode() available.
ST7789 16 135x240, 170x320, 240x240 SPI hw (setRotation) no stable Many panels need INVON for correct colour — the init sequence sets it by default; toggle with normalMode() / invertMode().
ILI9341 16 128x160, 240x320 SPI hw (setRotation + rotateOutput) no stable SDL emulator rotation fixed in v1.2.0.
ILI9488 16 320x480 SPI hw no limited Shipped via custom interface — see examples/.

Caveats and conventions

  • All controllers expose a 1-bit "pixel" API (putPixel, drawLine, etc.) as well as the native-depth API. On greyscale / colour controllers the monochrome API maps "black" to 0 and "white" to the maximum native value.
  • Rotation: sw rotation costs CPU on every draw call; hw rotation costs one register write at setup. Mixed-mode rotation is not supported.
  • "Bus" lists what the HAL templates emit. Adding a new bus to a stable controller is usually a matter of editing the JSON template — see tools/templates/lcd/<controller>/<controller>.json.
  • Files in src/v2/lcd/<controller>/ are auto-generated. Edit the templates in tools/templates/lcd/<controller>/ and re-run cd tools && python3 lcd_code_generator.py -c <controller> to regenerate.

How to read this matrix when picking a controller

  • Need rotation in firmware? Pick a colour TFT or SSD1331 / SSD1351 — they have hardware rotation. Mono OLED rotation is software-only and slower.
  • Need contrast control? All OLEDs support it. TFTs do not (use the backlight PWM instead).
  • Need hardware vertical scroll? Only mono OLEDs (SSD1306, SH1106, SH1107) expose setStartLine.
  • Tightest flash / RAM budget (e.g. ATtiny)? Stick with SSD1306 / SH1106. 4-bpp and 16-bpp drivers carry larger init sequences and pixel paths.