I2C와 SPI 선택 가이드: 핵심 차이점 완벽 정리
프로젝트를 설계 중인데 I2C와 SPI 중 어떤 통신 프로토콜을 선택해야 할지 고민되시나요? 두 프로토콜의 차이점을 명확히 이해하고 프로젝트에 최적의 선택을 할 수 있도록 도와드리겠습니다.
I2C와 SPI란 무엇인가?
I2C(Inter-Integrated Circuit)와 SPI(Serial Peripheral Interface)는 모두 PCB 상의 칩 간 통신에 널리 사용되는 '로우엔드(low-end)' 프로토콜입니다. 구현이 쉽고 마이크로컨트롤러와 센서, 메모리, 디스플레이 등 다양한 주변장치와의 통신에 적합합니다. 하지만 프로젝트 특성에 맞지 않는 프로토콜을 선택하면 성능 저하, 배선 복잡도 증가, 전력 소모 과다 등의 문제가 발생할 수 있습니다.
SPI 프로토콜이란?
SPI는 1980년대 모토로라(Motorola)가 마이크로컨트롤러와 EEPROM 등 주변장치 간 통신을 위해 개발한 동기식 직렬 통신 프로토콜입니다. 마스터-슬레이브 구조로 동작하며, 4개의 신호 라인을 사용합니다(전원/그라운드 제외).
SPI의 4가지 신호 라인
- SS (Slave Select): 마스터가 특정 슬레이브를 선택하는 라인 (Active Low)
- MOSI (Master Out Slave In): 마스터에서 슬레이브로 데이터 전송
- MISO (Master In Slave Out): 슬레이브에서 마스터로 데이터 전송
- SCLK (Serial Clock): 마스터가 생성하는 클럭 신호
마스터는 하나의 SPI 버스에서 여러 슬레이브를 제어할 수 있으며, 각 슬레이브마다 별도의 SS 라인이 필요합니다. 통신 시 마스터는 해당 슬레이브의 SS 라인을 Low로 내리고 SCLK을 발생시켜 동기화된 데이터 교환을 수행합니다. SPI는 풀듀플렉스(Full-duplex) 통신이 가능하며, 모드 0~3까지 4가지 클럭 폴리티/페이즈 조합을 지원합니다.
I2C 프로토콜이란?
I2C는 1982년 필립스(현 NXP)에서 PCB 상의 칩 간 통신 표준화를 위해 개발한 동기식 직렬 통신 프로토콜입니다. 단 2개의 신호 라인만으로 통신이 가능합니다.
I2C의 2가지 신호 라인
- SDA (Serial Data): 양방향 데이터 라인
- SCL (Serial Clock): 클럭 라인 (마스터가 생성)
두 라인은 모두 오픈드레인(Open-drain) 구조로, 풀업 저항이 필수입니다. 이 구조 덕분에 멀티 마스터 구성이 가능하며, 버스 중재(Arbitration) 기능을 통해 충돌을 방지합니다. 통신 시작 시 마스터는 START 조건(SDA가 High→Low, SCL High 유지)을 보낸 후 7비트 슬레이브 주소와 R/W 비트를 전송합니다.
I2C와 SPI 핵심 차이점 비교
| 특징 | SPI | I2C |
| 신호 라인 수 | 4개 (슬레이브 추가 시 SS 라인 증가) | 2개 (고정) |
| 통신 방식 | 풀듀플렉스 (동시 송수신) | 하프듀플렉스 (교대 송수신) |
| 최대 속도 | 10~100 Mbps 이상 (이론상 무제한) | 100 kbps (표준), 400 kbps (고속), 3.4 Mbps (고속 모드) |
| 핀 드라이브 방식 | 푸시풀 (Push-pull) | 오픈드레인 (Open-drain) |
| 멀티 마스터 지원 | 미지원 | 지원 (버스 중재 기능 내장) |
| 최대 연결 장치 수 | 마스터의 SS 핀 개수에 의존 | 7비트 주소 기준 최대 112개 (10비트 확장 시 더 많음) |
| 플로우 제어 | 없음 | ACK 비트로 수신 확인 |
| 전력 소모 | 낮음 (푸시풀 드라이브) | 상대적으로 높음 (풀업 저항을 통한 전류 흐름) |
| 전송 거리 | 짧음 (보드 내 통신에 적합) | 상대적으로 김 (보드 간 통신 가능) |
| 노이즈 내성 | 상대적으로 낮음 | 높음 (차동 신호 유사 효과) |
SPI의 장단점
장점
- 초고속 통신 가능 (10~100 Mbps 이상)
- 풀듀플렉스로 효율적인 데이터 전송
- 프로토콜 오버헤드가 적어 지연 시간 최소화
- 저전력 소모
- 단순한 하드웨어 구현
단점
- 슬레이브 추가 시 SS 라인 별도 필요 → 핀 부족 문제 발생 가능
- 공식 표준이 없어 벤더별 구현 차이 존재 (호환성 이슈)
- 장거리 통신 부적합 (보드 외부 통신 시 신호 무결성 저하)
- 멀티 마스터 미지원
I2C의 장단점
장점
- 단 2선으로 다수 장치 제어 가능 → 핀 절약에 유리
- 멀티 마스터 지원 및 버스 중재 기능 내장
- ACK 메커니즘으로 데이터 무결성 보장
- 보드 간 통신 가능 (적절한 버퍼 사용 시)
- 표준화된 프로토콜로 호환성 우수
- 비용 효율적 (배선 단순화)
단점
- 속도 제한적 (최대 3.4 Mbps)
- 풀업 저항으로 인한 지속적인 전류 소모
- 버스 홀드(Hold) 문제: 한 장치가 SDA를 Low로 잡고 있으면 버스 전체 마비
- 주소 충돌 가능성 (7비트 주소 공간 한정)
- 클럭 스트레칭(Clock stretching) 지원 필요 시 펌웨어 복잡도 증가
프로젝트 특성에 따른 선택 가이드
1. 핀 수가 제한적인 경우 → I2C 추천
마이크로컨트롤러의 GPIO 핀이 부족하다면 2선만 사용하는 I2C가 압도적으로 유리합니다. SPI는 슬레이브마다 SS 핀이 추가로 필요합니다.
2. 고속 데이터 전송이 필요한 경우 → SPI 추천
디스플레이(LCD/OLED), 고속 ADC/DAC, 대용량 플래시 메모리 등 대역폭이 중요한 애플리케이션에는 SPI가 적합합니다.
3. 저전력 설계가 중요한 경우 → SPI 추천
배터리 구동 기기에서는 풀업 저항 전류가 없는 SPI가 전력 효율 면에서 유리합니다. 단, 슬립 모드 전환 등 시스템 전체 설계를 고려해야 합니다.
4. 멀티 마스터 시스템이 필요한 경우 → I2C 필수
여러 마스터가 버스를 공유해야 하는 시스템(예: 여러 MCU가 센서 버스 공유)에서는 I2C만 가능합니다.
5. PCB 크기/배선 공간이 제한적인 경우 → I2C 추천
배선 라우팅 공간이 협소하면 2선식 I2C가 레이아웃에 훨씬 유리합니다.
6. 장거리/보드 간 통신이 필요한 경우 → I2C 추천 (단, 버퍼/리피터 필요)
SPI는 신호 무결성 문제로 보드 간 통신에 부적합합니다. I2C도 장거리용으로 설계된 버퍼 IC(예: PCA9615)와 함께 사용해야 합니다.
UART와의 비교
UART(Universal Asynchronous Receiver/Transmitter)는 비동기식 직렬 통신으로, 클럭 라인 없이 Tx/Rx 2선만으로 통신합니다. 마스터/슬레이브 개념이 없으며 점대점(Point-to-point) 연결에 적합합니다. GPS 모듈, 블루투스 모듈, 디버그 콘솔 등에서 주로 사용됩니다. SPI/I2C와 달리 보레이트(Baud rate) 양측 일치가 필수이며, 패리티 비트 등으로 기본적인 오류 검출을 지원합니다.
요약: 언제 무엇을 선택할까?
- SPI 선택: 고속 통신 필요, 핀 여유 있음, 단일 마스터, 보드 내 통신, 저전력 우선
- I2C 선택: 핀 절약 필요, 멀티 마스터 필요, 다수 장치 연결, 표준화된 프로토콜 선호, 보드 간 통신 가능성 있음
- 둘 다 사용: 많은 최신 센서/MCU는 두 인터페이스를 모두 제공합니다. 용도에 맞춰 혼용 가능합니다.
궁금한 점이 있으시면 언제든 문의해 주세요. 최적의 선택을 도와드리겠습니다.