마이크로컨트롤러가 주변 센서, 메모리 칩, 디스플레이 IC와 데이터를 교환하는 표준 디지털 통신 3대 인터페이스를 비교합니다.
1. 디지털 통신 용어 사전 (Glossary)
- I2C (Inter-Integrated Circuit): 2개의 선(SDA, SCL)과 7-bit 주소를 사용하여 최대 127개 주변장치를 병렬 연결하는 필립스 개발 통신 규격입니다.
- SPI (Serial Peripheral Interface): 4개의 선(MOSI, MISO, SCK, CS)을 사용하며 동기식으로 데이터를 매우 빠르게 송수신하는 전이중(Full-Duplex) 통신입니다.
- 1-Wire: 단 1개의 데이터 선(과 GND)을 공유하며 다수의 1-Wire 장치(DS18B20 등)를 연결하는 댈러스 세미컨덕터 통신 규격입니다.
- Master / Slave: 통신 클록(Clock)을 주도적으로 생성하여 전송을 지시하는 장치(Master)와 이에 응답하는 장치(Slave) 구도입니다.
2. 통신 규격 3종 특성 비교표
| 비교 항목 | I2C 통신 | SPI 통신 | 1-Wire 통신 |
|---|---|---|---|
| 필요 신호선 수 | 2개 (SDA, SCL) | 4개 (MOSI, MISO, SCK, CS) | 1개 (Data) |
| 전송 방식 | 반이중 (Half-Duplex) | 전이중 (Full-Duplex) | 반이중 (Half-Duplex) |
| 최대 전송 속도 | 100kbps ~ 3.4Mbps | 10Mbps ~ 100Mbps (최고속) | ~16.3kbps (느림) |
| 슬레이브 선택 방식 | 7-bit / 10-bit 소프트웨어 주소 | 하드웨어 CS(SS) 핀 개별 제어 | 64-bit 고유 ROM 주소 |
| 주요 사용 부품 | Character LCD, RTC, 온습도 센서 | SD 카드 모듈, TFT 컬러 LCD, RFID | DS18B20 방수 온도 센서 |
3. I2C Scanner 진단 코드
내 연결된 I2C 장치의 주소를 모를 때 탐색하는 필수 스크립트입니다.
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("
I2C 버스 스캔 시작...");
int count = 0;
for (byte address = 1; address < 127; address++) {
Wire.beginTransmission(address);
if (Wire.endTransmission() == 0) {
Serial.print("I2C 장치 발견! 주소: 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
count++;
}
}
Serial.print("스캔 완료. 발견된 장치 수: "); Serial.println(count);
}
void loop() {}
4. 자주 묻는 질문 (Q&A)
Q. I2C 버스 신호선에 풀업 저항($4.7\text{K}\Omega$)을 다는 이유는 무엇인가요? A. I2C 출력 회로는 오픈 드레인(Open-Drain) 구조로 되어 있어 신호를 0V(LOW)로 당길 수만 있고 5V(HIGH)로 밀어 올리지 못합니다. 따라서 풀업 저항이 5V 상태를 유지해 주어야 통신이 이루어집니다.