임베디드 면접 용어 사전
시리얼 통신

SPI

SCK·MOSI·MISO·CS 4선 동기 통신. 전이중이고 빨라 센서·플래시에 쓰이며 CS로 슬레이브를 고른다.

클럭 선을 함께 보내는 동기식 4선 시리얼 통신(Serial Peripheral Interface).

신호선

SCLK  — 클럭 (마스터가 생성)
MOSI  — Master Out Slave In   (마스터 → 슬레이브)
MISO  — Master In Slave Out   (슬레이브 → 마스터)
CS/SS — Chip Select (슬레이브마다 하나씩, Active Low)

최신 문서는 COPI/CIPO 또는 SDO/SDI라는 명칭을 쓰기도 한다.

동작 — 시프트 레지스터 교환

마스터 [10110010] ──MOSI──► 슬레이브
       ◄──MISO──           [01001101]

클럭 한 번에 1비트씩, 양방향으로 동시에 교환된다
8클럭 후 두 레지스터의 내용이 서로 바뀌어 있다

전이중(full-duplex)이며, 송신과 수신이 항상 동시에 일어난다. 읽기만 하고 싶어도 무언가(더미 바이트)를 보내야 한다.

// 읽기만 할 때도 더미를 보낸다
HAL_SPI_TransmitReceive(&hspi, dummy, rx, len, TIMEOUT);

I2C·UART와의 비교

SPII2CUART
선 수4 + 슬레이브당 CS22
속도매우 빠름 (수십 MHz)100k~3.4M보통 ~1M
클럭있음있음없음
다중 슬레이브CS로 (선이 늘어남)주소로 (선 그대로)1:1
전이중
ACK없음있음없음
거리짧다 (보드 내)짧다길다

SPI에는 ACK가 없다. 슬레이브가 응답했는지 알 방법이 프로토콜에 없어, 데이터 자체에 검증을 넣어야 한다.

왜 빠른가

  • ① 클럭을 함께 보내므로 타이밍 오차 문제가 없다
  • ② 푸시풀 출력이라 신호 에지가 가파르다 (I2C는 오픈드레인이라 느리다)
  • ③ ACK나 주소 같은 오버헤드가 없다 — 순수 데이터만

수십 MHz가 가능해 SD 카드, 플래시 메모리, 디스플레이처럼 대량 데이터를 다루는 장치에 쓰인다.

다중 슬레이브 연결

① 독립 CS (일반적)

마스터 ─┬─ SCLK/MOSI/MISO ─┬─ 슬레이브1 ── CS1
        │                  ├─ 슬레이브2 ── CS2
        └──────────────────┴─ 슬레이브3 ── CS3

슬레이브가 늘어날수록 CS 핀이 필요하다

② 데이지 체인 마스터 MOSI → S1 MOSI, S1 MISO → S2 MOSI, S2 MISO → 마스터 MISO CS는 공유. 데이터가 사슬처럼 흘러간다

  • 핀은 절약되지만 지연이 누적되고 모든 슬레이브가 지원해야 한다

실무 주의점

① CS 타이밍

CS_LOW();
HAL_SPI_Transmit(&hspi, data, len, TIMEOUT);
CS_HIGH();     // ★ 전송이 완전히 끝난 뒤에 올려야 한다

HAL 함수가 반환됐어도 마지막 비트가 아직 시프트 중일 수 있다. DMA를 쓸 때 특히 문제가 되어, 완료 콜백에서 CS를 올려야 한다.

② MISO는 슬레이브가 비활성일 때 하이임피던스여야 한다

CS가 비활성인 슬레이브가 MISO를 계속 구동하면 버스가 충돌한다. 일부 저가 부품은 이것을 지키지 않아 버퍼나 별도 버스가 필요하다.

③ 클럭 속도 한계

슬레이브의 최대 클럭을 데이터시트에서 확인 배선이 길면 신호 무결성 때문에 더 낮춰야 한다 "가끔 데이터가 깨진다"면 클럭을 절반으로 낮춰 본다.

④ 모드 불일치

CPOL/CPHA가 다르면 완전히 엉뚱한 값이 읽힌다. 데이터시트에서 슬레이브가 요구하는 모드를 반드시 확인한다.

QSPI / Dual SPI

  • 표준 SPI : 데이터 선 1개 → 클럭당 1비트
  • Dual — : 2개 → 2비트
  • Quad — : 4개 → 4비트 ← 플래시 메모리에 널리 사용
  • Octal — : 8개

외부 플래시에서 코드를 직접 실행(XIP) 하려면 대역폭이 필요해 QSPI를 쓴다. 메모리 맵에 매핑되어 일반 포인터로 접근 가능해진다.

디버깅

로직 애널라이저가 가장 효과적 — 4선을 함께 보면 원인이 바로 보인다 ✓ CS가 제대로 내려가는가 ✓ 클럭 개수가 맞는가 (8의 배수) ✓ 데이터가 클럭의 어느 에지에 바뀌는가 → 모드 확인 ✓ MISO가 항상 High/Low면 → 슬레이브 미응답 (전원, CS, 모드 확인)

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 시리얼 통신 — UART/USART·SPI(CPOL/CPHA)·I2C(오픈드레인·풀업)·언제 무엇