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.