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.
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.
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:
Specification
SSD1306
SH1106
Internal RAM Width
128 pixels
132 pixels
Internal RAM Height
64 pixels
64 pixels
Total RAM
1024 bytes
1056 bytes
Column Offset
0
2
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:
Mode
SSD1306
SH1106
Horizontal
Yes
No
Vertical
Yes
No
Page
Yes (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
Feature
SSD1306
SH1106
Hardware Scrolling
Yes (Horizontal, Vertical, Diagonal)
No
RAM Read via I2C
No
Yes
Maximum Columns
128
132
Charge Pump
Internal
Internal
Operating Voltage
3.3V – 5V
3.3V – 5V
I2C Speed
Up to 400kHz
Up to 400kHz
Default I2C Address
0x3C or 0x3D
0x3C 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 Size
Common Controller
Exceptions
0.91 inch
SSD1306
Rare
0.96 inch
SSD1306
Occasional SH1106
1.3 inch
SH1106
Some 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 A
Configuration B
GND
VCC
VCC
GND
SCL
SCL
SDA
SDA
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
Library
Platform
Features
Adafruit SSD1306
Arduino
Full graphics, fonts, shapes
U8g2
Arduino/ESP
Extensive display support
SSD1306Ascii
Arduino
Text only, minimal RAM
Luma.oled
Python/RPi
Full graphics support
SH1106 Compatible Libraries
Library
Platform
Features
Adafruit SH110X
Arduino
Full graphics, Adafruit GFX compatible
U8g2
Arduino/ESP
Select SH1106 constructor
SH1106 (wonho-maker)
Arduino
Modified Adafruit library
Luma.oled
Python/RPi
SH1106 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
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
Document
Controller
Download Source
SSD1306 Datasheet
SSD1306
Solomon Systech website
SH1106 Datasheet
SH1106
Sino Wealth Electronic
Arduino Libraries
Library Name
URL
Adafruit SSD1306
github.com/adafruit/Adafruit_SSD1306
Adafruit SH110X
github.com/adafruit/Adafruit_SH110X
U8g2
github.com/olikraus/u8g2
SSD1306Ascii
github.com/greiman/SSD1306Ascii
Useful Tools
Tool
Purpose
image2cpp
Convert images to bitmap arrays
I2C Scanner Sketch
Verify display communication
OLED Font Creator
Generate 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.
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.
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.