본문 바로가기
Embedded System/통신

[통신] SPI(Serial Peripheral Interface)

by MachineJW 2023. 3. 14.

https://randomnerdtutorials.com/esp32-spi-communication-arduino/

1. 개요

SPI(Serial Peripheral Interface) 통신은 클럭(SCK), DATA OUT, DATA IN 신호로  통신되는 방식이다.

I2C는 풀업저항이 반드시 필요했으나, SPI는 이런 제약이 없고 최대 60Mbps 까지의 고속통신이 가능하다.

SPI는 시스템 내부의 IC들 간에 데이터 교환용도로 많이 사용되고 있으며, 많은 MCU도 SPI 통신을 할 수 있도록 GPIO에서 SPI 인터페이스를 제공하고 있다.

I2C와 마찬가지로 클럭 신호에 동기하는 방식으로 동기식 시리얼 통신 방식이며 입/출력 데이터 라인 (RX/TX) 신호가 구분되어 데이터의 송/수신을 동시에 할 수 있는 전이중(Full Duplex) 방식이다.

2. 신호 라인

https://randomnerdtutorials.com/esp32-spi-communication-arduino/
https://randomnerdtutorials.com/esp32-spi-communication-arduino/#multiple-spi-peripherals

 

SPI 통신은 하나의 마스터(Master) 장치여러개의 슬레이브(Slave) 장치를 연결할 수 있다.

슬레이브가 늘어날때마다 CS핀이 늘어난다.

SPI 통신을 사용하기 위해서는 4가지의 필수적인 신호라인 구성이 필요하다.

(1) CS (Chip Select, Slave Select = SS 라고도 함)

SPI통신은 Active LOW인 CS 신호로  해당 IC를 선택하여, 선택된 슬레이브만 응답할 수 있도록 한다.

슬레이브 디바이스들 중에는 이 신호를 통신의 시작으로 인식하여 동작하는 경우도 있다.

I2C가 슬레이브 고유의 주소로 선택되어 동작하듯이 SPI는 CS 신호로 슬레이브가 선택되는 형태로

즉, 슬레이브가 늘어날때마다 마스터 입장에서는 CS핀의 갯 수가 늘어나게 된다.(위의 두번째 그림 참조)

(2) SCK (Serial Clock)

클럭 신호이며 이 신호에 동기되어 데이터를 송/수신 한다.

(3) MOSI(Master Out Slave In, Serial Data In = SDI 라고도 함)

마스터가 출력하고 슬레이브가 입력받는 신호라인을 의미한다. 마스터의 입장에서는 데이터를 출력하는 것이고 슬레이브의 입장에서는 데이터를 입력하는 라인이다.

(4) MISO(Master In Slave Out, Serial Data Out = SDO 라고도 함)

마스터가 입력이고 슬레이브가 출력인 라인으로써, 마스터의 입장에서는 데이터를 입력받고 슬레이브의 입장에서는 데이터를 출력하는 라인이 된다.

3. 데이터 취득 모드

SPI는 데이터의 취득 시점을 설정할 수 있도록 4가지 모드를 제공하고 있다.

마스터/슬레이브가 동일한 모드를 사용해야 오류없는 데이터교환을 할 수 있기 때문에 SPI 통신에서 이 통신 모드의 확인은 필수 적이다.

 

https://docs.tizen.org/iot/guides/peripheral-io-api-spi/

(1) CPOL(Clock Polarity)

클럭의 기본상태, 통신을 하지 않는 상태에서의 신호레벨을 정의하는 설정이다.

CPOL이 0이면 LOW가 기본상태가 된다.

(2) CPHA(Clock Phase)

데이터를 취득하는 클럭의 변이 단계를 정의한다. 

변이 단계는 HIGH → LOW , LOW → HIGH 와는 상관없이 신호가 변하는 갯 수 이다.

CPHA가 1이면 클럭의 두 번째 변이 단계에서 데이터를 취득하는 것을 의미하고

0이면 첫번 째 클럭의 변이 단계에서 데이터를 취득하는 것을 의미한다.