핵심 요약
면접에서 I2C SPI UART 차이를 설명할 때 가장 먼저 확인해야 하는 것은 선 개수와 동기·비동기 여부입니다. I2C는 2선(SDA·SCL) 동기 방식, SPI는 4선(SCLK·MOSI·MISO·CS) 동기 방식, UART는 TX/RX 2선(+GND) 비동기 방식입니다. 면접에서는 이 기본 구조 차이를 먼저 설명하고, 장치 선택 방식과 속도, 대표 용도까지 이어서 답하는 것이 핵심입니다.
이 글은 임베디드 BSP·펌웨어 직무 면접을 준비하는 관점에서 I2C·SPI·UART의 핵심 개념과 답변 포인트를 정리한 글입니다.
I2C·SPI·UART 차이: 선 개수와 동기·비동기는?
한 줄 답: I2C = 2선(SDA·SCL) 동기 · SPI = 4선(SCLK·MOSI·MISO·CS) 동기 · UART = TX/RX 2선(+GND) 비동기
- 동기 방식은 클럭 선을 함께 보내며, 비동기 방식은 클럭 없이 양쪽이 같은 baud rate를 미리 약속합니다.
- I2C는 오픈 드레인 + 풀업 저항이 필요하다는 점이 면접 단골 질문입니다.

- 세 버스의 선 수, 클럭, 듀플렉스를 비교하면 다음과 같습니다.
항목 I2C SPI UART 선 수 2선 (SDA, SCL) 4선 (SCLK, MOSI, MISO, CS) 2선 (+GND) (TX, RX 교차) 동기 여부 동기식 (클럭 있음) 동기식 (클럭 있음) 비동기식 (클럭 없음) 듀플렉스 반이중 (Half-duplex) 전이중 (Full-duplex) 전이중 (Full-duplex)
속도·주소 지정·다중 장치 연결은 어떻게 다른가?
한 줄 답: I2C는 주소로 2선에 여러 장치를 묶고, SPI는 장치마다 CS 선으로 골라 공유 클럭으로 전송하며, UART는 1:1 연결에 맞춰 양쪽 baud 속도를 약속합니다.
- I2C는 주소로 장치를 선택합니다(7비트, "can be expanded to get a 10 bit I2C address"). 같은 2선에 여러 장치를 연결할 수 있습니다. Rd/Wr bit(Rd=1, Wr=0)로 읽기·쓰기를 구분하고, A/NA(ACK/NACK)로 응답을 확인합니다. 속도는 모드명 수준(Standard-mode, Fast-mode, High-speed mode)으로 구분하고, Linux 커널 문서는 "typically up to 400 kHz, high speed modes up to 5 MHz"라고 설명합니다. (예시 주소: 0x48 / 0x68)
- SPI는 주소가 없어 장치마다 CS(Chip Select) 선을 1개씩 둡니다. SCK·MOSI·MISO는 공유합니다. 클럭 모드는 0–3이 있으며, CPOL은 초기 클럭 극성(initial clock polarity), CPHA는 위상(phase)을 뜻합니다(CPHA=0이면 leading edge에서 샘플링). 모드 0 = CPOL=0, CPHA=0입니다. SPI는 "simple de facto standard, not complicated enough to acquire a standardization body"이며, 장치 자동 탐색(automatic discovery/enumeration)은 거의 지원하지 않습니다. 속도는 칩·보드 데이터시트가 정하며, 커널 문서는 SCK를 "often on the order of 10 MHz"라고만 설명합니다.

- UART는 기본적으로 1:1 연결이며, start/stop 비트로 프레임을 구분합니다. 워드 길이·parity·stop 비트·baud rate 같은 포트 파라미터(커널 serial 드라이버 문서 기준)를 양쪽이 같게 설정해야 하며, 속도도 양쪽 baud rate 설정으로 맞춥니다(예: 115200 같은 관용 값).
- 통신 특징별 세부 비교는 다음과 같습니다.
항목 I2C SPI UART 장치 선택 주소 (7비트/10비트 확장) CS (Chip Select) 선 기본 1:1 연결 다중 장치 2선에 여러 장치 공유 CS 선 추가로 여러 장치 1:1 응답 확인 ACK/NACK 없음 없음 속도 결정 통신 모드 사양에 따름 칩/보드 한계가 정함 양쪽 baud rate 약속
센서·플래시·디버그 콘솔, 무엇을 고르나? 면접 답변 틀
한 줄 답: 핀을 아껴야 하는 센서에는 I2C를, 빠른 연속 전송이 필요한 플래시에는 SPI를, 부트 로그나 단순 통신에는 UART를 사용합니다.
- I2C 용도: 센서·EEPROM 여러 개를 연결하며 핀을 아낄 때 사용합니다.
- SPI 용도: SPI 플래시·디스플레이·ADC처럼 빠른 연속 전송에 사용합니다. 커널 문서에 따르면 모든 MMC/SD 카드가 SPI를 지원하며, 일부 PC는 BIOS 코드용으로 SPI 플래시를 사용합니다.
- UART 용도: 부트 로그·디버그 콘솔·GPS/BT 같은 모듈 통신에 사용합니다.
- 면접 답변 템플릿: 「선 수와 동기/비동기 여부를 먼저 언급한 후 → 장치 선택 방식과 속도 차이를 비교하고 → 각 통신 방식에 맞는 대표적인 용도 예시를 순서대로 답합니다.」
관련 글: 인터럽트와 폴링, 임베디드 면접에서 어떻게 고르나? · DMA란? CPU 복사와 차이, 임베디드·펌웨어 면접에서 어떻게 답하나?
참고 문서: I2C summary · I2C protocol · SPI summary · Serial driver API
자주 헷갈리는 질문(FAQ)은 무엇입니까?
I2C 선은 오픈 드레인 구조라 장치가 선을 Low로 당기기만 하므로, 놓았을 때 High로 되돌릴 외부 풀업 저항이 필요합니다.
샘플링 에지가 어긋나 비트가 밀리거나 값이 깨져 보일 수 있습니다. 칩 데이터시트의 타이밍도에서 CPOL·CPHA를 확인합니다.
양쪽의 baud rate 설정, GND 공통 연결, TX와 RX의 교차 연결 여부를 확인해야 합니다.
Key Takeaway
The first thing an I2C/SPI/UART interview question checks is the number of wires and whether the protocol is synchronous or asynchronous. I2C uses 2 wires (SDA, SCL) and is synchronous; SPI uses 4 wires (SCLK, MOSI, MISO, CS) and is synchronous; UART uses 2 wires (TX/RX, plus GND) and is asynchronous. In an interview, the key is to explain this structural difference first, then move on to device-selection method, speed, and typical use cases.
This post organizes the core concepts and answer points for I2C, SPI, and UART from the perspective of preparing for embedded BSP/firmware job interviews.
I2C vs SPI vs UART: How many wires, and sync or async?
One-line answer: I2C = 2 wires (SDA, SCL), synchronous · SPI = 4 wires (SCLK, MOSI, MISO, CS), synchronous · UART = TX/RX 2 wires (+ GND), asynchronous
- Synchronous means a clock line is sent along with the data; asynchronous means there is no clock line, and both sides agree on the same baud rate in advance.
- A frequent interview point is that I2C requires an open-drain configuration with pull-up resistors.

- Comparing wire count, clock, and duplex mode across the three buses:
Item I2C SPI UART Wire count 2 wires (SDA, SCL) 4 wires (SCLK, MOSI, MISO, CS) 2 wires (+GND) (crossed TX, RX) Sync/async Synchronous (has clock) Synchronous (has clock) Asynchronous (no clock) Duplex Half-duplex Full-duplex Full-duplex
How do speed, addressing, and multi-device wiring differ?
One-line answer: I2C groups multiple devices onto 2 wires using addresses, SPI picks each device with its own CS line and shifts data on a shared clock, and UART is a 1:1 link where both sides agree on a baud rate.
- I2C selects a device by address (7 bits, which "can be expanded to get a 10 bit I2C address"). Multiple devices can share the same 2 wires. The Rd/Wr bit (Rd=1, Wr=0) distinguishes read from write, and A/NA (ACK/NACK) confirms the response. Speed is defined at the mode-name level (Standard-mode, Fast-mode, High-speed mode); the Linux kernel docs describe it as "typically up to 400 kHz, high speed modes up to 5 MHz." (Example addresses: 0x48 / 0x68)
- SPI has no addressing, so each device gets its own CS (Chip Select) line, while SCK, MOSI, and MISO are shared. There are clock modes 0–3, where CPOL is the initial clock polarity and CPHA is the phase (CPHA=0 samples on the leading edge); mode 0 means CPOL=0, CPHA=0. SPI is a "simple de facto standard, not complicated enough to acquire a standardization body," and targets "only rarely support any kind of automatic discovery/enumeration." Speed is set by the chip and board datasheets; the kernel docs only describe SCK as "often on the order of 10 MHz."

- UART is basically a 1:1 link, with start/stop bits delimiting each frame. Both sides must use the same port parameters (word length, parity, stop bits, baud rate, as listed in the kernel serial driver docs), so speed is matched by configuring the same baud rate (e.g., a conventional value such as 115200).
- A detailed comparison by communication characteristic:
Item I2C SPI UART Device selection Address (7-bit, extendable to 10-bit) CS (Chip Select) line Basic 1:1 link Multiple devices Shared on 2 wires Added via extra CS lines 1:1 Response confirmation ACK/NACK None None Speed determined by Communication mode spec Chip/board limits Agreed baud rate on both sides
Sensors, flash, or a debug console — which do you pick? An interview answer framework
One-line answer: Use I2C for sensors where you need to save pins, SPI for flash that needs fast continuous transfer, and UART for boot logs or simple communication.
- I2C use cases: connecting multiple sensors or EEPROMs while saving pins.
- SPI use cases: fast, continuous transfers such as SPI flash, displays, and ADCs. Per the kernel docs, every MMC/SD card supports SPI, and some PC hardware uses SPI flash for BIOS code.
- UART use cases: boot logs, debug consoles, and module communication such as GPS/BT.
- Interview answer template: "First mention the wire count and sync/async difference, then compare device-selection method and speed, and finally walk through the representative use case for each protocol in order."
Related posts: Interrupt vs Polling: How to Choose in an Embedded Interview · What Is DMA? How It Differs from CPU Copy and How to Answer in Embedded/Firmware Interviews
Reference docs: I2C summary · I2C protocol · SPI summary · Serial driver API
What are the frequently confused questions (FAQ)?
I2C lines are open-drain: devices can only pull a line low, so an external pull-up resistor is needed to bring it back high when released.
Data is sampled on the wrong edge, so bits can look shifted or corrupted. Check CPOL/CPHA against the chip datasheet's timing diagram.
Check both sides' baud rate settings, the shared GND connection, and whether TX and RX are correctly crossed.
'임베디드' 카테고리의 다른 글
| DMA란? CPU 복사와 차이, 임베디드·펌웨어 면접에서 어떻게 답하나? (0) | 2026.10.09 |
|---|---|
| MediaTek 10TOPS급 AIoT 보드, Linux에서 언제 고르나? (0) | 2026.10.08 |
| 스핀락은 뮤텍스 대신 언제 쓰나? 임베디드·커널 면접 기준 (0) | 2026.10.08 |
| 인터럽트와 폴링, 임베디드 면접에서 어떻게 고르나? (0) | 2026.10.07 |
| 임베디드 비전용 3TOPS급 NPU SoM, Debian에서 언제 고르나? (0) | 2026.10.05 |





















