SPI(Serial Peripheral Interface)는 마스터–슬레이브 구조의 동기식 직렬 통신 방식입니다. 임베디드 보드(Raspberry Pi, STM32, ESP32, Arduino 등)와 주변기기(센서, LCD, 플래시 메모리, ADC/DAC 등)를 연결할 때 가장 많이 쓰입니다. 핵심 요소를 정리하면:

🔹 기본 구성

  • Master: 클럭(SCK)을 생성하고 전송을 제어하는 쪽 (보통 MCU, SoC).
  • Slave: 마스터의 클럭에 맞춰 데이터 송수신 (보통 주변장치).
  • 버스 구조
    • SCK (Serial Clock) : 마스터 → 슬레이브로 클럭 제공
    • MOSI (Master Out, Slave In) : 마스터가 슬레이브로 데이터 전송
    • MISO (Master In, Slave Out) : 슬레이브가 마스터로 데이터 전송
    • CS/SS (Chip Select/Slave Select) : 특정 슬레이브 활성화 (Active Low)

🔹 특징

  • 동기식: 클럭(SCK)에 맞춰 데이터 비트가 전송됨.
  • 풀 듀플렉스: MOSI와 MISO 라인이 분리되어 있어 동시에 송수신 가능.
  • 빠른 속도: 수 MHz ~ 수십 MHz까지 가능 (I²C보다 빠름).
  • 단순 프로토콜: 시작/종료 비트, 주소 프레임이 없음 → CS로 구분.
  • 버스 확장성 제한: 슬레이브가 많아지면 CS 핀 수가 늘어남.

🔹 SPI 모드 (Mode 0~3)

SPI는 CPOL(Clock Polarity)CPHA(Clock Phase) 두 가지 파라미터로 동작 모드를 정의합니다.

모드CPOLCPHA클럭 Idle 상태샘플링 시점
0 0 0 Low 상승 에지에서 샘플링
1 0 1 Low 하강 에지에서 샘플링
2 1 0 High 하강 에지에서 샘플링
3 1 1 High 상승 에지에서 샘플링

👉 디바이스 데이터시트에서 요구하는 모드를 반드시 맞춰야 정상 통신됨.
예: ST7789 LCD → 일반적으로 Mode 3 필요.

🔹 전송 과정 예시 (1바이트)

  1. 마스터가 CS를 Low로 내려 특정 슬레이브 선택.
  2. 마스터가 SCK 클럭을 발생.
  3. MOSI를 통해 비트 단위 데이터 전송. 동시에 MISO에서 슬레이브 데이터 수신.
  4. 설정한 모드(클럭 극성/위상) 에 맞춰 각 비트 샘플링.
  5. 전송 종료 후 CS를 High로 올려 연결 해제.

🔹 장점

  • 단순하고 빠름 (I²C보다 속도 높음).
  • 풀 듀플렉스 지원.
  • 데이터 프레임 길이 유연 (8, 16, 24, 32bit 등 장치별 지정 가능).

🔹 단점

  • 슬레이브 수가 늘어나면 CS 핀 낭비.
  • 케이블 길이에 약함 (수십 cm 이상에선 신호 무결성 문제 발생).
  • 멀티마스터 구조가 복잡.

+ Recent posts