시리얼 통신 — 임베디드 면접 (실제 기출 기반·심화)
"UART와 USART 차이", "SPI와 I2C 언제 무엇을 쓰나", "I2C 풀업 저항이 왜 필요한가", "SPI 모드(CPOL/CPHA)", "보레이트가 안 맞으면", "핀이 부족한데 센서 5개 붙이려면" — 임베디드 면접 최다 빈출 영역. 세 버스의 전기적 동작·트레이드오프·언제 무엇을을 정확히 말해야 한다.
함정 3대장(★): ① UART에 클럭선이 있다? → 없다(비동기). 클럭 동기는 USART/SPI/I2C ② SPI에 주소가 있다? → 없다·CS(active-low)로 물리 선택 ③ I2C 풀업 없어도 동작? → 안 됨·오픈드레인이라 풀업이 High를 만든다.
1. UART — 비동기 점대점 (★★ 단골)
실제 질문: "UART와 USART의 차이는?"(최빈출) · "비동기인데 어떻게 송수신이 맞춰지나?" · "보레이트가 안 맞으면 어떤 증상?" · "115200bps에서 1바이트 전송 시간은?" (velog @verilog·melonicedlatte)
- 비동기: 클럭선이 없다. 송·수신이 같은 보레이트로 사전 합의하고, 라인 idle(High)에서 **start bit(Low 천이)**로 프레임 시작을 감지 → data(7/8) → optional parity → stop bit(1/2). 대표 설정 8N1 = 10bit/byte.
- Full-duplex: TX/RX 선 분리 → 동시 송수신. 배선은 크로스(TX↔RX).
- USART = 동기 모드 옵션 추가: 별도 클럭선을 쓰면 start/stop·parity 없이 더 빠름. UART는 비동기 전용. → "차이?"의 정답은 USART는 동기 모드도 된다.
- 오버샘플링 16×: 수신기가 비트 주기를 16분주로 보고 start 하강에지 검출 후 비트 중앙에서 샘플 → 타이밍 마진·노이즈 내성.
8N1 프레임: idle(H) │ start(L) │ D0 D1 D2 D3 D4 D5 D6 D7 │ stop(H) │ idle(H)
└ 하강에지로 시작 감지 LSB→MSB └ 1비트 복귀
보레이트 오차 한계(★): 양쪽 누적 **±2~3%**가 한계. 8N1에서 마지막 stop까지 누적 오차가 반 비트를 넘으면 샘플이 인접 비트로 밀려 framing error·글자 깨짐. → "보레이트 살짝 달라도 됨"은 ❌. 115200bps·8N1 → 10bit ÷ 115200 ≈ 86.8μs/byte.
꼬리질문: "글자가 깨지면 원인?" → 보레이트 불일치·접지·노이즈 → 오실로스코프로 1비트 폭 측정→실제 보레이트 역산. / "장거리로 보내려면?" → TTL은 약함 → RS-422/485 트랜시버(차동)(07편). / "흐름제어 없이 빠르게 보내면?" → RX 오버런 → RTS/CTS(HW) 또는 XON/XOFF(SW). / "패리티의 한계?" → 1비트 오류만 검출(짝수 개는 못 잡음) → CRC는 상위 계층.
함정: ❌ "RS-232 = UART" → UART는 인터페이스, RS-232는 전기 규격(반전 논리·±전압) → TTL UART와 전압·논리가 달라 MAX232 같은 레벨 변환 필요.
2. SPI — 고속 동기 4선 (★★ 단골)
실제 질문: "SPI 핀 구성은?"(최빈출: MOSI·MISO·SCLK·SS) · "CPOL/CPHA(SPI 모드 4가지) 설명" · "다중 슬레이브는? 데이지체인이란?" · "SPI에 주소가 있나?" (velog @verilog·rfwireless)
- 4선: SCLK(클럭·마스터 생성)·MOSI(Master Out Slave In)·MISO(Master In Slave Out)·SS/CS(Slave Select·active-low).
- 동기·full-duplex: 매 클럭마다 MOSI 송신·MISO 수신이 동시에. 보통 MSB first. 속도는 수십 MHz~100MHz+로 셋 중 가장 빠름.
- 슬레이브 선택 = CS(주소 없음). 다중 슬레이브: 독립 CS(슬레이브마다 CS선·핀↑) 또는 데이지체인(직렬 연결·CS 1개 공유·핀 절약하나 지연·복잡).
- 표준 부재: Motorola de-facto → 데이터시트마다 모드·비트순서가 달라 꼭 확인. ACK·패리티 없음(에러검출은 상위 SW).
CPOL/CPHA → 4 모드 — CPOL=idle 클럭 레벨, CPHA=샘플 에지(0=첫 에지/1=둘째 에지):
| 모드 | CPOL | CPHA | 클럭 idle | 샘플(캡처) 에지 |
|---|---|---|---|---|
| 0 | 0 | 0 | Low | 상승(leading) |
| 1 | 0 | 1 | Low | 하강(trailing) |
| 2 | 1 | 0 | High | 하강(leading) |
| 3 | 1 | 1 | High | 상승(trailing) |
가장 흔한 건 모드 0, 다음이 모드 3(둘 다 상승에지 샘플). 마스터·슬레이브의 CPOL/CPHA가 일치해야 한다 — 불일치면 *1비트 밀림(bit-slip)*으로 전체 오독.
꼬리질문: "데이터시트엔 모드0인데 안 읽힌다면?" → CPOL/CPHA·비트순서(MSB/LSB)·클럭 속도(슬레이브 max 초과)·CS 타이밍 점검. / "슬레이브가 많아지면?" → 독립 CS는 핀 폭증 → 데이지체인·GPIO 디코더. / "SPI를 장거리로?" → 부적합(고속·근거리) → 차동(RS-485/CAN).
함정: ❌ "MISO가 마스터→슬레이브" → 반대(Master In). ❌ "SPI 모드 아무거나" → 양쪽 일치 필수. ❌ "CS는 active-high" → 보통 active-low.
3. I2C — 2선 멀티마스터 (★★★ 최다 빈출·NXP UM10204)
실제 질문: "I2C 풀업 저항이 왜 필요한가?"(최빈출) · "I2C 구성·특징은?" · "클럭 스트레칭이 뭔가?" · "같은 주소 센서 2개면?" · "풀업 값은 어떻게 정하나?" (velog @verilog·ktword·basic4mcu)
- 2선: SDA(데이터)·SCL(클럭) — 둘 다 양방향·오픈드레인·half-duplex.
- 풀업 저항 필수 (★ 왜): 오픈드레인 출력은 라인을 Low로 당기기만 가능하고 High는 못 만든다(float) → 풀업 저항이 VDD로 끌어올려 High를 만든다. 풀업이 없으면 라인이 High로 못 올라가 통신 불가. 이 구조가 wired-AND(누구든 Low로 당기면 Low) → 충돌 없이 다중 마스터·슬레이브 공유·아비트레이션·클럭 스트레칭이 가능.
- 속도 모드: Standard 100kbps · Fast 400kbps · Fast+ 1Mbps · High-speed 3.4Mbps.
- 프로토콜: SCL High 동안 SDA High→Low = START, Low→High = STOP. 데이터는 SCL Low일 때만 SDA 변화·SCL High에서 샘플. 8비트마다 9번째 클럭에 수신측이 SDA Low = ACK, High = NACK.
- 주소: 7비트(또는 10비트)·16개 예약 → 112개. 클럭 스트레칭: 슬레이브가 처리 시간이 필요하면 SCL을 Low로 붙잡아 마스터를 대기시킴.
- 멀티마스터 아비트레이션: 동시 송신 시 자기는 High를 냈는데 라인이 Low로 읽히는 마스터가 패배(버스 양보) — wired-AND 덕에 데이터 손상 없이 결정론적.
풀업 값(꼬리질문 단골) — NXP UM10204: Rp(min)=(VDD−VOL)/IOL(너무 작으면 디바이스가 Low로 못 당김)·Rp(max)=t_rise/(0.8473·C_bus)(너무 크면 상승이 느려 High를 못 만듦). 버스 커패시턴스 한계 400pF(Std/Fast). 트레이드오프: 작게→빠름·전류↑ / 크게→저전력·신호 둥글어짐. 흔히 Std 10kΩ·Fast 2~4.7kΩ.
꼬리질문: "같은 주소 센서 2개면?" → 주소 핀(A0/A1) 변경·I2C 멀티플렉서(TCA9548A)·버스 분리. / "SDA가 Low에 붙어 멈췄다면?" → 슬레이브 hang → 클럭 9펄스로 bus recovery·리셋. / "장거리 I2C?" → 부적합 → 버스 익스텐더·차동 전환.
함정: ❌ "풀업 없어도 동작" → 불가. ❌ "I2C는 full-duplex" → half-duplex(SDA 1선). ❌ "클럭 스트레칭은 마스터가" → 슬레이브가 SCL을 붙잡음(일부 컨트롤러 미지원이 버그 원인).
4. UART vs SPI vs I2C — 언제 무엇을 (★★★ 거의 항상 물음)
| 항목 | UART | SPI | I2C |
|---|---|---|---|
| 선 수 | 2(TX/RX) | 4(+슬레이브당 CS) | 2(SDA/SCL) |
| 클럭 | 비동기 | 동기(SCLK) | 동기(SCL) |
| 듀플렉스 | Full | Full | Half |
| 토폴로지 | 점대점 | 1마스터-N슬레이브 | 멀티마스터·멀티슬레이브 |
| 선택 | — | CS(주소 없음) | 7/10bit 주소 |
| 속도 | ~115200bps | 수십 MHz+ | 100k/400k/1M/3.4M |
| 풀업 | 불필요 | 불필요(push-pull) | 필수(오픈드레인) |
| ACK | 없음 | 없음 | 있음 |
- SPI = 고속·근거리·핀 여유 → 디스플레이·SD카드·ADC·플래시. full-duplex 필요 시.
- I2C = 핀 절약·다중 센서·저속 → 온습도/가속도 센서·EEPROM·RTC. "핀 부족한데 센서 5개" → I2C.
- UART = 점대점·간단·디버깅 콘솔·MCU 간. 장거리는 RS-485 트랜시버로.
함정: ❌ "I2C가 SPI보다 빠르다" → 보통 SPI가 빠름. ❌ "SPI가 핀 효율적" → I2C가 핀 효율적(2선 고정·SPI는 CS만큼 증가). ❌ "셋 다 멀티마스터" → I2C만 멀티마스터·아비트레이션 내장.
5. 통신 디버깅 — 실무 (★ 자주 물음)
- 로직 애널라이저·오실로스코프: 파형으로 start/stop·비트 폭·ACK/NACK·CS 타이밍을 눈으로. UART 깨짐 → 1비트 폭 측정해 실제 보레이트 역산. I2C 멈춤 → SDA가 Low에 붙었는지.
- 체크리스트: 접지 공통? 전압 레벨(TTL/RS-232) 일치? I2C 풀업 유무·값? SPI 모드·비트순서? 보레이트·클럭 속도 슬레이브 max 이내?
한국 임베디드 면접 단골 Q&A (답변 골격)
| 질문 | 핵심 답 |
|---|---|
| UART vs USART | USART는 동기 모드(클럭선) 옵션도 — UART는 비동기 전용 |
| 비동기 동기화 | 보레이트 합의 + start/stop bit |
| 보레이트 불일치 | ±2~3% 초과 시 framing error·글자 깨짐 |
| SPI 핀 | SCLK·MOSI·MISO·SS(active-low) |
| SPI 모드 | CPOL(idle)·CPHA(샘플 에지)→4모드·양쪽 일치 |
| SPI 다중 슬레이브 | 독립 CS or 데이지체인 |
| I2C 풀업 왜 | 오픈드레인→풀업이 High 생성·wired-AND |
| I2C 속도 | 100k/400k/1M/3.4M |
| 클럭 스트레칭 | 슬레이브가 SCL Low로 붙잡아 대기 |
| 주소 충돌 | A0/A1 핀·I2C 먹스·버스 분리 |
| 셋 중 선택 | 고속=SPI·핀절약/다중=I2C·점대점=UART |
꼬리질문 대비 (상 난이도)
- "I2C 풀업 값 어떻게?" → Rmin=(VDD−VOL)/IOL·Rmax=t_rise/(0.8473·C_bus)·400pF 한계·속도/전력 trade-off.
- "SPI 모드0/3을 왜 흔히?" → 둘 다 상승에지 샘플이라 다루기 쉬움·양쪽 일치 필수.
- "셋 다 안 맞는 장거리·노이즈?" → 차동 신호(RS-485·CAN)(07편).
- "I2C 멀티마스터 충돌?" → 아비트레이션(High 낸 쪽이 Low 읽으면 패배)·wired-AND로 무손상.
- "UART 다중 장치?" → 기본 점대점 → RS-485 멀티드롭·주소 프로토콜 필요.
한 줄 요약 — UART(비동기·2선·점대점·8N1·보레이트 ±2~3%·USART는 동기 옵션)·SPI(동기·4선·full-duplex·고속·CS로 선택·CPOL/CPHA 4모드·양쪽 일치)·I2C(2선·half-duplex·오픈드레인→풀업 필수·wired-AND·7bit 주소·100k~3.4M·클럭 스트레칭은 슬레이브). 선택은 고속=SPI·핀 절약/다중 센서=I2C·점대점 간단=UART, 장거리·노이즈는 차동(RS-485/CAN). 함정 3대장: UART 클럭선 없음·SPI 주소 없음(CS)·I2C 풀업 필수.
(출처 — 한국 면접 기출·1차자료 교차검증 2026-06: velog @verilog Firmware 직무적성·melonicedlatte UART/I2C/SPI·ktword I2C 오픈드레인·풀업 · 1차자료: NXP UM10204 I2C-bus specification Rev.7·Total Phase — SPI 모드/I2C 풀업 계산·Analog Devices — SPI·RS-232·Wikipedia — SPI/I²C 교차검증.)