SPI (Serial Peripheral Interface)
동기식 직렬 통신(클럭 라인 사용)
4개의 핀 사용 :
SCK - 클럭 라인(마스터가 공급)
MISO - Master In / Slave Out
MOSI - Master Out / Slave In
SS - Slave Select (Slave마다 하나씩 필요, Master가 데이터를 받을 Slave를 선택)
MISO, MOSI, SS 모두 Idle상태가 HIGH이므로 SS에 Low 가 들어올때 해당
Slave가 데이터를 받을수있는상태가 된다
1:n(마스터1:슬레이브 다수)통신 가능, 마스터입장에서 송,수신선이 분리되어있으므로 데이터를 보내면서 동시에 받을수 있다(Full-Duplex)
1:1통신의 경우에는 슬레이브측의 SS를 Pull-down하여 항상 수신가능하게 하드웨어적으로 설정 가능(통신선 1개를 줄일수있음)
마스터에서 슬레이브로 데이터를 보낼때 시프트 레지스터의 MSB부터 한 비트씩 보내고 슬레이브로부터 MSB부터 한 비트씩 받는 방식으로 통신
위 그림에선 8비트 시프트 레지스터이므로 8클럭 이후에 마스터와 슬레이브의 시프트 레지스터에 저장된 값이 서로 바뀌어있을것
마스터에서 송신중 슬레이브로부터 수신되는 데이터가 필요없는경우 무시하면 된다
SPI 통신 방식으로 데이터를 송/수신 하는 과정에서 각 핀의 파형
마스터/슬레이브 모두 MSB부터 한 비트씩 송신하는것을 확인
SPO(Signal Polarity)와 SPH(Signal Phase)를 설정하여 SCK가 LOW일때, HIGH일때 의미있는 신호를 출력할지와 SCK의 상승엣지, 하강엣지에서 신호를 수신(Capture)할지 설정 가능
I2C와 SPI 통신의 장단점 비교
참고 자료 : garfieldfactory.tistory.com/entry/AVR%EC%97%90%EC%84%9C%EC%9D%98-SPI-%ED%86%B5%EC%8B%A0