05. SPI 통신을 알아보자.

owljun·2025년 7월 27일

SPI (Serial Peripheral Interface)

SPI는 직렬 주변 장치 인터페이스(Serial Peripheral Interface)의 약자로, 마스터와 슬레이브 장치 간의 고속, 동기식 직렬 통신에 사용되는 프로토콜입니다. 일반적으로 4개의 핀을 사용하며, 각 핀의 역할은 다음과 같다.

  • SCLK (Serial Clock): 마스터가 생성하는 클럭 신호입니다. 이 클럭 신호에 맞춰 데이터 송수신이 동기화됩니다.
  • MOSI (Master Out Slave In): 마스터에서 슬레이브로 데이터가 전송되는 라인입니다. 마스터는 이 핀으로 데이터를 송신한다.
  • MISO (Master In Slave Out): 슬레이브에서 마스터로 데이터가 전송되는 라인입니다. 마스터는 이 핀으로 데이터를 수신한다.
  • CS(SS) (Chip Select / Slave Select): 마스터가 특정 슬레이브 장치를 선택하고 활성화/비활성화하는 데 사용되는 신호, 이 핀이 Low(Active Low)가 되면 해당 슬레이브가 마스터와의 통신을 준비한다.

SPI는 4개의 핀을 사용하여 통신하며, I2C와 유사하게 마스터-슬레이브 구조를 통해 여러 장치와 통신할 수 있다. 하지만 I2C처럼 주소(Address) 방식이 아닌 각 슬레이브의 CS 핀을 이용해 선택한다는 차이가 존재. 또한, USART(UART)와는 달리 클럭 신호(SCLK)를 함께 사용하여 동기식 통신을 수행한다는 점이 특징. 이 세 가지 프로토콜의 주요 차이점을 비교하며 SPI의 특징을 자세히 알아보자.


SPI의 장점

  • 안정적인 고속 통신: 클럭 신호(SCLK)를 마스터가 직접 생성하여 데이터를 동기화하므로, I2C나 비동기식 USART(UART)보다 훨씬 안정적이고 빠른 고속 통신이 가능, (일반적으로 수십 Mbps 이상) 클럭이 함께 가기 때문에 타이밍 오류 발생 가능성이 낮아진다.
  • 전이중(Full-Duplex) 통신 지원: MOSI와 MISO 핀이 각각 송신과 수신을 전담하므로, 동시에 양방향 데이터 전송이 가능합니다. 이는 I2C가 SDA 핀 하나로 송수신을 처리하여 반이중(Half-Duplex) 통신만 가능한 것과 대조됨.
  • 간단한 하드웨어 구현: 슬레이브 측에서는 복잡한 주소 디코딩 로직이 필요 없어 비교적 간단하게 구현될 수 있다.

SPI의 단점

  • 많은 핀 사용 및 복잡한 배선: 기본적으로 4개의 핀(SCLK, MOSI, MISO, CS)을 사용하며, 특히 여러 개의 슬레이브 장치와 통신할 경우 각 슬레이브마다 별도의 CS(SS) 핀이 필요하여 마이크로컨트롤러의 GPIO 핀 소모가 커지고 배선이 복잡해질 수 있다. (I2C는 2개의 핀으로 여러 슬레이브 통신 가능)
  • 응답(ACK/NACK) 메커니즘 부재: 내장된 데이터 응답(ACK/NACK) 메커니즘이 없어, 데이터 전송 성공 여부를 하드웨어적으로 직접 확인하기 어렵다. 오류 감지 및 처리는 주로 상위 소프트웨어 레벨에서 구현해야 함.
  • 마스터 단일화 및 거리 제약: 일반적으로 단일 마스터 시스템에 적합하며, 여러 마스터가 하나의 SPI 버스를 공유하기 어렵다. 또한, 비교적 짧은 거리(보드 내) 통신에 적합하며, 장거리 통신 시 노이즈에 취약할 수 있다.

통신 방식

SPI 통신은 마스터와 슬레이브 양쪽에 있는 시프트 레지스터(Shift Register)를 통해 이루어진다. 마스터가 SCLK 신호를 생성하면, 이 클럭 신호에 동기화되어 MOSI 라인을 통해 마스터의 데이터가 슬레이브로 1비트씩 이동하고, 동시에 MISO 라인을 통해 슬레이브의 데이터가 마스터로 1비트씩 이동합니다. 즉, 데이터는 클럭 신호에 맞춰 매 비트마다 교환되는 방식.

이는 마치 양방향으로 연결된 컨베이어 벨트와 같다. 마스터가 데이터를 실어 보내는 동안, 슬레이브도 동시에 자신의 데이터를 마스터에게 보낼 수 있다.


출처 : https://aliencoder.tistory.com/92

SPI 통신 설정에서 중요한 것은 클럭 극성(CPOL: Clock Polarity)클럭 위상(CPHA: Clock Phase)이다. 이 두 가지 설정에 따라 SCLK 핀이 유휴 상태일 때의 레벨과 데이터 샘플링 시점이 결정되며, 총 4가지 SPI 모드(Mode 0~3)가 존재한다. 통신하는 마스터와 슬레이브는 동일한 SPI 모드로 설정되어야 정상적인 통신이 가능하다.

  • CPOL (Clock Polarity): 유휴 상태(데이터 전송이 없을 때)의 SCLK 레벨을 정의. (0: Low, 1: High)
  • CPHA (Clock Phase): 데이터를 클럭의 첫 번째 엣지(Edge)에서 샘플링할지, 두 번째 엣지에서 샘플링할지를 정의. (0: 첫 번째 엣지, 1: 두 번째 엣지)

요약

  • SPI는 마이크로컨트롤러와 주변 장치 간에 데이터를 주고받는 고속, 동기식 직렬 통신 프로토콜임.

  • 핵심 특징:

    • 4개의 전용 핀 사용:

      SCLK (Serial Clock): 마스터가 생성하는 클럭 신호로, 데이터 동기화에 사용됨.
      MOSI (Master Out Slave In): 마스터가 슬레이브로 데이터를 보내는 라인임.
      MISO (Master In Slave Out): 슬레이브가 마스터로 데이터를 보내는 라인임.
      CS/SS (Chip Select/Slave Select): 마스터가 특정 슬레이브를 활성화하여 통신할 때 사용함.

    • 마스터-슬레이브 구조: 마스터가 통신을 주도하며, CS 핀을 통해 여러 슬레이브 중 하나를 선택하여 통신할 수 있음.

    • 동기식 통신: 클럭 신호를 함께 보내기 때문에 정확한 타이밍으로 데이터를 주고받을 수 있음.

  • 장점:

    • 매우 빠른 고속 통신: 클럭 동기화 덕분에 I2C나 비동기식 USART(UART)보다 훨씬 빠른 속도로 데이터를 전송할 수 있음.
    • 전이중(Full-Duplex) 통신: MOSI와 MISO 라인을 통해 데이터를 동시에 양방향으로 주고받을 수 있어 효율적임.
    • 간단한 하드웨어 구현: 슬레이브 장치에 복잡한 주소 지정 로직이 필요 없어 비교적 단순하게 설계됨.
  • 단점:

    • 많은 핀 사용 및 복잡한 배선: 기본적으로 4개의 핀이 필요하며, 슬레이브 장치가 늘어날수록 CS 핀이 추가되어 마이크로컨트롤러의 핀 소모가 커지고 배선이 복잡해질 수 있음.
    • ACK/NACK 부재: I2C처럼 하드웨어적인 데이터 수신 확인(ACK/NACK) 메커니즘이 없어, 오류 감지 및 처리는 소프트웨어 레벨에서 구현해야 함.
    • 단일 마스터 중심: 여러 마스터가 하나의 SPI 버스를 공유하는 것이 어려움.
  • 통신 방식:

    • 마스터와 슬레이브의 시프트 레지스터를 통해 SCLK 클럭에 맞춰 데이터가 1비트씩 동시 교환됨. 통신 시 마스터와 슬레이브는 클럭 극성(CPOL)클럭 위상(CPHA)을 동일하게 설정해야 하며, 이 조합에 따라 4가지 SPI 모드(Mode 0~3)가 결정됨.
  • 활용 분야:

    • 주로 SD 카드, 플래시 메모리, LCD 디스플레이, 고속 센서, ADC/DAC 등 고속의 데이터 교환이 필요한 근거리 임베디드 장치 통신에 널리 사용됨.
profile
Embedded S/W Developer :)

0개의 댓글