본문 바로가기
Computer Science/CS 지식

시리얼 통신(Serial Communication)

by rnasterofmysea 2025. 3. 5.
728x90
반응형

시리얼 통신(Serial Communication)

 

1. 시리얼 통신이란?

시리얼 통신(Serial Communication)은 데이터를 한 비트씩 순차적으로 전송하는 방식의 통신 방법입니다.
이는 여러 개의 데이터 비트를 동시에 전송하는 병렬 통신(Parallel Communication)과 대비됩니다.
시리얼 통신은 전선의 수를 줄일 수 있어 장거리 전송에 유리하며, 많은 임베디드 시스템과 센서에서 활용됩니다.


2. 시리얼 통신의 특징

한 번에 한 비트씩 전송: 데이터가 순차적으로 한 비트씩 전송됨
장거리 전송에 적합: 병렬 통신보다 신호 간섭이 적고 비용이 낮음
전선 개수 감소: 하드웨어 설계를 단순하게 만들 수 있음
전송 속도: 병렬 통신보다는 느릴 수 있지만, 최신 기술에서는 높은 속도를 구현 가능


3. 시리얼 통신의 주요 유형

시리얼 통신은 크게 비동기(Asynchronous) 방식동기(Synchronous) 방식으로 나뉩니다.

 

(1) 비동기 시리얼 통신

  • 클럭 신호 없이 송수신 장치가 각각 독립적으로 동작
  • 데이터를 전송할 때 시작(Start) 비트와 종료(Stop) 비트를 추가하여 동기화
  • 대표적인 프로토콜: UART (Universal Asynchronous Receiver/Transmitter), RS-232
UART란?

UART는 범용 비동기 송수신기(Universal Asynchronous Receiver/Transmitter)의 약자로, 비동기 방식의 시리얼 통신을 수행하는 하드웨어 모듈입니다.
✅ 비동기 방식으로 데이터를 송수신하며, 별도의 클럭 신호 없이 Start Bit와 Stop Bit를 이용하여 데이터를 동기화합니다.
✅ Tx (Transmit)와 Rx (Receive) 두 개의 핀을 이용하여 데이터를 송수신합니다.
✅ PC와 마이크로컨트롤러(Arduino, Raspberry Pi 등)를 연결하는 데 많이 사용됩니다.

 

(2) 동기 시리얼 통신

  • 송신기와 수신기가 같은 클럭 신호를 공유하여 데이터가 정해진 주기로 전송됨
  • 전송 속도가 비동기 방식보다 빠름
  • 대표적인 프로토콜: SPI (Serial Peripheral Interface), I²C (Inter-Integrated Circuit)

 

4. 시리얼 통신 프로토콜 비교

 

프로토콜  동기/비동기  데이터 라인 수  특징
UART 비동기 2개 (Tx, Rx) 간단한 점대점(Point-to-Point) 통신
RS-232 비동기 3개 이상 직렬 포트(Serial Port) 사용
SPI 동기 최소 4개 (MOSI, MISO, SCLK, SS) 빠른 전송 속도, 주로 센서나 메모리 통신에 활용
I²C 동기 2개 (SDA, SCL) 다중 장치(Multi-Master, Multi-Slave) 지원

 

 


5. 시리얼 통신과 병렬 통신 비교

비교 항목  시리얼 통신  병렬 통신
데이터 전송 방식 한 비트씩 전송 여러 비트를 동시에 전송
전송 속도 상대적으로 느림 빠름 (짧은 거리에서 유리)
배선 수 적음 (Tx, Rx 또는 SCL, SDA) 많음 (8비트 전송 시 8개 이상)
장거리 전송 유리 (노이즈 감소) 불리 (신호 간섭 문제)
비용 저렴함 상대적으로 비쌈

6. 시리얼 통신의 실제 활용 예시

PC와 마이크로컨트롤러(Arduino, Raspberry Pi) 간 데이터 전송
센서와 마이크로컨트롤러 간 데이터 송수신 (I²C, SPI 사용)
블루투스 및 Wi-Fi 모듈과 통신 (UART 사용)
산업용 장비 및 네트워크 장비 연결 (RS-232, RS-485 활용)

 


7. 시리얼 통신의 기본 개념 (UART 예시)

시리얼 통신을 사용할 때 가장 기본적인 방식인 UART (Universal Asynchronous Receiver/Transmitter)를 예로 들 수 있습니다.
UART는 비동기 방식이므로, 데이터를 보낼 때 시작(Start) 비트와 종료(Stop) 비트를 포함하여 전송합니다.

UART 데이터 프레임 구조

| Start Bit | Data Bits (5~8 bits) | Parity Bit (Optional) | Stop Bit (1~2 bits) |
  • Start Bit: 데이터 전송 시작을 알리는 비트 (보통 0)
  • Data Bits: 실제 전송할 데이터 (일반적으로 8비트)
  • Parity Bit: 오류 검출을 위한 선택적 비트
  • Stop Bit: 데이터 전송 종료를 알리는 비트 (1 또는 2)

 

https://postfiles.pstatic.net/20160331_198/an2416_1459357295306N6wzL_PNG/50d2066fce395fc43b000000.png?type=w1

 


8. 시리얼 통신을 활용한 Python 예제 (UART 통신)

아두이노(Arduino)와 같은 장치와 시리얼 통신을 할 때, Python에서는 pyserial 라이브러리를 사용할 수 있습니다.

import serial

# 시리얼 포트 설정 (포트 번호와 속도는 환경에 맞게 조정)
ser = serial.Serial('COM3', 9600)  # Windows: 'COM3', Linux/Mac: '/dev/ttyUSB0'

# 데이터 송신
ser.write(b'Hello Arduino!')

# 데이터 수신
data = ser.readline()
print("Received:", data.decode())

# 시리얼 포트 닫기
ser.close()
  • serial.Serial(port, baudrate): 시리얼 포트 및 전송 속도 설정
  • write(data): 데이터를 전송
  • readline(): 한 줄의 데이터를 수신
  • decode(): 바이트 데이터를 문자열로 변환

9. 시리얼 통신에서 발생할 수 있는 문제 및 해결 방법

1) 데이터 손실 문제

  • 원인: 송신 속도(baud rate) 불일치, 노이즈 발생
  • 해결 방법: 송수신 장치의 baud rate를 동일하게 설정, 오류 검출 기능(Parity Bit) 활용

2) 통신이 정상적으로 이루어지지 않는 경우

  • 원인: 잘못된 포트 설정, 하드웨어 연결 문제
  • 해결 방법:
    • 올바른 시리얼 포트 사용 (ls /dev/tty* 또는 Device Manager 확인)
    • 점퍼 케이블 및 하드웨어 연결 확인

3) 데이터가 깨지는 경우

  • 원인: Stop Bit 누락, 패리티 오류
  • 해결 방법:
    • Stop Bit와 Parity Bit 설정 확인
    • 신호 노이즈 감소를 위해 쉴딩 케이블 사용

 

 


 

💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.

 

728x90
반응형