Contact Sales & After-Sales Service

Contact & Quotation

  • Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
  • Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

Notes:
For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.

SH1106 vs SSD1306: OLED Display Comparison

Ordering OLED displays online can be frustrating. You purchase what looks like an SSD1306 module, wire it up, flash your code, and get nothing but garbled pixels or a completely blank screen. After troubleshooting dozens of these situations for customers and my own projects, I’ve learned that the culprit is often a SH1106 controller hiding inside a display marketed as SSD1306-compatible.

The SH1106 vs SSD1306 confusion costs hobbyists and engineers hours of debugging time. These two OLED controller chips look identical from the outside but behave differently enough to break your code. This guide breaks down exactly what separates them, which one you should choose, and how to identify what’s actually inside your display module.

Understanding the SH1106 vs SSD1306 Controllers

Both the SH1106 and SSD1306 are monochrome OLED driver ICs designed to control small graphic displays. They share similar command sets, voltage requirements, and communication interfaces. From a pinout perspective, modules using either chip appear interchangeable.

The similarity ends at the silicon level. These chips organize their internal display memory differently, implement different feature sets, and require specific library configurations. Using the wrong library for your controller produces symptoms ranging from offset graphics to completely unreadable output.

Why This Confusion Exists

Chinese manufacturers often label displays with “SSD1306/SH1106 compatible” or simply omit the controller specification entirely. The 0.96-inch displays almost always contain SSD1306 chips, while 1.3-inch displays frequently use SH1106. But exceptions exist, making assumptions risky for production designs.

Key Technical Differences Between SH1106 and SSD1306

The internal architecture differences matter significantly when writing display drivers or selecting libraries for your Arduino project.

Display RAM Organization

This represents the most critical difference between SH1106 vs SSD1306:

SpecificationSSD1306SH1106
Internal RAM Width128 pixels132 pixels
Internal RAM Height64 pixels64 pixels
Total RAM1024 bytes1056 bytes
Column Offset02

The SH1106 contains 132 columns of RAM while driving only 128 visible columns. The display centers within this larger buffer, creating a 2-pixel offset on each side. This offset causes SSD1306 code to produce horizontally shifted or partially visible graphics on SH1106 displays.

Addressing Modes Comparison

The SSD1306 supports three distinct addressing modes for writing data to the display:

ModeSSD1306SH1106
HorizontalYesNo
VerticalYesNo
PageYes (Default)Yes (Only Option)

Most Arduino libraries default to horizontal addressing mode for the SSD1306 because it enables efficient full-screen updates. The SH1106 only supports page addressing mode, requiring different data transfer routines.

Hardware Features Comparison

FeatureSSD1306SH1106
Hardware ScrollingYes (Horizontal, Vertical, Diagonal)No
RAM Read via I2CNoYes
Maximum Columns128132
Charge PumpInternalInternal
Operating Voltage3.3V – 5V3.3V – 5V
I2C SpeedUp to 400kHzUp to 400kHz
Default I2C Address0x3C or 0x3D0x3C or 0x3D

The SSD1306’s hardware scrolling functions enable smooth text marquees and animated transitions without constant CPU intervention. SH1106 requires software-based scrolling, consuming more processing cycles.

Conversely, the SH1106 allows reading display RAM contents via I2C, useful for implementing XOR cursors or reading back pixel data. The SSD1306 cannot read its display memory through the I2C interface.

Physical Module Differences

Beyond the controller chip, recognizing physical characteristics helps identify which driver your module contains.

Display Size Correlation

Display SizeCommon ControllerExceptions
0.91 inchSSD1306Rare
0.96 inchSSD1306Occasional SH1106
1.3 inchSH1106Some SSD1306

The 0.96-inch form factor dominated the market first, establishing SSD1306 as the standard driver. When 1.3-inch displays emerged, many manufacturers adopted the SH1106 because it directly supports 132-column configurations useful for slightly larger panels.

Pin Configuration Warning

Module pinouts vary between manufacturers regardless of controller type. I’ve seen these configurations on identical-looking boards:

Configuration AConfiguration B
GNDVCC
VCCGND
SCLSCL
SDASDA

Always verify pin labels before connecting power. Reversing VCC and GND damages OLED modules instantly.

Library Support for SH1106 vs SSD1306

Proper library selection eliminates most display problems. Here’s what works for each controller:

SSD1306 Compatible Libraries

LibraryPlatformFeatures
Adafruit SSD1306ArduinoFull graphics, fonts, shapes
U8g2Arduino/ESPExtensive display support
SSD1306AsciiArduinoText only, minimal RAM
Luma.oledPython/RPiFull graphics support

SH1106 Compatible Libraries

LibraryPlatformFeatures
Adafruit SH110XArduinoFull graphics, Adafruit GFX compatible
U8g2Arduino/ESPSelect SH1106 constructor
SH1106 (wonho-maker)ArduinoModified Adafruit library
Luma.oledPython/RPiSH1106 device class

Code Modification for SH1106

If you’re stuck with SSD1306 code that must run on SH1106 hardware, the primary fix involves adding a column offset. Most SH1106-specific libraries handle this automatically, but for custom implementations:

// For SH1106, add 2-pixel column offset

// SSD1306 uses column 0, SH1106 uses column 2

#define COLUMN_OFFSET 2

void setColumn(uint8_t col) {

  col += COLUMN_OFFSET;  // Shift for SH1106

  sendCommand(0x00 | (col & 0x0F));        // Low nibble

  sendCommand(0x10 | ((col >> 4) & 0x0F)); // High nibble

}

How to Identify Your OLED Controller

When documentation fails, these methods determine which controller your module contains.

Visual Inspection Method

Examine the flex connector or PCB backside for markings. Some modules print the controller model directly on the board. Look for “SSD1306,” “SH1106,” or chip package markings near the display connector.

Software Detection Method

Upload test code using each library and observe results:

SSD1306 library on SH1106 hardware produces:

  • Graphics shifted left by 2 pixels
  • Right edge of display shows garbage data
  • Only 20% of screen displays correctly in some cases

SH1106 library on SSD1306 hardware produces:

  • Graphics shifted right by 2 pixels
  • Left edge content cut off
  • Possible blank columns on left side

I2C Scanner Verification

Both controllers typically respond at address 0x3C, so I2C scanning won’t distinguish between them. However, confirming I2C communication exists eliminates wiring issues from your troubleshooting.

Which Controller Should You Choose?

For new designs, consider these factors when selecting between SH1106 vs SSD1306:

Choose SSD1306 When:

  • Hardware scrolling reduces CPU load in your application
  • Maximum library compatibility matters
  • Using 0.96-inch or smaller displays
  • Extensive example code availability helps development

Choose SH1106 When:

  • 1.3-inch display size improves readability requirements
  • RAM read-back functionality enables cursor effects
  • Price difference favors SH1106 modules
  • Software scrolling is acceptable for your application

Production Considerations

For commercial products, specify the exact controller in your BOM and procurement documents. Relying on “compatible” modules risks field failures when suppliers substitute controllers without notice.

Resources and Downloads for SH1106 and SSD1306

Official Datasheets

DocumentControllerDownload Source
SSD1306 DatasheetSSD1306Solomon Systech website
SH1106 DatasheetSH1106Sino Wealth Electronic

Arduino Libraries

Library NameURL
Adafruit SSD1306github.com/adafruit/Adafruit_SSD1306
Adafruit SH110Xgithub.com/adafruit/Adafruit_SH110X
U8g2github.com/olikraus/u8g2
SSD1306Asciigithub.com/greiman/SSD1306Ascii

Useful Tools

ToolPurpose
image2cppConvert images to bitmap arrays
I2C Scanner SketchVerify display communication
OLED Font CreatorGenerate custom fonts

Frequently Asked Questions

Can I use SSD1306 code on an SH1106 display?

Not directly. The different RAM organization causes display offset and potential garbage pixels. You must either modify the code to add a 2-column offset and use page addressing mode, or switch to an SH1106-compatible library. Libraries like U8g2 support both controllers through different constructors, making transitions easier.

Why does my 1.3-inch OLED show garbage with SSD1306 library?

Most 1.3-inch OLED modules use the SH1106 controller despite sometimes being sold as “SSD1306 compatible.” The SH1106’s 132-column RAM versus the SSD1306’s 128-column RAM causes the Adafruit SSD1306 library to write data at incorrect memory locations. Install the Adafruit SH110X library instead and use the appropriate SH1106 constructor.

Are SH1106 and SSD1306 displays interchangeable?

Physically, modules with either controller can use the same connections and power supply. However, they require different software libraries or code modifications. If your application already uses one controller type, switching to the other requires updating your display initialization and potentially your data transfer routines.

Which controller has better library support?

The SSD1306 has broader library support due to its earlier market presence and Adafruit’s extensive documentation. However, major libraries like U8g2 and Adafruit’s own SH110X provide excellent SH1106 support. For Arduino projects, both controllers now have mature, well-documented libraries available through the Library Manager.

How do I know if my display is SH1106 or SSD1306 before buying?

Check the product listing for explicit controller specification. Display size provides a hint: 0.96-inch modules typically use SSD1306, while 1.3-inch modules often contain SH1106. When listings mention “SSD1306/SH1106” or lack controller information, assume you might receive either. For critical applications, purchase from suppliers who guarantee specific controllers.

Common Troubleshooting Tips for Both Controllers

When your OLED display doesn’t work as expected, work through these steps systematically:

Display Shows Nothing

Verify I2C address matches your code. Run an I2C scanner sketch to confirm communication. Check power connections carefully, remembering that some modules swap VCC and GND positions. Ensure your library initialization includes the correct display dimensions.

Partial or Shifted Display Output

This almost always indicates a controller mismatch. Try the other controller’s library. If graphics appear shifted left, you likely have SH1106 hardware with SSD1306 code. Shifted right suggests SSD1306 hardware with SH1106 code.

Random Pixels or Noise

Noise patterns often result from incorrect addressing modes. The SH1106 requires page mode addressing. Confirm your library settings match your hardware. Also check for loose connections or inadequate power supply filtering.

Conclusion

The SH1106 vs SSD1306 distinction matters far more than online sellers suggest. These controllers share enough similarities to cause confusion but differ enough to break compatibility. Understanding the RAM organization difference, addressing mode limitations, and hardware feature variations prepares you to handle whichever controller arrives in your shipment.

For reliable projects, always verify your controller type before writing code, use appropriate libraries from the start, and document which controller your design requires. This discipline saves debugging time and prevents production surprises when building anything beyond a quick prototype.

Whether you choose the SSD1306 for its hardware scrolling and ubiquitous support, or the SH1106 for its larger typical display size and RAM read capability, matching your software to your hardware ensures your OLED displays work correctly the first time.

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Sales & After-Sales Service

Contact & Quotation

  • Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.

  • Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.

Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

Notes:
For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.