I2C와 UART 통신 프로토콜 가이드 (Part 1) - 기본 개념과 UART 통신 방식

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

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

목차

  • 1. 개요
  • 2. 직렬 통신의 기본
  • 3. UART 통신 프로토콜
    • 3.1. UART란?
    • 3.2. UART 작동 원리
    • 3.3. UART의 특징과 장단점
  • 4. UART 구현 예제
  • 5. 다음 글 안내

1. 개요

임베디드 시스템을 개발하다 보면 마이크로컨트롤러 간 또는 마이크로컨트롤러와 주변 장치 간의 통신이 필수적입니다. 이러한 통신을 위해 다양한 프로토콜이 존재하는데, 그중에서도 I2C(Inter-Integrated Circuit)와 UART(Universal Asynchronous Receiver/Transmitter)는 가장 널리 사용되는 통신 프로토콜입니다. 이 시리즈에서는 이 두 가지 통신 방식의 기본 개념, 작동 원리, 장단점 및 실제 활용 방법을 자세히 살펴볼 것입니다.

이 시리즈에서 다룰 내용:

Part 1 - 기본 개념과 UART 통신 방식

  • 직렬 통신의 기본 개념
  • UART 통신 프로토콜의 작동 원리와 특징
  • UART 구현 예제

Part 2 - I2C 통신 방식과 비교 분석

  • I2C 통신 프로토콜의 작동 원리와 특징
  • I2C 구현 예제
  • UART와 I2C 비교 분석
  • 적합한 사용 사례

2. 직렬 통신의 기본

본격적으로 UART와 I2C를 살펴보기 전에, 직렬 통신(Serial Communication)의 기본 개념을 이해하는 것이 중요합니다. 직렬 통신은 데이터를 한 비트씩 순차적으로 전송하는 방식으로, 병렬 통신(Parallel Communication)과 대비됩니다.

직렬 통신의 장점

  • 적은 수의 선으로 데이터 전송이 가능해 배선이 간단함
  • 장거리 전송 시 신호 무결성 유지에 유리
  • 하드웨어 비용 절감
  • 다양한 장치 간 호환성 확보

직렬 통신의 두 가지 방식

직렬 통신은 크게 두 가지로 나눌 수 있습니다:

  1. 동기식(Synchronous) 통신: 클럭 신호를 사용하여 데이터 전송 타이밍을 동기화 (예: I2C, SPI)
  2. 비동기식(Asynchronous) 통신: 클럭 신호 없이 데이터 전송 (예: UART)

3. UART 통신 프로토콜

3.1. UART란?

UART(Universal Asynchronous Receiver/Transmitter)는 비동기식 직렬 통신을 위한 하드웨어 장치 또는 회로입니다. 'Universal'이라는 이름에서 알 수 있듯이, 다양한 데이터 형식과 전송 속도를 지원하는 범용성이 특징입니다. UART는 별도의 클럭 신호 없이 데이터를 주고받을 수 있어 간단한 통신에 적합합니다.

3.2. UART 작동 원리

UART 통신은 두 장치 간에 TX(Transmit)와 RX(Receive) 두 선을 교차 연결하여 이루어집니다. 한 장치의 TX는 상대 장치의 RX에 연결되고, 반대로 한 장치의 RX는 상대 장치의 TX에 연결됩니다.

UART 통신의 기본 구성 요소

  • TX(Transmit): 데이터를 송신하는 핀
  • RX(Receive): 데이터를 수신하는 핀
  • GND(Ground): 공통 접지선

UART 데이터 프레임 구조

UART는 다음과 같은 프레임 구조로 데이터를 전송합니다:

  1. 시작 비트(Start bit): 항상 0(로직 로우)으로, 데이터 전송의 시작을 알림
  2. 데이터 비트(Data bits): 보통 5~9비트로, 일반적으로 8비트를 사용
  3. 패리티 비트(Parity bit, 선택사항): 오류 검출을 위한 비트
  4. 정지 비트(Stop bits): 1~2비트로, 항상 1(로직 하이)로 데이터 전송 종료를 알림

UART 통신 과정

  1. 대기 상태에서 TX 선은 1(로직 하이) 상태를 유지
  2. 송신측 UART가 시작 비트(0)를 전송하여 데이터 전송 시작을 알림
  3. 미리 정한 비트 전송 속도(Baud rate)에 따라 데이터 비트 전송
  4. 필요시 패리티 비트 전송
  5. 정지 비트(1)를 전송하여 데이터 전송 종료 알림
  6. 다음 데이터를 전송하거나 대기 상태로 복귀

보드 레이트(Baud Rate)

UART 통신에서 중요한 개념은 보드 레이트(Baud rate)입니다. 이는 초당 전송되는 비트 수를 의미하며, 통신하는 두 장치는 반드시 동일한 보드 레이트를 사용해야 합니다. 일반적으로 사용되는 보드 레이트는 9600, 19200, 38400, 57600, 115200 등이 있습니다.

3.3. UART의 특징과 장단점

장점

  • 단 두 개의 통신선(TX, RX)만으로 양방향 통신 가능
  • 하드웨어 구현이 간단하고 비용 효율적
  • 다양한 마이크로컨트롤러에 내장되어 있어 접근성 높음
  • 별도의 클럭 신호 없이 통신 가능
  • 유연한 데이터 형식(데이터 비트 수, 패리티, 정지 비트 등) 지원

단점

  • 두 장치 간 1:1 통신만 가능 (다중 장치 연결에 부적합)
  • 양쪽 장치의 보드 레이트가 정확히 일치해야 함 (±10% 오차 허용)
  • 상대적으로 낮은 데이터 전송 속도
  • 신호 오류 감지 기능 제한적 (패리티 비트만 사용)
  • 장거리 통신에는 추가적인 인터페이스(RS-232, RS-485 등) 필요

일반적인 사용 사례

  • 디버깅 목적의 시리얼 콘솔(Serial Console)
  • GPS 모듈, 블루투스 모듈 등과의 통신
  • 간단한 센서 데이터 수집
  • 마이크로컨트롤러와 컴퓨터 간 통신
  • Arduino와 같은 개발 보드의 프로그래밍 인터페이스

4. UART 구현 예제

Arduino를 사용한 간단한 UART 통신 예제를 살펴보겠습니다. 다음은 시리얼 모니터를 통해 데이터를 주고받는 기본적인 코드입니다.

// Arduino UART 통신 예제
void setup() {
  // 9600 bps로 시리얼 통신 초기화
  Serial.begin(9600);
  Serial.println("UART 통신 테스트 시작");
}

void loop() {
  // 시리얼 모니터로부터 데이터 수신
  if (Serial.available() > 0) {
    // 수신된 데이터 읽기
    String receivedData = Serial.readStringUntil('\n');

    // 수신된 데이터 처리
    Serial.print("수신된 데이터: ");
    Serial.println(receivedData);

    // 에코 응답 보내기
    Serial.print("에코 응답: ");
    Serial.println(receivedData);
  }
}

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

  1. 9600 bps 속도로 UART 통신 초기화
  2. 시리얼 모니터를 통해 데이터 수신 대기
  3. 데이터가 수신되면 이를 읽어 출력하고 다시 에코

UART를 사용한 더 실용적인 예제로는 GPS 모듈, 블루투스 모듈, 온도 센서 등과의 통신이 있습니다. 이러한 장치들은 대부분 UART 인터페이스를 통해 쉽게 연결할 수 있습니다.

5. 다음 글 안내

이번 포스팅에서는 임베디드 통신의 기본과 UART 통신 프로토콜에 대해 살펴보았습니다. 다음 글(Part 2)에서는 I2C 통신 프로토콜의 특징과 작동 원리, 그리고 UART와의 비교 분석을 통해 각 프로토콜의 적합한 사용 사례를 알아보겠습니다.

참고자료

  • SparkFun: Serial Communication
  • Arduino Serial Communication
  • UART: A Hardware Communication Protocol
저작자표시 비영리 변경금지 (새창열림)

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

I2C와 UART 통신 프로토콜 가이드 (Part 2) - I2C 통신 방식과 비교 분석  (1) 2025.07.01
라즈베리파이 5 GPIO 문제 완전 해결: rpi-lgpio로 Node-RED 정상화하기  (1) 2025.05.31
라즈베리파이 USB 카메라 완벽 설정: 연결부터 실시간 스트리밍까지  (0) 2025.05.30
RS485 통신 완전 정복: 산업용 통신의 표준  (4) 2025.05.30
라즈베리파이 GPIO 완전 정복: 기초부터 8채널 릴레이 제어까지  (0) 2025.05.30
'하드웨어' 카테고리의 다른 글
  • I2C와 UART 통신 프로토콜 가이드 (Part 2) - I2C 통신 방식과 비교 분석
  • 라즈베리파이 5 GPIO 문제 완전 해결: rpi-lgpio로 Node-RED 정상화하기
  • 라즈베리파이 USB 카메라 완벽 설정: 연결부터 실시간 스트리밍까지
  • RS485 통신 완전 정복: 산업용 통신의 표준
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (672) N
      • 상품 추천 (178) N
      • MongoDB (4)
      • 하드웨어 (11)
      • 일기장 (4)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • 파이썬 (12)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (50)
        • 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)
  • 인기 글

  • 태그

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

  • hELLO· Designed By정상우.v4.10.3
코샵
I2C와 UART 통신 프로토콜 가이드 (Part 1) - 기본 개념과 UART 통신 방식
상단으로

티스토리툴바