You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.