직렬 주변기기 인터페이스 버스

직렬 주변기기 인터페이스 버스(Serial Peripheral Interface Bus) 또는 SPI 버스는 아키텍처 전이중 통신 모드로 동작하는 모토로라 아키텍처에 이름을 딴 동기화 직렬 데이터 연결 표준이다. 장치들은 마스터 슬레이브 모드로 통신하며 여기서 마스터 장치는 데이터 프레임을 초기화한다. 여러 슬레이브 장치들은 개별 슬레이브 셀렉트 (칩 셀렉트) 라인과 함께 동작할 수 있다.

인터페이스 
SPI 버스는 4가지 논리 신호를 지정한다:
 SCLK: 직렬 클럭 (마스터로부터의 출력)
 MOSI; SIMO: 마스터 출력, 슬레이브 입력 (마스터로부터의 출력)
 MISO; SOMI: 마스터 입력, 슬레이브 출력 (슬레이브로부터의 출력)
 SS: 슬레이브 셀렉트 (active low, 마스터로부터의 출력).

그 밖의 호환되는 이름으로는 다음과 같이 쓰인다:
 SCLK - SCK; CLK: 직렬 클럭 (마스터로부터의 출력)
 MOSI - SDI; DI, DIN, SI: 직렬 데이터 입력; 데이터 입력, 직렬 입력
 MISO - SDO; DO, DOUT, SO: 직렬 데이터 출력, 데이터 출력, 직렬 출력
 SS - nCS, CS, CSB, CSN, nSS, STE: 칩 셀렉트, 슬레이브 전송 기능 이용 (active low, 마스터로부터의 출력)

통신 개요 
마스터가 SS를 통해 신호를 전송할 슬레이브를 선택한다. 마스터는 MOSI를 통해서 SCLK에 동기화된 신호를 전송한다. 슬레이브는 SS을 통해서 신호를 수신할 수 있게 활성화되어 있는 상태에서 자신(슬레이브)의 MOSI를 통하여 전달되는 신호를 SCLK 에 맞춰 수신한다. SCLK에 동기화된 MOSI 신호는 8비트나 16비트, 또는 그 이상의 비트로 조합되어 유의미한 데이터로 사용된다.

SPI를 사용하여 통신하는 프로토콜은 몇 가지 인터페이스로 나뉜다.
 모토로라 SSP 호환 인터페이스
 전이중, four-wire 동기 전송
 프로그래밍 가능한 clock polarity 및 phase
 내셔널 세미컨덕터 마이크로와이어 인터페이스
 8비트 제어 메시지를 이용한 반이중 전송
 텍사스 인스트루먼츠 동기 직렬 인터페이스
 전이중, four-wire 동기 전송
 Transmit data pin tristateable when not transmitting.

모토로라 SSP 호환 인터페이스는 Polarity와 Phase로 신호를 서로 송신하는 프로토콜이 조절할 수 있다.
Polarity와 Phase를 조합하면 4가지 방식이 가능하다.
 Motorola SSP Format with SPO=0, SPH=0
 Motorola SSP Format with SPO=0, SPH=1
 Motorola SSP Format with SPO=1, SPH=0
 Motorola SSP Format with SPO=1, SPH=1

SPO(Signal Polarity)와 SPH(Signal Phase)변경하면 다음과 같은 약속의 효과가 있다.
 polarity Control 설정이 LOW인 경우 SCLK가 LOW 인 구간에 의미있는 신호가 출력된다.
 polarity Control 설정이 HIGH인 경우 SCLK가 HIGH 인 구간에 의미있는 신호가 출력된다.
 phase control 설정이 LOW인 경우 SCLK가 첫 번째 변화(엣지)시점에서 신호를 수신(Capture)한다.
 phase control 설정이 HIGH인 경우 SCLK가 두 번째 변화(엣지)시점에서 신호를 수신(Capture)한다.

사례
 SPO가 0, SPH가 1인경우
SPI CLOCK가 LOW상태에서 SS가 HIGH에서 LOW가 되고 SPI_CLOCK이 HIGH로 올라가면서 동시에 MOSI가 활성화된다. SPI CLOCK 이 절반나갔을 때부터 유효 데이터로 인정되고 SPI CLOCK 이 떨어지는(폴링엣지)시점에 의미있는 신호가 데이터로서 수신된다(Capture)
 SPO가 1, SPH가 1인경우
SPI CLOCK가 HIGH상태에서 SS가 HIGH에서 LOW가 되고 SPI_CLOCK이 LOW로 떨어지면서 동시에 MOSI가 활성화된다. SPI CLOCK 이 절반나갔을 때부터 유효 데이터로 인정되고 SPI CLOCK 이 올라가는(라이징엣지)시점에 의미있는 신호가 데이터로서 수신된다(Capture)

모드 번호

SPI의 장단점

장점 
 완전한 전이중 통신
 전송되는 비트에 대한 완전한 프로토콜 유연성
 전송기가 필요하지 않음
 매우 단순한 하드웨어 인터페이스 처리
 IC 패키지에 4개의 핀만 사용하며 이는 병렬 인터페이스에 비해 수가 적은 것이다.

단점 
 하드웨어 슬레이브 인식이 없음
 슬레이브에 의한 하드웨어 흐름 제어가 없음
 오류 검사 프로토콜이 정의되어 있지 않음
 일반적으로 노이즈 스파이크에 영향을 받는 경향이 있음 (통신 문제를 일으킬 수 있음)
 RS-232, RS-485, CAN 버스보다 비교적 더 짧은 거리에서 동작
 하나의 마스터 장치만 지원

같이 보기 
 관련 단자
 시큐어 디지털 -SD, SDHC, SDXC 카드
 UART
 I2C

외부 링크 
  wikipedia SPI (영어)
  SPI, I2C 프로토콜 소개 
  직렬 버스 정보 문서
  SPI 소개 (다이어그램 포함)
  시리얼 플래시 - SPI 제조업체 및 모델 정보
  SPI - PICmicro 직렬 주변기기 인터페이스, SPI에 대한 마이크로칩 (기업) 강좌
  OpenCores SPI의 오픈 소스 (Verilog); 더 단순한 MC68HC11 버전
  SPI flash memory controller, HDL 디자인 하우스

직렬 버스
컴퓨터 버스