시리얼 통신(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)
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 설정 확인
- 신호 노이즈 감소를 위해 쉴딩 케이블 사용
💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.
'Computer Science > CS 지식' 카테고리의 다른 글
교류 전력과 역률(Power Factor) (0) | 2025.03.10 |
---|---|
[Modbus] Modscan & Modsim 으로 TCP 통신하기 (0) | 2025.03.09 |
모드버스(Modebus) 프로토콜 (feat. RTU, TCP/IP, Function Code) (0) | 2025.03.07 |
LoRa (Long Range)와 LoRaWAN(Long Range Wide Area Network) (1) | 2025.03.05 |
[IoT] MQTT 개념 및 환경 구축 (내부 네트워크) (0) | 2025.02.24 |