: 고속직렬통신 방식 중 하나로, 칩과 칩 간에(근거리) 데이터를 주고 받기 위한 통신방법이다.
하나의 마스터 기기와 하나 이상의 슬레이브 기기를 연결하여 사용한다.
SPI 통신은 클럭을 기준으로 구분하므로 SCK 선이 필요하다.
SPI 통신은 기본적으로 데이터 송신을 위한 2개의 선 + 클럭 선 1개, 칩 셀렉 선 1개로, 총 4개의 선이 필요하다.

SPI통신은 기본적으로 전이중방식을 사용한다. (반이중방식을 사용할 수도 있다.)
MOSI : MASTER OUT SLAVE IN, 마스터 -> 슬레이브 데이터 전송
MISO : MASTER IN SLAVE OUT, 슬레이브 -> 마스터 데이터 전송
SCK : 마스터가 생성한 클럭 신호
CS(SS) : 칩셀렉 선, 슬레이브를 선택하기 위한 선 (1 : N), 낮은신호 활성화
| 통신방식 | 데이터전송속도 | 전송방식 | 연결 라인 수 | 장점 | 단점 |
|---|---|---|---|---|---|
| SPI | 빠름 | 동기식 | 최소 4개 | 빠른속도, 전이중통신 | 연결라인 증가 |
| I2C | 보통 | 동기식 | 2개(SDA,SCL) | 라인수 적음, 멀티마스터가능 | 속도제한(최대 수백 KHz) |
| UART | 느림 | 비동기식 | 2개(TX,RX) | 간단한 하드웨어 구성 | 속도제한, 전이중 미지원 |
데이터 통신선 1개, SCK선 1개

FULL-DUPLEX : 전이중(최소 선 3개)
HALF-DUPLEX : 반이중(최소 선 2개)
RECEIVE ONLY : 수신전용(최소 선 2개)
TRANSMIT ONLY : 송신전용(최소 선 2개)
최소는 클럭을 사용하지 않는경우


cs를 어떻게 사용할 것인가? 하드웨어적으로 자동으로 low를 만들어주는 것
하지만 1 : 1에서만 사용이 가능하기 때문에 사용을 잘 하지 않는다

Frame Format : motorola = spi 통신기능을 만든 회사
Data Size : 8bits , 16bits : 한 번 데이터를 보낼 때 몇비트씩 보낼것인가(데이터 시트에 따라 결정이 된다)
Firsr Bit : MSB First, LSB First : 데이터를 0011 0100을 왼쪽(최상위)부터 보내는 방법(MSB), 오른쪽(최하위)부터 보내는 방법(LSB)

Prescaler(for Baud Rate), Baud Rate : 칩에관한 설정이므로 별로 상관없음
빠르면 좋지만 데이터시트에 속도제한이 있으니까 확인해야 함.
Clock Polarity : LOW, HIGH : 클럭의 기본값
Clock Phase : 1 Edge, 2 Edge : 1클럭에 엣지가 2개 있는데 무엇인지.

CRS Calculation : Disabled, enabled : spi와 관련된 것이 아님
NSS Signal Type : Software : gpio를 사용하겠다는 것