I2C와 UART 통신 프로토콜 가이드 (Part 2) - I2C 통신 방식과 비교 분석

2025. 7. 1. 15:23·하드웨어
반응형

 

시리즈 가이드: Part 1: 기본 개념과 UART 통신 방식 | Part 2: I2C 통신 방식과 비교 분석 (현재 글)

목차

  • 1. I2C 개요
  • 2. I2C 통신 프로토콜
    • 2.1. I2C 작동 원리
    • 2.2. I2C 통신 프로토콜
    • 2.3. I2C의 특징과 장단점
  • 3. I2C 구현 예제
  • 4. UART와 I2C 비교 분석
  • 5. 결론

1. I2C 개요

I2C(Inter-Integrated Circuit)는 필립스(현 NXP 반도체)에서 1982년에 개발한 동기식 직렬 통신 프로토콜로, 짧은 거리에서 저속 통신을 위한 목적으로 설계되었습니다. 특히 단일 마이크로컨트롤러와 여러 주변 장치 간의 통신에 널리 사용됩니다. I2C는 '아이-투-씨', '아이-스퀘어드-씨' 등으로 발음합니다.

I2C의 주요 특징:

  • 두 개의 선(SDA, SCL)만으로 다중 장치 연결 가능
  • 마스터-슬레이브 구조로 통신
  • 각 장치는 고유 주소를 가짐
  • 표준 모드에서 최대 100kHz, 고속 모드에서 최대 400kHz 속도 지원
  • 현대 버전에서는 최대 5MHz 속도 지원

2. I2C 통신 프로토콜

2.1. I2C 작동 원리

I2C는 두 개의 신호선을 사용합니다:

  • SDA(Serial Data): 데이터 전송을 위한 선
  • SCL(Serial Clock): 클럭 신호를 제공하는 선

두 선 모두 기본적으로 풀업 저항을 통해 HIGH 상태로 유지되며, 통신할 때 장치에 의해 LOW 상태로 당겨집니다(오픈 드레인/오픈 콜렉터 방식). 이 방식은 여러 장치가 동일한 버스에 연결되어도 신호 충돌을 방지합니다.

2.2. I2C 통신 프로토콜

I2C 통신은 다음과 같은 주요 단계로 이루어집니다:

1) 시작 조건(Start Condition)

SCL이 HIGH 상태일 때 SDA가 HIGH에서 LOW로 전환되는 것으로, 통신의 시작을 알립니다.

2) 주소 전송(Address Transmission)

마스터가 통신하려는 슬레이브의 7비트 또는 10비트 주소를 전송합니다. 주소 뒤에는 1비트 읽기/쓰기 비트가 따라옵니다(0=쓰기, 1=읽기).

3) 데이터 전송(Data Transmission)

8비트 데이터를 한 번에 전송하며, 각 바이트 전송 후 수신 장치가 ACK(Acknowledgment) 비트를 보내 성공적인 수신을 알립니다.

4) 정지 조건(Stop Condition)

SCL이 HIGH 상태일 때 SDA가 LOW에서 HIGH로 전환되는 것으로, 통신의 종료를 알립니다.

2.3. I2C의 특징과 장단점

장점

  • 두 개의 선만으로 여러 장치 연결 가능
  • 각 장치가 고유 주소를 가져 충돌 없이 통신
  • 하드웨어적으로 간단한 구현
  • ACK/NACK 메커니즘으로 데이터 무결성 확인
  • 클럭 스트레칭을 통한 속도 제어 가능
  • 많은 센서와 디스플레이가 I2C 인터페이스 지원

단점

  • UART보다 복잡한 프로토콜
  • 풀업 저항 필요
  • 상대적으로 느린 통신 속도
  • 선로 용량에 의한 거리 제한(약 2-3m 이내)
  • 최대 127개(7비트 주소) 또는 1023개(10비트 주소)의 장치만 연결 가능
  • 양방향 동시 통신 불가능(반이중 통신)

일반적인 사용 사례

  • 온도, 습도, 기압 등의 센서 연결
  • EEPROM, 실시간 시계(RTC) 등의 저속 메모리 액세스
  • OLED, LCD 디스플레이 제어
  • 복수의 마이크로컨트롤러 간 통신
  • 디지털 포텐셔미터, DAC/ADC 제어

3. I2C 구현 예제

Arduino를 사용한 간단한 I2C 통신 예제를 살펴보겠습니다. 이 예제는 I2C 인터페이스를 가진 온도 센서(예: BME280)에서 데이터를 읽는 과정을 보여줍니다.

// Arduino I2C 통신 예제 - BME280 센서 읽기
#include <Wire.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme; // I2C 인터페이스 사용

void setup() {
  Serial.begin(9600);
  Serial.println("BME280 I2C 테스트 시작");

  // I2C 초기화 (Arduino에서는 A4=SDA, A5=SCL)
  Wire.begin();

  // BME280 센서 초기화 (기본 I2C 주소: 0x76)
  if (!bme.begin()) {
    Serial.println("BME280 센서를 찾을 수 없습니다!");
    while (1);
  }
}

void loop() {
  // 센서에서 데이터 읽기
  float temp = bme.readTemperature();
  float pressure = bme.readPressure() / 100.0F;
  float humidity = bme.readHumidity();

  // 데이터 출력
  Serial.print("온도: ");
  Serial.print(temp);
  Serial.println(" °C");

  Serial.print("기압: ");
  Serial.print(pressure);
  Serial.println(" hPa");

  Serial.print("습도: ");
  Serial.print(humidity);
  Serial.println(" %");

  Serial.println();
  delay(2000);
}

위 코드는 다음과 같은 동작을 수행합니다:

  1. Wire 라이브러리를 통해 I2C 통신 초기화
  2. I2C 주소(0x76)로 BME280 센서 연결
  3. 센서에서 온도, 기압, 습도 데이터 주기적 요청 및 읽기
  4. 시리얼 모니터로 읽은 데이터 출력

이 예제처럼 I2C는 간단한 코드로 여러 센서에 접근할 수 있어 다양한 임베디드 프로젝트에서 효율적으로 사용됩니다.

4. UART와 I2C 비교 분석

지금까지 UART와 I2C에 대해 각각 살펴보았습니다. 이제 두 통신 방식의 주요 차이점을 비교해 보겠습니다.

특성 UART I2C
통신 방식 비동기식(Asynchronous) 동기식(Synchronous)
사용 선 수 2선(TX, RX) + GND 2선(SDA, SCL) + GND
다중 장치 1:1 통신만 가능 다중 장치 연결 가능(최대 127개)
통신 속도 일반적으로 9600~115200 bps 표준: 100kHz, 고속: 400kHz, 초고속: ~5MHz
통신 거리 인터페이스에 따라 수십 미터 가능 2-3m 이내로 제한
구현 복잡성 매우 간단 중간 수준
주소 지정 필요 없음(1:1 통신) 각 장치가 고유 주소 필요
데이터 무결성 패리티 비트로 제한적 확인 ACK/NACK 메커니즘으로 확인
적합한 사용 사례 간단한 1:1 통신, 디버깅, 모듈 통신 다수 센서 연결, 단거리 내 많은 장치 통신

선택 가이드

다음과 같은 경우에는 UART가 더 적합합니다:

  • 두 장치 간의 단순한 통신이 필요할 때
  • 추가 하드웨어 없이 간단히 구현하고 싶을 때
  • 디버깅 목적의 통신이 필요할 때
  • 기존 모듈(GPS, 블루투스 등)과 통신할 때
  • 장거리 통신이 필요할 때(적절한 인터페이스 추가 시)

다음과 같은 경우에는 I2C가 더 적합합니다:

  • 여러 장치를 적은 수의 핀으로 제어해야 할 때
  • 디지털 센서들과 통신할 때
  • 여러 마이크로컨트롤러 간 데이터 공유가 필요할 때
  • 표준화된 프로토콜로 다양한 장치와 통신이 필요할 때
  • 통신 안정성이 중요할 때

5. 결론

이 시리즈를 통해 임베디드 시스템에서 가장 널리 사용되는 두 가지 통신 방식인 UART와 I2C의 작동 원리, 특징, 장단점 및 사용 사례를 살펴보았습니다. 각 통신 방식은 고유한 특징과 장단점을 가지고 있으며, 구체적인 프로젝트 요구사항에 따라 적절한 통신 방식을 선택하는 것이 중요합니다.

UART는 간단하고 직관적이며 두 장치 간의 점대점 통신에 이상적입니다. 반면 I2C는 제한된 수의 핀으로 여러 장치와 통신해야 하는 복잡한 시스템에 적합합니다. 실제 프로젝트에서는 종종 두 프로토콜을 모두 활용하여 다양한 목적에 맞게 최적의 통신 환경을 구축하게 됩니다.

임베디드 시스템 개발에서는 이러한 통신 프로토콜의 기본 원리를 이해하는 것이 효율적인 시스템 설계와 디버깅에 큰 도움이 됩니다. 이 시리즈가 여러분의 임베디드 프로젝트에 도움이 되기를 바랍니다.

시리즈 가이드: Part 1: 기본 개념과 UART 통신 방식 | Part 2: I2C 통신 방식과 비교 분석 (현재 글)

참고자료

  • I2C Bus Specification
  • SparkFun: I2C Tutorial
  • NXP I2C Bus Specification
  • Arduino I2C Scanner
저작자표시 비영리 변경금지 (새창열림)

'하드웨어' 카테고리의 다른 글

윈도우 설치 오류 해결: "이 디스크에 Windows를 설치할 수 없습니다"  (1) 2025.07.10
오렌지 파이 3 LTS (Orange Pi 3 LTS) 완벽 분석: 라즈베리 파이의 강력한 대안  (0) 2025.07.07
I2C와 UART 통신 프로토콜 가이드 (Part 1) - 기본 개념과 UART 통신 방식  (0) 2025.07.01
라즈베리파이 5 GPIO 문제 완전 해결: rpi-lgpio로 Node-RED 정상화하기  (1) 2025.05.31
라즈베리파이 USB 카메라 완벽 설정: 연결부터 실시간 스트리밍까지  (0) 2025.05.30
'하드웨어' 카테고리의 다른 글
  • 윈도우 설치 오류 해결: "이 디스크에 Windows를 설치할 수 없습니다"
  • 오렌지 파이 3 LTS (Orange Pi 3 LTS) 완벽 분석: 라즈베리 파이의 강력한 대안
  • I2C와 UART 통신 프로토콜 가이드 (Part 1) - 기본 개념과 UART 통신 방식
  • 라즈베리파이 5 GPIO 문제 완전 해결: rpi-lgpio로 Node-RED 정상화하기
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    믈레코비타멸균우유
    C#
    라떼우유
    codingcommunity
    cv2
    카페24리뷰이관
    appdevelopment
    긴유통기한우유
    셀레니움
    rtsp
    파이썬
    programming101
    유니티
    Python
    unity
    스크립트 실행
    list
    스마트스토어리뷰
    리뷰이관
    스크립트 실행 순서
    devlife
    리뷰관리
    codingtips
    쇼핑몰리뷰
    learntocode
    카페24리뷰
    리스트
    상품 리뷰 크롤링
    ipcamera
    programmerlife
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
I2C와 UART 통신 프로토콜 가이드 (Part 2) - I2C 통신 방식과 비교 분석
상단으로

티스토리툴바