본문 바로가기
하만 세미콘 아카데미/Verilog HDL

SPI 통신 이론 & 실습

by smileww 2024. 6. 25.

SPI (Serial Peripheral Interface) 통신은 마이크로컨트롤러와 주변 장치 간의 정보 교환을 위해 사용되는 프로토콜입니다. 이 통신 방식을 이해하기 위해, 일상생활에서 쉽게 접할 수 있는 비유를 사용해 설명해보겠습니다.

SPI 통신의 기본 구조

마스터와 슬레이브의 관계를 생각해 볼 때, 음식점에서의 웨이터와 요리사의 상호작용으로 생각할 수 있습니다. 이 비유에서, 마스터는 웨이터가 되며, 슬레이브는 요리사가 됩니다.

  1. **웨이터(마스터)**는 주문을 받아 요리사(슬레이브)에게 전달합니다. 이는 MOSI (Master Out Slave In) 라인을 통해 데이터가 마스터에서 슬레이브로 전송되는 것과 동일합니다.
  2. **요리사(슬레이브)**는 주문받은 음식을 준비하여 웨이터에게 전달합니다. 이는 MISO (Master In Slave Out) 라인을 통해 슬레이브에서 마스터로 데이터가 전송되는 것과 동일합니다.
  3. 웨이터는 모든 테이블을 돌면서 주문을 확인하고, 주문에 따라 특정 요리사에게 요리를 지시합니다. 이는 CS (Chip Select) 신호를 통해 마스터가 특정 슬레이브를 선택하는 과정과 비슷합니다. CS 신호가 활성화되면(낮은 전압), 해당 슬레이브는 주문(데이터 전송)을 받을 준비가 된 것입니다.
  4. 웨이터가 요리를 요청할 때마다 요리사에게 어떻게 요리해야 하는지 명확하게 설명해 주는 것은 SCLK (Serial Clock) 신호가 데이터 전송을 동기화하는 역할과 유사합니다. 클록 신호는 마스터(웨이터)가 제공하며, 데이터의 샘플링(주문 읽기/요리 시작) 시점을 정의합니다.

클록의 극성(CPOL)과 위상(CPHA)

클록의 극성과 위상은 데이터를 언제 읽고 쓸지 결정하는 중요한 설정입니다. 이를 쉽게 이해하기 위해, 웨이터가 요리사에게 주문을 전달하는 방식으로 설명할 수 있습니다:

 

CPOL (Clock Polarity, 클록 극성): 웨이터가 주방에 들어갔을 때 요리사가 대기하는 상태 (유휴 상태).

  • CPOL=0: 요리사가 주문을 받을 준비가 되어 있지 않음 (유휴 상태에서 낮음).
  • CPOL=1: 요리사가 주문을 받을 준비가 되어 있음 (유휴 상태에서 높음).

CPHA (Clock Phase, 클록 위상): 웨이터가 주문을 전달하는 시점.

  • CPHA=0: 웨이터가 주방에 들어서자마자 요리사에게 주문을 전달합니다 (첫 번째 클록 에지).
  • CPHA=1: 웨이터가 주방에 들어가서 잠시 후 요리사에게 주문을 전달합니다 (두 번째 클록 에지).

SPI 모드

각기 다른 클록 설정은 다양한 주방 환경에서의 요리사와 웨이터의 상호작용을 나타냅니다:

  • 모드 0: 요리사가 준비되지 않은 상태에서 웨이터가 들어오자마자 주문을 받습니다.
  • 모드 1: 요리사가 준비되지 않은 상태에서 웨이터가 잠시 후 주문을 전달합니다.
  • 모드 2: 요리사가 준비된 상태에서 웨이터가 들어오자마자 주문을 받습니다.
  • 모드 3: 요리사가 준비된 상태에서 웨이터가 잠시 후 주문을 전달합니다.

실제 예

웨이터가 특정 테이블에 가서 주문을 받고, 주방에 가서 요리사에게 해당 주문을 전달하면 요리사는 그 주문에 따라 음식을 준비하여 웨이터를 통해 손님에게 제공합니다. 이 과정 중에 웨이터는 다른 테이블의 주문도 받을 수 있으며, 여러 요리사가 동시에 다른 요리를 준비할 수 있습니다. 이는 SPI 통신의 풀 듀플렉스 기능과 동기식 클록을 통한 데이터 전송의 효율성을 잘 보여줍니다.

이러한 비유를 통해 SPI 통신의 복잡한 개념들을 좀 더 쉽게 이해할 수 있으며, 마스터와 슬레이브 간의 데이터 전송 방법을 보다 명확하게 파악할 수 있습니다.

 

 

좀 더 자세히 알아보면 SPI (Serial Peripheral Interface)는 마이크로컨트롤러와 주변 장치 사이의 데이터 통신에 널리 사용되는 동기식, 풀 듀플렉스 통신 방식입니다. SPI는 빠른 데이터 전송 속도와 간단한 연결 방식을 제공하여 센서, 메모리, ADC, DAC 등 다양한 장치와 효과적으로 통신할 수 있습니다.

SPI의 주요 구성 요소 및 신호

  • MOSI (Master Out Slave In): 마스터에서 슬레이브로 데이터를 전송하는 라인입니다.
  • MISO (Master In Slave Out): 슬레이브에서 마스터로 데이터를 전송하는 라인입니다.
  • SCLK (Serial Clock): 마스터가 생성하며 데이터 전송을 동기화하는 클록 신호입니다.
  • CS (Chip Select): 슬레이브를 선택하기 위한 신호로, 일반적으로 활성 낮음(Active Low) 상태입니다.

SPI 통신의 특징

  • 동기식 통신: 데이터 전송은 클록 신호에 맞추어 동기화됩니다.
  • 풀 듀플렉스: 마스터와 슬레이브가 동시에 데이터를 송수신할 수 있습니다.
  • 클록 극성과 위상: 데이터의 샘플링과 전송 시점을 조절하기 위해 클록의 극성(CPOL)과 위상(CPHA)을 설정할 수 있습니다.

클록 극성(CPOL)과 클록 위상(CPHA)

CPOL (Clock Polarity)

  • CPOL=0: 클록의 유휴 상태가 낮음 (Logic Low).
  • CPOL=1: 클록의 유휴 상태가 높음 (Logic High).

CPHA (Clock Phase)

  • CPHA=0: 클록의 첫 번째 에지(주로 상승 에지)에서 데이터를 샘플링.
  • CPHA=1: 클록의 두 번째 에지(주로 하강 에지)에서 데이터를 샘플링.

SPI 모드

SPI 통신은 CPOL과 CPHA의 조합에 따라 4가지 모드로 설정될 수 있습니다:

  • 모드 0 (CPOL = 0, CPHA = 0): 클록이 낮은 유휴 상태에서 시작하고, 상승 에지에서 데이터를 샘플링합니다.
  • 모드 1 (CPOL = 0, CPHA = 1): 클록이 낮은 유휴 상태에서 시작하고, 하강 에지에서 데이터를 샘플링합니다.
  • 모드 2 (CPOL = 1, CPHA = 0): 클록이 높은 유휴 상태에서 시작하고, 상승 에지에서 데이터를 샘플링합니다.
  • 모드 3 (CPOL = 1, CPHA = 1): 클록이 높은 유휴 상태에서 시작하고, 하강 에지에서 데이터를 샘플링합니다.

마스터와 슬레이브 간의 통신 방법

예시: 온도 센서를 SPI를 통해 읽는 경우

설정

  • 마스터 클록 속도: 1MHz
  • SPI 모드: 모드 0 (CPOL = 0, CPHA = 0)

데이터 전송 시퀀스

  • 마스터는 CS 신호를 낮추어 특정 온도 센서(슬레이브)를 활성화합니다.
  • 마스터는 SCLK 클록을 생성하여 통신을 시작합니다.
  • 마스터는 MOSI 라인을 통해 명령어를 전송하여 온도 데이터를 요청합니다.
  • 슬레이브는 요청 받은 온도 데이터를 MISO 라인을 통해 마스터로 전송합니다.
  • 데이터 전송이 끝나면 마스터는 CS 신호를 다시 높게 설정하여 슬레이브와의 통신을 종료합니다.

온도 데이터 처리

  • 마스터는 받은 데이터를 처리하여 온도를 계산하고 디스플레이 또는 다른 시스템에 전송할 수 있습니다.

 

이 과정은 마스터가 클록 신호를 제어하면서 동시에 데이터를 송수신할 수 있기 때문에 매우 빠르고 효율적인 데이터 교환이 가능합니다. SPI의 풀 듀플렉스 특성은 마스터와 슬레이브가 동시에 데이터를 주고받을 수 있어, 양방향 통신이 필요한 응용에서 유리합니다.