Skip to content

SSD1306 OLED Display

Monochrome OLED display controller

Artwork for SSD1306 OLED display module

Note

The I2C address is 0x3C

The SSD1306 is a popular monochrome OLED display controller commonly used with small displays such as 128×64 pixels.
It is widely adopted in embedded systems due to its sharp contrast, low power consumption, and flexible communication interfaces.

The SSD1306 datasheet provides detailed information about:

  • Electrical characteristics
  • Command set
  • Display memory mapping
  • Initialization sequences
  • Timing diagrams

Most OLED modules built around the SSD1306 strictly follow this specification, regardless of vendor.

On a typical SSD1306, an initialization sequence is required because the internal registers may contain undefined values after power-up.

In the simulated version, the device starts from the reset-circuit default state as defined in the datasheet. This means it begins in Horizontal Addressing Mode, with the contrast set to 0x7F. All address pointers are reset to 0, and the display is not in sleep mode.

The SSD1306 supports i2c, configured via hardware pins:

  • Uses SDA and SCL
  • Device address is 0x3C
  • Simplest wiring, slower than SPI

The SSD1306 uses GDDRAM (Graphic Display Data RAM):

  • Memory is organized into pages
  • Each page is 8 pixels tall
  • One byte controls a vertical column of 8 pixels
  • 8 pages × 128 columns
  • Total memory: 1024 bytes

The SSD1306 is supported with a focus on accurate rendering and protocol behavior.

Most SSD1306 Commands are supported including scrolling and different addressing modes and sleep mode except of the following commands.

Command FunctionDescription
set_segment_remapConfigures the segment remap (addressing direction for columns)
set_multiplex_rationSets the multiplex ratio used by the display
set_com_output_scan_dirControls the COM output scan direction
set_display_offsetSets the vertical display offset
set_com_pins_configConfigures COM pins hardware configuration
set_display_clock_ratioSets the display clock divide ratio and oscillator frequency
set_precharge_periodConfigures the pre-charge period for the display
set_charge_pumpEnables or disables the internal charge pump
set_vcom_levelSets the VCOMH deselect level
  • Animations might be slow, especially if there is a high frame rate. As a standard, maximum frame rate before having any issues should be 45 FPS.

Here is an example for SSD1306, where MCU scans for valid addresses, prints them via RTT host and finally send an owl image to SSD1306

We are actively expanding display and peripheral support.
Have feedback or want a feature prioritized? Join the discussion on discord and help guide future updates.