velxio/test/test_epaper/autosearch/02_controllers.md

4.1 KiB
Raw Blame History

02 — ePaper controller IC families

Every panel ships with one of a small set of controllers. The panel's size/resolution/colour-mode is glued to a specific controller — the firmware library (GxEPD2, Adafruit_EPD, ESPHome waveshare_epaper) picks the controller-specific driver based on the panel name, but the SPI command set is what we actually emulate.

The Solomon Systech SSD168x family (B/W mono, B/W/R)

This is by far the most common family for small panels (1.54"4.2"). They all share ~95% of the command set; differences are mainly RAM size and which driver-output config bytes are accepted.

Controller Typical panel RAM (px) Colours Notes
SSD1675A (= IL3897) 2.13" 250×122 250×122 B/W or B/W/R Two RAM planes for tri-colour
SSD1680 2.13" / 2.9" tri-colour 296×128 max B/W or B/W/R Newer revision of SSD1675
SSD1681 1.54" 200×200 200×200 B/W Smallest, fastest init
SSD1683 4.2" 400×300 400×300 B/W 4.2" upgrade path
SSD1677 7.5" 880×528 880×528 B/W/R Higher-res Solomon part

The UltraChip family (mid + large mono, multi-colour)

Used by GoodDisplay / Waveshare 4.2" 7.5" panels.

Controller Typical panel RAM (px) Colours Notes
UC8175 1.02" 80×128 80×128 B/W Small, hobbyist
UC8176 4.2" 400×300 400×300 B/W Predates SSD1683
UC8179 (= GD7965) 7.5" 800×480 800×480 B/W or B/W/R "DESPI-C02" PCB
UC8159c (= IL0371) 5.65" 600×448 600×448 7-colour ACeP 4 px / byte (3-bit indices)

Spectra 6 (E Ink, used in Seeed 13.3" 1200×1600)

The E Ink Spectra 6 13.3" panel uses E Ink's own controller (datasheet under NDA — community-reverse-engineered command set is in the GxEPD2 epd13in3E driver). Six colours: black, white, yellow, red, green, blue. Encoded as 3 bits/pixel packed 2 px/byte.

Key commands (subset, from GxEPD2 epd13in3E.cpp):

Hex Mnemonic Notes
0x00 PSR (panel setting) Resolution + colour-mode
0x04 POWER ON Followed by BUSY high until panel boot
0x10 DTM1 Image data plane
0x12 DRF Display refresh — triggers ~12 s update
0x07 DEEP SLEEP data byte 0xA5

IT8951 (Carta 6"13.3" greyscale)

Used by Seeed EE03 + Waveshare 6"/7.8"/9.7"/10.3" Carta panels. Not SPI-raw; it's a packet-based command stream over SPI with a "SYS_RUN" boot handshake. Out of scope for Phase 1.

Common command sequence (SSD1681 example)

The host's typical flow after power-on:

HW reset (RST low > 200 µs, high)
poll BUSY low
0x12 SWRST                   ── soft reset
poll BUSY low
0x01 OUTPUT_CTRL              data: 0xC7 0x00 0x00     (display height-1)
0x11 DATA_ENTRY_MODE          data: 0x03               (X+ Y+, addr X then Y)
0x44 SET_RAMX_RANGE           data: 0x00 0x18          (start col, end col)
0x45 SET_RAMY_RANGE           data: 0x00 0x00 0xC7 0x00
0x3C BORDER_WAVEFORM          data: 0x05
0x21 DISPLAY_UPDATE_CTRL_1    data: 0x00 0x80          (BW + bypass red)
0x18 TEMPSENSOR_SELECT        data: 0x80
0x4E SET_RAMX_COUNTER         data: 0x00
0x4F SET_RAMY_COUNTER         data: 0x00 0x00
poll BUSY low

── frame loop ──
0x24 WRITE_BLACK_VRAM         data: <W*H/8 bytes of pixel data>
0x22 SET_DISP_UPDATE_CTRL_2   data: 0xF7               (full update)
0x20 ACTIVE_DISP_UPDATE_SEQ   (no data)
poll BUSY high → low (~1s)

0x10 SLEEP_CTRL               data: 0x01               (deep sleep)

Sources