목차
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)과 대비됩니다.
직렬 통신의 장점
- 적은 수의 선으로 데이터 전송이 가능해 배선이 간단함
- 장거리 전송 시 신호 무결성 유지에 유리
- 하드웨어 비용 절감
- 다양한 장치 간 호환성 확보
직렬 통신의 두 가지 방식
직렬 통신은 크게 두 가지로 나눌 수 있습니다:
- 동기식(Synchronous) 통신: 클럭 신호를 사용하여 데이터 전송 타이밍을 동기화 (예: I2C, SPI)
- 비동기식(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는 다음과 같은 프레임 구조로 데이터를 전송합니다:
- 시작 비트(Start bit): 항상 0(로직 로우)으로, 데이터 전송의 시작을 알림
- 데이터 비트(Data bits): 보통 5~9비트로, 일반적으로 8비트를 사용
- 패리티 비트(Parity bit, 선택사항): 오류 검출을 위한 비트
- 정지 비트(Stop bits): 1~2비트로, 항상 1(로직 하이)로 데이터 전송 종료를 알림
UART 통신 과정
- 대기 상태에서 TX 선은 1(로직 하이) 상태를 유지
- 송신측 UART가 시작 비트(0)를 전송하여 데이터 전송 시작을 알림
- 미리 정한 비트 전송 속도(Baud rate)에 따라 데이터 비트 전송
- 필요시 패리티 비트 전송
- 정지 비트(1)를 전송하여 데이터 전송 종료 알림
- 다음 데이터를 전송하거나 대기 상태로 복귀
보드 레이트(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);
}
}
위 코드는 다음과 같은 동작을 수행합니다:
- 9600 bps 속도로 UART 통신 초기화
- 시리얼 모니터를 통해 데이터 수신 대기
- 데이터가 수신되면 이를 읽어 출력하고 다시 에코
UART를 사용한 더 실용적인 예제로는 GPS 모듈, 블루투스 모듈, 온도 센서 등과의 통신이 있습니다. 이러한 장치들은 대부분 UART 인터페이스를 통해 쉽게 연결할 수 있습니다.
5. 다음 글 안내
이번 포스팅에서는 임베디드 통신의 기본과 UART 통신 프로토콜에 대해 살펴보았습니다. 다음 글(Part 2)에서는 I2C 통신 프로토콜의 특징과 작동 원리, 그리고 UART와의 비교 분석을 통해 각 프로토콜의 적합한 사용 사례를 알아보겠습니다.
'하드웨어' 카테고리의 다른 글
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 |