
OLED 디스플레이에서 I2C와 SPI 선택 가이드
이번 시간에는 OLED 디스플레이의 두가지 방식, I2C와 SPI를 비교해 보도록 하겠습니다.
1. 물리적 배선과 핀 수 (Physical Wiring and Pin Count)
I2C와 SPI의 가장 눈에 띄는 차이는 필요한 핀 수와 배선 구조입니다.
I2C (Inter-Integrated Circuit)
I2C 방식은 물리적으로 매우 단순한 연결 구조를 가지고 있습니다. 일반적으로 OLED 모듈은 다음과 같은 4개의 핀만 필요합니다.
VCC : 전원
GND : 접지
SCL : Clock 신호 라인
SDA : Data 신호 라인
특히 SCL과 SDA는 버스 구조로 여러 장치가 공유할 수 있는 신호선이기 때문에 배선이 매우 단순합니다.
이러한 이유로 초보자용 프로젝트나 핀이 부족한 마이크로컨트롤러에서 I2C OLED가 자주 사용됩니다.
SPI (Serial Peripheral Interface)
SPI 방식은 I2C보다 훨씬 많은 핀을 필요로 합니다.
기본적으로 SPI는 다음과 같은 하드웨어 SPI 핀을 사용합니다.
Clock (SCLK)
MOSI (Master Out Slave In)
MISO (Master In Slave Out)
OLED에서는 MISO가 사용되지 않는 경우가 많습니다.
여기에 OLED 모듈을 제어하기 위해 다음 핀들이 추가됩니다.
RES (Reset)
DC (Data / Command)
CS (Chip Select)
즉 SPI OLED는 I2C보다 더 많은 GPIO 핀을 사용해야 합니다.
2. 통신 프로토콜과 장치 선택 방식 (Communication Protocol and Addressing)
I2C와 SPI는 마이크로컨트롤러가 여러 장치 중 특정 장치를 선택하는 방식에서도 차이가 있습니다.
I2C Addressing 방식
I2C 버스에 연결된 모든 장치는 고유한 7비트 하드웨어 주소를 가지고 있습니다.
예를 들어 OLED 디스플레이는 보통 다음과 같은 주소를 사용합니다.
0x3C
마이크로컨트롤러는 통신을 시작할 때 다음과 같은 절차를 수행합니다.
- Start Condition 전송
- 장치 주소 전송
- 해당 주소와 일치하는 장치만 응답
주소가 일치하지 않는 장치는 High-Impedance 상태로 유지되어 버스 간섭을 방지합니다.
즉 주소 기반 장치 선택 방식입니다.
SPI Chip Select 방식
SPI는 주소 개념이 없습니다.
대신 각 장치마다 Chip Select(CS) 핀을 하나씩 사용합니다.
마이크로컨트롤러가 특정 OLED와 통신하려면 해당 OLED의 CS 핀을 LOW로 설정합니다.
CS = LOW
이렇게 하면 해당 장치가 활성화됩니다.
반대로 다른 장치의 CS가 HIGH 상태라면 해당 장치는 버스에서 들어오는 데이터를 무시합니다.
즉 SPI는 주소 대신 CS 핀을 이용한 장치 선택 방식입니다.
3. 속도와 성능 (Speed and Performance)
OLED 디스플레이에서 I2C와 SPI의 가장 큰 차이는 속도입니다. 일반적으로 SPI가 훨씬 빠릅니다.
클럭 속도 비교
I2C의 일반적인 속도는 다음과 같습니다.
100 kHz (Standard Mode)
400 kHz (Fast Mode)
반면 SPI OLED의 경우 다음과 같은 속도로 동작합니다.
4 MHz ~ 10 MHz
즉 SPI는 I2C보다 약 10배에서 20배 정도 빠른 통신 속도를 제공합니다.
프로토콜 오버헤드
I2C는 데이터 전송 시 다음과 같은 추가 신호가 필요합니다.
Start Condition
Stop Condition
Device Address
Acknowledge Bit
또한 모든 데이터가 단일 데이터 라인(SDA)을 통해 전송됩니다.
반면 SPI는 거의 오버헤드가 없습니다.
라이브러리 버퍼에 있는 픽셀 데이터를 그대로 디스플레이로 스트리밍할 수 있습니다.
실제 성능 차이
예를 들어 128×64 OLED 화면에 애니메이션을 표시하는 경우 다음과 같은 차이가 나타납니다.
I2C OLED의 경우 약 12 FPS 정도의 프레임 속도를 얻을 수 있습니다.
SPI OLED의 경우 동일한 조건에서 약 17 FPS 이상을 얻을 수 있습니다.
즉 그래픽 업데이트가 많은 프로젝트에서는 SPI가 훨씬 유리합니다.
4. 코드 작성과 라이브러리 (Coding and Libraries)
OLED를 사용하려면 프로토콜에 맞는 라이브러리 설정이 필요합니다.
I2C OLED
I2C OLED는 Wire 라이브러리를 사용합니다.
코드에서는 디스플레이의 I2C 주소를 정의해야 합니다.
예를 들어 다음과 같은 주소가 사용됩니다.
0x3C
SPI OLED
SPI OLED는 SPI 라이브러리를 사용합니다.
초기화 코드에서는 다음 GPIO 핀들을 지정해야 합니다.
Reset
DC
Chip Select
또한 SPI는 Software SPI와 Hardware SPI 두 가지 방식이 있습니다.
일반적으로 Hardware SPI 사용이 권장됩니다.
그 이유는 더 빠른 속도 때문입니다.
왜냐하면 마이크로컨트롤러의 하드웨어 SPI 모듈을 활용할 수 있기 때문입니다.
5. 여러 개의 디스플레이 사용 (Using Multiple Displays)
프로젝트에 따라 여러 개의 OLED 디스플레이를 연결해야 하는 경우도 있습니다. 하지만 이 경우에도 각각의 인터페이스에는 제한이 있습니다.
I2C의 제한
여러 개의 I2C OLED를 사용하는 것은 생각보다 쉽지 않습니다.
그 이유는 대부분의 OLED 모듈이 같은 주소를 사용하기 때문입니다.
예를 들어 대부분의 OLED는 다음 주소를 사용합니다.
0x3C
일부 모듈은 PCB 뒷면의 저항 위치를 변경하여 주소를 바꿀 수 있습니다.
예를 들어 다음과 같이 변경이 가능합니다.
0x3C → 0x3D
하지만 이러한 옵션이 없는 경우 여러 개의 OLED를 동시에 연결하기 어렵습니다.
SPI의 제한
이론적으로 SPI는 여러 개의 디스플레이를 쉽게 지원할 수 있습니다.
각 디스플레이마다 CS 핀만 다르게 설정하면 됩니다.
하지만 실제로는 문제가 발생할 수 있습니다.
저가 OLED 모듈의 경우 CS가 비활성 상태일 때 데이터 라인을 제대로 해제하지 않는 문제가 있습니다.
이 때문에 여러 디스플레이가 동일한 버스에서 정상적으로 동작하지 않는 경우도 있습니다.
결론
프로젝트에서 OLED 인터페이스를 선택할 때는 목적에 맞는 선택이 중요합니다.
텍스트 표시나 간단한 그래픽처럼 단순한 프로젝트에서는 I2C 방식이 더 적합합니다. 배선이 단순하고 사용하기 쉽기 때문입니다.
반면 빠른 애니메이션, 전체 화면 갱신, 복잡한 그래픽 UI처럼 디스플레이 성능이 중요한 프로젝트에서는 SPI 방식이 훨씬 유리합니다.
정리하면 다음과 같습니다.
단순한 프로젝트 → I2C
그래픽 성능이 중요한 프로젝트 → SPI
OLED 프로젝트를 설계할 때 이 두 인터페이스의 특성을 이해하면 훨씬 효율적인 시스템 설계를 할 수 있습니다.
'DIY Electronics' 카테고리의 다른 글
| 배터리 구동 자작 ESP32 회로 (0) | 2026.03.25 |
|---|---|
| ESP32의 새 칩(E22, H21) 발표 (0) | 2026.03.24 |
| 개발보드 전원관리: Buckboost Converter, TPS63020 (0) | 2026.03.06 |
| 개발보드 전원관리: MCP73871 가이드 (0) | 2026.03.05 |
| 개발보드 전원관리: Buck-Boost Converter, S9V11MACMA (0) | 2026.03.04 |