UART, I2C, SPI 란
UART, I2C, SPI: 전자 기기 안에서 데이터를 주고받는 3가지 방법
전자 회로를 공부하거나 아두이노, 라즈베리파이 같은 보드를 다루다 보면 UART, I2C, SPI라는 이름을 자주 보게 됩니다.
모두 “장치끼리 정보를 주고받는 방법”을 정해 놓은 규칙, 즉 통신 프로토콜입니다.
처음에는 이름도 비슷하고 용도도 헷갈릴 수 있지만, 각각의 특징을 알면
“이 상황에는 뭘 써야 하지?”를 훨씬 쉽게 판단할 수 있습니다.
이 글에서는 UART, I2C, SPI가 각각 어떤 방식인지, 어디가 다른지 정리해 보겠습니다.
1. UART: 두 장치가 1:1로 대화하는 가장 단순한 방식
**UART(Universal Asynchronous Receiver/Transmitter)**는
두 장치 사이에 한 가닥씩 선을 연결해서 데이터를 주고받는 방식입니다.
- 보통 TX(송신 라인) 와 RX(수신 라인) 두 선이 필요합니다.
- 한쪽이 보내면 다른 쪽이 받는 식으로 동작합니다.
- 클록(Clock)을 별도로 맞추지 않는 비동기(Asynchronous) 방식이라 더 간단해 보이지만,
대신 보레이트(Baud rate) 라고 부르는 전송 속도를 미리 맞춰야 합니다. 그리고 서로 속도 관련해서 눈치 싸움(Carrier Sense)를 하다보니 필연적으로 엄청나게 느립니다. 엄청나게요.
쉽게 말하면
“내가 이 속도로 보낼 테니까, 너도 같은 속도로 듣고 있어.”
UART는 구조가 단순해서
- 시리얼 모니터로 센서 값을 보는 경우
- GPS, 블루투스 모듈, 간단한 센서랑 연결할 때
- 컴퓨터와 보드를 직접 연결할 때
같은 상황에서 자주 쓰입니다.
장점
- 연결이 단순하다
- 1:1 연결에는 꽤 직관적이다
- 구현이 비교적 쉽다
단점
- 여러 장치를 붙이기에는 선이 늘어나 오히려 I2C 대비 복잡해진다
- 속도나 안정성을 아주 높게 쓰기에는 한계가 있다
- 거리가 길어지면 신호 품질이 문제될 수 있다
2. I2C: 선은 적게, 장치는 여러 개 연결 가능
I2C는 유럽의 Philips 회사에서 만든 방식으로,
데이터 선 하나와 클록 선 하나만으로 여러 장치를 연결할 수 있는 것이 큰 특징입니다.
- 보통 SDA(데이터 선) 와 SCL(클록 선) 두 줄을 사용합니다.
- “누가 보낼지, 누가 받을지”를 정해주는 주소(Address) 개념이 있습니다.
- 마스터-슬레이브 구조를 기본으로, 마스터가 상황을 주도합니다.
쉽게 말하면
“버스에 탑승한 여러 장치 중에서, 내가 호출할 특정 번호의 장치한테만 말한다.”
I2C는 EEPROM, 자이로/가속도 센서, 온도 센서 같은
주변 장치 여러 개를 한 버스에 물려 쓰는 경우에 특히 잘 어울립니다.
장점
- 선이 적다 (SDA, SCL 두 개)
- 같은 버스에 여러 장치를 붙일 수 있다 서로 다른 127개 장비까지 이론상 붙일 수 있음.
- 배선이 단순한 편이라 작은 기판에 유리하다
단점
- 한 번에 전송할 수 있는 속도나 데이터 양이 제한적이라고 느끼는 경우가 있다
- 장치가 많아지면 주소 충돌 같은 문제를 신경 써야 한다
- 따라서 정보의 대용량 전송보다는 간단한 제어·센서 읽기에 더 어울린다
3. SPI: 빠르고, 한 번에 많이 보내고 싶을 때
**SPI(Serial Peripheral Interface)**도 I2C와 비슷하게
여러 장치를 연결할 수 있는 버스 방식이지만,
성격은 훨씬 더 빠르고 실용적인 고속 대용량 데이터 전송에 가깝습니다.
- 보통 MOSI, MISO, SCK, CS 같은 선이 필요합니다.
- MOSI: 마스터가 보내는 데이터
- MISO: 마스터가 받는 데이터
- SCK: 클록
- CS: 어떤 장치를 선택할지 정하는 선
- 클록 신호를 기준으로 CS가 'low'면 나머지 선에서 오는 데이터를 동기적으로 다 주고받는 전이중화 동기(Synchronous) 방식입니다.
쉽게 말하면
“정한 리듬(SCK)에 맞춰, 한 장치가 여러 데이터를 빠르게 주면서 받는다.”
SPI는
- 디스플레이 모듈
- SD 카드나 플래시 메모리
- 고속으로 데이터를 읽거나 써야 하는 센서
같은 경우에 자주 사용됩니다.
문서나 실습에서 “SPI가 더 빠르다”는 말이 나오는 이유도 여기에 있습니다.
장점
- 비교적 빠른 전송이 가능하다
- 데이터를 주고받는 흐름이 단순하고 명확하다
- 여러 장치를 CS 선으로 나눠서 연결할 수 있다
단점
- 장치 수가 많아지면 CS 선이나 배선이 늘어날 수 있다
- I2C보다 선이 더 필요한 편이다. 따라서 설계가 엄청나게 복잡하다.
4. 한 줄로 정리하면
세 방식의 느낌을 아주 간단히 비교해 보면 이렇습니다.
- UART: 두 장치가 1:1로, 선은 적어 보여도 장치가 많아지면 선이 늘어나는 방식
- I2C: 선은 적게 쓰면서 여러 장치를 주소 기반으로 연결하는 방식
- SPI: 클록에 맞춰 빠르고 실용적으로 데이터를 주고받는 방식
즉, 무조건 “더 좋은 방식”은 없고,
무슨 역할을 할 것인지에 따라 선택이 달라집니다.
5. 어떤 상황에서 어떤 걸 떠올리면 좋을까
UART가 어울릴 때
- 보드와 센서를 1:1로 간단히 연결하고 싶을 때
- 컴퓨터와 보드를 시리얼로 연결해 상태를 확인하고 싶을 때
- 복잡한 배선 없이 기본적인 통신을 해보고 싶을 때
I2C가 어울릴 때
- 센서 여러 개를 한 버스에 연결해야 할 때
- 배선을 최소화하고 깔끔하게 정리하고 싶을 때
- 느린 대신 단순한 읽기/설정 위주의 통신이면 충분할 때
SPI가 어울릴 때
- 데이터를 비교적 빠르게 주고받아야 할 때
- 화면 출력, 메모리, 고속 센서처럼 대역폭이 중요한 장치를 다룰 때
- 마스터가 여러 장치를 명확하게 나눠 제어하고 싶을 때
마무리
UART, I2C, SPI는 전자 회로에서 “데이터를 어떻게 주고받을지”를 정리한 대표적인 규칙들입니다.
처음에는 용어도 낯설고 차이점도 잘 안 보이지만,
UART는 1:1 단순 통신,
I2C는 선을 적게 쓰면서 여러 장치를 주소 기반으로 연결,
SPI는 클록 기반으로 빠르고 실용적으로 전송
이라는 큰 그림을 잡아두면 이후 실습이나 회로 설명을 볼 때 훨씬 편해집니다.
실제 프로젝트에서는 “지금은 데이터를 많이 주고받으니까 무조건 SPI를 써야지”보다
연결할 장치가 무엇인지, 몇 개인지, 속도나 배선이 어떤지를 기준으로 고르는 것이 중요합니다.
필요하다면 각 프로토콜의 기본 핀 배치나 동작 타이밍을 간단한 보드 예제부터 하나씩 확인해 보는 것도 좋은 공부 방법입니다.