직렬 주변기기 인터페이스 버스
1. 개요
직렬 주변기기 인터페이스(SPI) 버스는 마스터-슬레이브 방식으로 작동하며, 다양한 주변 장치 간의 직렬 통신을 위한 인터페이스이다. SPI는 SCLK(직렬 클럭), MOSI(마스터 출력, 슬레이브 입력), MISO(마스터 입력, 슬레이브 출력), SS(슬레이브 선택)의 4가지 신호를 사용하며, 클럭 극성(CPOL)과 클럭 위상(CPHA)을 조절하여 통신 방식을 설정한다. SPI는 멀티드롭, 데이지 체인, 확장 등 다양한 버스 토폴로지를 지원하며, QSPI, Microwire, 3선식, 듀얼/쿼드 SPI, eSPI 등 다양한 변형이 존재한다.
| 종류 | 직렬 통신 버스 |
|---|---|
| 설계 | 모토로라 |
| 데이터 스타일 | 전이중 직렬 |
| 데이지 체인 | 장치에 따라 다름 |
| 제조사 | 다양함 |
| 데이터 장치 | 멀티드롭 (칩 선택에 따라 제한됨). 데이지 체인 (무제한). |
| 데이터 비트 폭 | 1 비트 (양방향) |
| 고주파 여부 | 예 |
| MOSI | 마스터 출력, 서브 입력 |
| MISO | 마스터 입력, 서브 출력 |
| SCLK | 직렬 클럭 |
| 핀아웃 참고 | (핀은 대체 이름을 가질 수 있음) |
| 최대 전압 | 지정되지 않음 |
| 최대 전류 | 지정되지 않음 |
| 물리적 커넥터 | 지정되지 않음 |
| 디자인 날짜 | 1980년대 초반 경 |
| Serial Peripheral Interface (SPI) | 직렬 주변 장치 인터페이스 |
|---|
-
컴퓨터 버스 -
NMEA 0183
NMEA 0183은 선박용 GPS, 자동식별장치(AIS) 등 항해 장비에서 데이터를 송수신하는 데 사용되는 ASCII 기반의 직렬 통신 프로토콜로, RS-422 전기 표준을 사용하며, 문장 형태의 데이터를 통해 정보를 전달하고, 물리 계층, 데이터 링크 계층, 애플리케이션 계층의 3가지 레이어로 구성되어 다양한 소프트웨어에서 지원된다. -
컴퓨터 버스 -
인피니밴드
인피니밴드는 고성능 컴퓨팅 환경에서 서버, 스토리지, 네트워크 장치 간 고속 데이터 전송을 위한 직렬 통신 기술로, 슈퍼컴퓨터나 데이터 센터에서 주로 사용되지만 이더넷 기반 기술과의 경쟁 및 새로운 컴퓨팅 환경에 대한 적응이라는 과제를 안고 있다. -
직렬 버스 -
인피니밴드
인피니밴드는 고성능 컴퓨팅 환경에서 서버, 스토리지, 네트워크 장치 간 고속 데이터 전송을 위한 직렬 통신 기술로, 슈퍼컴퓨터나 데이터 센터에서 주로 사용되지만 이더넷 기반 기술과의 경쟁 및 새로운 컴퓨팅 환경에 대한 적응이라는 과제를 안고 있다. -
직렬 버스 -
하이퍼트랜스포트
하이퍼트랜스포트는 고성능 컴퓨터 시스템에서 CPU, 메모리, 칩셋 간의 연결을 고속으로 처리하기 위해 개발된 상호 연결 기술로, AMD CPU와 엔비디아 칩셋 등에 적용되어 시스템 효율성을 향상시키고 다양한 응용 분야에 활용되며 후속 기술의 기반이 되었다.
2. 인터페이스
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는 4개의 논리 신호를 가지며, 변형은 다른 이름을 사용하거나 다른 신호를 가질 수 있다.
주 장치의 MOSI는 서브 장치의 MOSI로 출력된다. 서브 장치의 MISO는 주 장치의 MISO로 출력된다.
각 장치는 직렬 통신을 위해 내부적으로 시프트 레지스터를 사용하며, 이는 함께 칩 간 원형 버퍼를 형성한다.
서브 장치는 장치가 선택되지 않은 경우 MISO 신호가 하이 임피던스 (전기적으로 분리됨)가 되도록 트라이 스테이트 출력을 사용해야 한다.
※MISO, MOSI, SS를 CIPO (컨트롤러 인 주변기기 아웃), COPI (컨트롤러 아웃 주변기기 인), CS (칩 셀렉트)로 바꿔 부르는 움직임도 있다.
하나의 마스터에 여러 슬레이브 장치를 연결할 때, SCK, MISO, MOSI의 3개 선은 공통으로 사용할 수 있다. SS만 슬레이브마다 독립적이지만, 마스터가 슬레이브를 구별할 필요가 없다면 예외이다. 슬레이브 장치가 하나뿐이거나, 구별할 필요가 없는 경우에는 SS를 생략하고 3개 선으로 연결할 수 있다. 이 경우 슬레이브 측 SS를 액티브(대개 LOW) 상태로 상시 연결한다.
3. 통신 개요
SPI 통신은 마스터-슬레이브 모델을 기반으로 하며, 일반적으로 다음 4개의 신호를 사용한다.
* 마스터 (Master): 통신을 주도하고 클럭 신호(SCLK)를 생성하는 장치.
* 슬레이브 (Slave): 마스터의 신호에 따라 데이터를 송수신하는 장치.
* MOSI (Master Output, Slave Input): 마스터에서 슬레이브로 데이터를 전송하는 라인.
* MISO (Master Input, Slave Output): 슬레이브에서 마스터로 데이터를 전송하는 라인.
* SCLK (Serial Clock): 마스터가 생성하는 클럭 신호로, 데이터 전송의 동기화를 담당한다.
* (Chip Select): 마스터가 여러 슬레이브 중 통신할 슬레이브를 선택하는 데 사용하는 신호 (액티브 로우).
통신을 시작하기 위해 마스터는 신호를 로우로 설정하여 특정 슬레이브를 선택한다. 각 SPI 클럭 사이클 동안 전이중(full-duplex) 데이터 전송이 발생한다. 즉, 마스터는 MOSI를 통해 슬레이브로 데이터를 보내고, 동시에 슬레이브는 MISO를 통해 마스터로 데이터를 보낸다.
데이터는 일반적으로 최상위 비트(MSB)부터 전송되며, 각 장치는 내부 시프트 레지스터를 사용하여 직렬 통신을 수행한다. 이 레지스터들은 칩 간에 원형 버퍼를 형성한다. 슬레이브 장치는 선택되지 않았을 때 MISO 신호를 하이 임피던스 상태로 만들어 다른 슬레이브와의 버스 경합을 방지해야 한다.
SPI는 I2C, Microwire 등과 함께 적은 수의 핀으로 주변 장치를 연결하기 위해 제안된 직렬 버스 규격 중 하나이며, 모토로라(현재는 NXP 반도체)가 제창하였다.
3.1. 클럭 극성(CPOL) 및 위상(CPHA)
모토로라(Motorola)는 마스터(Master)가 설정해야 하는 두 가지 옵션으로 CPOL(Clock Polarity, 클럭 극성) 및 CPHA(Clock Phase, 클럭 위상)를 정의했다. 이 두 옵션은 데이터에 대한 클럭의 극성과 위상을 조절하며, 대부분의 공급업체에서도 이 방식을 채택하고 있다.
* CPOL (클럭 극성): 클럭 신호(SCLK)의 극성을 결정한다.
* CPOL=0: SCLK는 논리 로우 전압에서 유휴 상태(idle)를 유지하며, 각 사이클은 1의 펄스로 구성된다. 즉, 펄스의 선두 에지는 상승 에지(rising edge)이고, 후미 에지는 하강 에지(falling edge)이다.
* CPOL=1: SCLK는 논리 하이 전압에서 유휴 상태를 유지하며, 각 사이클은 0의 펄스로 구성된다. 즉, 펄스의 선두 에지는 하강 에지이고, 후미 에지는 상승 에지이다.
* 극성은 간단한 NOT 게이트로 변환할 수 있다.
* CPHA (클럭 위상): 데이터 비트와 클럭 펄스 간의 타이밍, 즉 위상을 결정한다.
* CPHA=0:
* 첫 번째 데이터 비트는 가 활성화되는 즉시 출력된다.
* 후속 비트는 SCLK가 유휴 전압 레벨 로 전환될 때 출력된다.
* 샘플링은 SCLK가 유휴 전압 레벨 에서 전환될 때 발생한다.
* "출력" 측은 이전 클럭 사이클의 후미 에지에서 데이터를 변경한다. 한편, "입력" 측은 현재 클럭 사이클의 선두 에지에서 데이터를 캡처한다. 출력 측은 현재 클럭 사이클의 후미 에지까지 데이터가 유효하도록 유지한다. 전송의 첫 번째 사이클에서는 선두 에지 전에 첫 번째 비트가 MOSI 회선에 출력되어야 한다.
* CPHA=1:
* 첫 번째 데이터 비트는 가 활성화된 후 SCLK의 첫 번째 클럭 에지에서 출력된다.
* 후속 비트는 SCLK가 유휴 전압 레벨 에서 전환될 때 출력된다.
* 샘플링은 SCLK가 유휴 전압 레벨 로 전환될 때 발생한다.
* "출력" 측이 현재 클럭 사이클의 선두 에지에서 데이터를 변경한다. 한편, "입력" 측은 현재 클럭 사이클의 후미 에지에서 캡처한다. 출력 측은 다음 클럭 사이클의 선두 에지까지 데이터가 유효하도록 유지한다. 전송의 마지막 사이클에서는 슬레이브 측이 SS 회선이 비활성화된 출력이 될 때까지 MISO를 유지한다.
CPOL과 CPHA의 조합에 따라 4가지 모드가 가능하다.
| CPOL | CPHA | 설명 |
|---|---|---|
| 0 | 0 | SCLK는 유휴 상태에서 LOW, 데이터는 첫 번째 클럭 에지에서 캡처 |
| 0 | 1 | SCLK는 유휴 상태에서 LOW, 데이터는 두 번째 클럭 에지에서 캡처 |
| 1 | 0 | SCLK는 유휴 상태에서 HIGH, 데이터는 첫 번째 클럭 에지에서 캡처 |
| 1 | 1 | SCLK는 유휴 상태에서 HIGH, 데이터는 두 번째 클럭 에지에서 캡처 |
MOSI 및 MISO 신호는 일반적으로 다음 클럭에서의 전이까지 반 사이클 동안 (수신 지점에서) 안정적이다. SPI 마스터 및 슬레이브 장치는 해당 반 사이클에서 다른 지점에서 데이터를 샘플링할 수 있다. 이를 통해 마스터와 슬레이브 간의 통신 채널 유연성이 향상된다.
3.2. 모드 번호
모토로라 SSP 호환 인터페이스는 극성(Polarity)과 위상(Phase)을 조절하여 신호를 송수신하는 프로토콜을 설정할 수 있다. 극성과 위상의 조합으로 4가지 방식이 가능하다.
| 모드 | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 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)한다.
SPI 모드의 각 조합은 CPOL을 상위 비트, CPHA를 하위 비트로 하여 "SPI 모드" 번호로 나타낸다.
| SPI 모드 | 클럭 극성 (CPOL) | 클럭 위상 (CPHA) | 데이터는 다음 신호에 의해 출력됨 | 데이터는 다음 신호에 의해 샘플링됨 |
|---|---|---|---|---|
| 0 | 0 | 0 | 하강하는 SCLK, | 상승하는 SCLK |
| 1 | 0 | 1 | 상승하는 SCLK | 하강하는 SCLK |
| 2 | 1 | 0 | 상승하는 SCLK, | 하강하는 SCLK |
| 3 | 1 | 1 | 하강하는 SCLK | 상승하는 SCLK |
다른 표기법으로는 모드를 (CPOL, CPHA) 튜플로 나타내는 방식이 있다. 예를 들어, '(0, 1)'은 CPOL=0, CPHA=1을 나타낸다. 전이중 작동에서 주 장치는 서로 다른 모드로 송수신할 수 있다. 예를 들어, 동시에 모드 0으로 전송하고 모드 1로 수신할 수 있다. 다른 공급업체는 클럭 에지에 대한 CKE 또는 CPHA의 반전에 대한 NCPHA와 같은 다른 명명 체계를 사용할 수 있다.
극성과 위상의 조합은, 많은 경우, 다음 규칙에 따라 번호가 매겨진 모드라고 불린다. 모드 번호는 2개의 비트로 정의되며, CPOL이 상위 비트, CPHA가 하위 비트로 사용된다.
| 모드 | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
Microchip PIC / "ARM 기반" 마이크로컨트롤러의 경우에는 다음과 같다. (NCPHA는 CPHA의 반전이라는 것에 주의):
| SPI 모드 | 클럭 극성 (CPOL/CKP) | 클럭 위상 (CPHA) | 클럭 에지 (CKE/NCPHA) |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 2 | 1 | 0 | 1 |
| 3 | 1 | 1 | 0 |
PIC32MX의 경우: SPI 모드는 CKP, CKE와 SMP 비트로 구성된다.
그 외에 일반적으로 사용되는 표기법에는 모드를 (CPOL, CPHA)와 같은 짝으로 표기하는 방법이 있다. 이 경우, (0, 1)는 CPOL=0이며 CPHA=1을 나타낸다.
4. 동작 방식
마스터는 슬레이브 선택(SS) 신호를 통해 통신할 슬레이브를 선택한다. 마스터는 클럭 신호(SCLK)에 동기화된 신호를 MOSI 라인을 통해 전송하고, 활성화된 슬레이브는 SCLK에 맞춰 MOSI 신호를 수신한다. SPI 버스는 단일 마스터 장치와 하나 이상의 슬레이브 장치로 작동할 수 있다.
기존의 데이터 버스, 어드레스 버스, 제어 신호에 의한 주변 장치 연결은 적어도 십수 개의 신호를 연결해야 했다. 메인 메모리 등 고속 액세스가 요구되는 장치를 제외하고, 속도를 필요로 하지 않는 장치는 IC 패키지를 소형화할 수 있다는 점 때문에 적은 핀으로 연결할 수 있는 형태가 요구되었다. 이러한 배경에서 SPI를 포함한 몇 가지 직렬 버스 규격(I2C, SPI, MicroWire 등)이 제창되었다.
SPI는 모토로라(현재는 NXP 반도체)가 제창한 규격으로, 적은 핀으로 연결할 수 있는 버스이다. 마스터와 슬레이브 사이는 4개의 신호선으로 연결된다. 하나의 마스터에 여러 슬레이브 장치를 연결할 때, SCK, MISO, MOSI의 3개 선은 공통으로 사용할 수 있다. SS만 슬레이브마다 독립적이지만, 마스터가 슬레이브를 구별할 필요가 없다면 예외이다. 슬레이브 장치가 하나뿐이거나 구별할 필요가 없는 경우에는 SS를 생략하고 3개 선으로 연결할 수 있으며, 이 경우 슬레이브 측 SS를 액티브(대개 LOW) 상태로 상시 연결한다.
슬레이브 장치가 단일이고 허용한다면 SS 핀을 논리 레벨 L로 고정해도 좋다. 하지만, 맥심 MAX1242 ADC와 같이 일부 슬레이브는 SS 신호의 하강 에지를 동작 시작에 필요로 하기 때문에 고정할 수 없는 경우가 있다. 복수의 슬레이브 장치를 사용하려면 마스터에서 각 슬레이브로의 독립적인 SS 신호선이 요구된다.
대부분의 슬레이브 장치는 트라이 스테이트 출력 상태를 가지며, 장치가 선택되지 않았을 때 MISO 신호는 고 임피던스(전기적으로 단절된 상태)가 된다. 트라이 스테이트 출력이 없는 장치는 외부 트라이 스테이트 버퍼를 사용하지 않는 한 다른 장치와 SPI를 공유할 수 없다.
4.1. 데이터 전송
마스터가 슬레이브 선택(SS) 신호를 통해 통신할 슬레이브를 선택한다. 마스터는 MOSI 라인을 통해 직렬 클럭(SCLK)에 동기화된 신호를 전송하고, 활성화된 슬레이브는 SCLK에 맞춰 MOSI 신호를 수신한다. 이러한 신호는 8비트, 16비트 또는 그 이상의 비트 조합으로 구성되어 의미 있는 데이터로 사용된다.
SPI 통신 프로토콜은 다음과 같은 인터페이스로 나뉜다.
* 모토로라 SSP 호환 인터페이스: 전이중, 4선(four-wire) 동기 전송, 프로그래밍 가능한 클럭 극성(Polarity) 및 위상(Phase)
* 내셔널 세미컨덕터 마이크로와이어 인터페이스: 8비트 제어 메시지를 이용한 반이중 전송
* 텍사스 인스트루먼츠 동기 직렬 인터페이스: 전이중, 4선(four-wire) 동기 전송, 전송하지 않을 때 데이터 핀을 트라이스테이트(tristateable) 가능
모토로라 SSP 호환 인터페이스는 극성(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이 떨어지는(폴링 엣지) 시점에 데이터가 수신된다.
* SPO=1, SPH=1: SPI CLOCK이 HIGH인 상태에서 SS가 HIGH에서 LOW로 바뀌고, SPI_CLOCK이 LOW로 떨어지면서 MOSI가 활성화된다. SPI CLOCK이 절반 지났을 때부터 유효 데이터로 인정되며, SPI CLOCK이 올라가는(라이징 엣지) 시점에 데이터가 수신된다.
일반적인 SPI는 4가지 논리 신호를 사용한다.
주 장치의 MOSI는 서브 장치의 MOSI로 출력되고, 서브 장치의 MISO는 주 장치의 MISO로 출력된다. 각 장치는 직렬 통신을 위해 내부적으로 시프트 레지스터를 사용하며, 이는 칩 간 원형 버퍼를 형성한다.
서브 장치는 선택되지 않았을 때 MISO 신호가 하이 임피던스(전기적으로 분리됨) 상태가 되도록 트라이 스테이트 출력을 사용해야 한다. 트라이 스테이트 출력이 없는 서브는 외부 트라이 스테이트 버퍼 없이 다른 서브와 MISO 라인을 공유할 수 없다.
통신을 시작하기 위해 마스터는 칩 선택(CS) 신호를 로우(low)로 설정하여 하위 장치를 선택한다. 아날로그-디지털 변환과 같이 대기 시간이 필요한 경우, 마스터는 클럭 사이클을 시작하기 전에 최소한 해당 기간만큼 기다려야 한다.
각 SPI 클럭 사이클 동안 단일 비트의 전이중 전송이 발생한다. 마스터는 MOSI 라인에서 비트를 보내고, 서브는 MISO 라인에서 비트를 보내며, 각자는 수신 비트를 읽는다. 이 과정은 단방향 데이터 전송만 필요한 경우에도 유지된다.
단일 서브를 사용한 전송은 마스터와 서브의 시프트 레지스터 각 1개로 구성되며, 특정 워드 크기(예: 8비트)를 가진다. 가상 링 토폴로지로 연결된 데이터는 일반적으로 최상위 비트(MSB)부터 먼저 시프트 아웃된다. 클럭 에지에서 마스터와 서브는 모두 비트를 상대방에게 시프트 아웃하고, 다음 클럭 에지에서 각 수신기는 전송된 비트를 샘플링하여 새로운 최하위 비트로 시프트 레지스터에 저장한다. 모든 비트가 시프트 아웃 및 입력된 후, 마스터와 서브는 레지스터 값을 교환한다. 더 많은 데이터를 교환해야 하는 경우 시프트 레지스터를 다시 로드하고 과정을 반복한다. 전송은 클럭 사이클 수에 관계없이 계속될 수 있으며, 완료되면 마스터는 클럭 신호 토글을 중지하고 일반적으로 서브를 비활성화한다.
단일 서브 장치가 사용되는 경우, 서브가 허용하면 CS 핀을 논리 레벨의 로우로 고정할 수 있다. 여러 서브 장치가 있는 경우, 멀티드롭 구성은 각 서브 장치에 대해 마스터로부터 독립적인 CS 신호가 필요하며, 데이지 체인 구성은 단 하나의 CS 신호만 필요하다.
선택되지 않은 버스의 모든 서브는 입력 클럭 및 MOSI 신호를 무시해야 한다. 그리고 MISO에서 버스 경합을 방지하기 위해 선택되지 않은 서브는 3상태 논리 출력을 사용해야 한다. 이미 3상태가 아닌 서브는 이를 보장하기 위해 외부 3상태 버퍼가 필요하다.
마스터는 슬레이브가 지원하는 주파수(일반적으로 수 MHz)의 클럭 신호를 생성한 후, 해당 슬레이브의 SS 라인의 논리 레벨을 0으로 하여 슬레이브를 선택한다. 슬레이브로부터 대기 시간이 요구되는 경우(예: 아날로그-디지털 변환), 마스터는 클럭 신호를 발신하기 전에 최소한 요구되는 시간만큼 기다려야 한다.
SPI의 각 클록 사이클 동안 전이중 데이터 전송이 이루어진다. 마스터는 MOSI 라인에서 1비트를 전송하고 슬레이브는 이를 읽는다. 동시에 슬레이브는 MISO 라인에서 1비트를 전송하고 마스터는 이를 읽는다. 이 과정은 일방향 데이터 전송을 목적으로 하더라도 유지된다.
일반적으로 전송에는 8비트 등 특정 워드 크기의 두 개의 시프트 레지스터가 사용된다(마스터, 슬레이브 각 하나). 이 레지스터들은 가상적인 링 형태로 연결되며, 데이터는 일반적으로 최상위 비트가 먼저 시프트 아웃된다. 클록 에지에서 마스터와 슬레이브는 모두 비트를 시프트 아웃하고 전송 라인상에서 서로에게 출력한다. 다음 클록 에지에서 각 리시버에서 전송 라인으로부터 비트가 샘플링되어 시프트 레지스터의 새로운 최하위 비트로 설정된다. 레지스터의 모든 비트가 시프트 인 및 시프트 아웃된 후에는 마스터와 슬레이브는 레지스터 값을 교환한 상태가 된다. 추가 데이터를 교환해야 할 경우 시프트 레지스터가 리로드되고 이 과정이 반복된다. 전송은 임의의 수의 클록 사이클에 걸쳐 지속될 수 있다. 완료되면 마스터는 클록 신호의 L과 H 전환을 중지하고 일반적으로 슬레이브 선택을 해제한다.
텍사스 인스트루먼트(Texas Instruments)의 TSC2101과 같은 터치스크린 컨트롤러 또는 오디오 코덱은 16비트 워드, 많은 디지털-아날로그 컨버터 또는 아날로그-디지털 컨버터 등은 12비트 워드 등 다른 워드 크기도 존재한다.
SS 라인을 사용하여 활성화되지 않은 버스상의 모든 슬레이브는 입력 클록과 MOSI 신호를 무시해야 하며 MISO를 구동해서는 안 된다(트라이스테이트 출력 필요). 그러나 일부 장치에서 구현하기 위해서는 외부 트라이스테이트 버퍼가 필요하다.
4.2. 인터럽트
SPI는 인터럽트 사용을 명시적으로 금지하거나 규정하지 않으므로, 선택적으로 구현될 수 있다. 즉, SPI 자체의 표준 범위에는 인터럽트 방식이 포함되지 않는다.
마이크로컨트롤러(주 장치)는 데이터 워드가 수신되거나 수신 FIFO 버퍼에서 오버플로가 발생할 때 자체 인터럽트 신호를 생성하는 하드웨어 지원을 가질 수 있다. 또한, 칩 선택 입력 라인이 낮거나 높게 변경될 때 인터럽트 루틴을 설정할 수도 있다.
SPI 서브(종속 장치)는 때때로 대역 외 신호(별도의 와이어)를 사용하여 메인(주 장치)에 인터럽트 신호를 보낼 수 있다. 예를 들어 다음과 같은 경우가 있다.
* 터치스크린 센서의 펜 다운 인터럽트
* 온도 센서의 열 제한 경고
* 실시간 시계 칩에서 발행되는 알람
* SDIO
* 오디오 잭 삽입 (오디오 코덱용)
메인으로의 인터럽트는 폴링을 사용하여 위조될 수도 있다 ( USB 1.1 및 2.0과 유사).
5. 버스 토폴로지
SPI는 일반적으로 4개의 논리 신호를 사용하며, 다른 이름을 사용하거나 다른 신호를 갖는 변형도 존재한다. 각 신호의 약어, 이름, 설명은 다음과 같다.
주 장치의 MOSI는 서브 장치의 MOSI로 출력되고, 서브 장치의 MISO는 주 장치의 MISO로 출력된다. 각 장치는 직렬 통신을 위해 내부적으로 시프트 레지스터를 사용하며, 이는 칩 간 원형 버퍼를 형성한다. 서브 장치는 장치가 선택되지 않은 경우 MISO 신호가 하이 임피던스(전기적으로 분리됨)가 되도록 트라이 스테이트 출력을 사용해야 한다. 트라이 스테이트 출력이 없는 서브는 외부 트라이 스테이트 버퍼를 사용하지 않고는 다른 서브와 MISO 라인을 공유할 수 없다.
통신을 시작하기 위해 SPI 마스터(주 장치)는 먼저 (칩 선택) 신호를 로우(low)로 당겨 하위 장치(서브)를 선택한다. 아날로그-디지털 변환과 같이 대기 기간이 필요한 경우, 마스터는 클럭 사이클을 시작하기 전에 최소한 해당 기간만큼 기다려야 한다.
각 SPI 클럭 사이클 동안 단일 비트의 전이중 전송이 발생한다. 마스터는 MOSI 라인에서 비트를 보내고, 서브는 MISO 라인에서 비트를 보내며, 각자는 해당 수신 비트를 읽는다. 이 시퀀스는 단방향 데이터 전송만 의도된 경우에도 유지된다.
단일 서브를 사용한 전송은 마스터와 서브의 시프트 레지스터 각각 1개로 구성되며, 둘 다 특정 워드 크기(예: 8비트)를 가진다. 가상 링 토폴로지로 연결되며, 데이터는 일반적으로 최상위 비트(MSB)부터 먼저 시프트 아웃된다. 클럭 에지에서 마스터와 서브는 모두 비트를 상대방에게 시프트 아웃하고, 다음 클럭 에지에서 각 수신기는 전송된 비트를 샘플링하여 새로운 최하위 비트로 시프트 레지스터에 저장한다. 모든 비트가 시프트 아웃되고 입력된 후, 마스터와 서브는 레지스터 값을 교환한다. 더 많은 데이터를 교환해야 하는 경우 시프트 레지스터를 다시 로드하고 프로세스를 반복한다. 완료되면 마스터는 클럭 신호 토글을 중지하고 일반적으로 서브를 비활성화한다.
SPI 버스는 단일 마스터와 하나 이상의 슬레이브 장치로 작동할 수 있다. 슬레이브 장치가 단일이고, 슬레이브 장치가 허용한다면 핀을 논리 레벨의 로우로 고정해도 좋다. 하지만, 어떤 종류의 슬레이브는 신호의 하강 에지를 동작 시작에 필요로 하기 때문에 고정할 수 없는 경우가 있다.
5.1. 멀티드롭 구성
멀티드롭 버스 구성에서 각 서브(슬레이브)는 자체 칩 선택() 신호를 가지며, 주 장치(마스터)는 한 번에 하나만 선택한다. MISO, SCLK 및 MOSI 신호는 각 장치에서 공유된다. 이것이 SPI가 일반적으로 사용되는 방식이다.
서브의 MISO 핀이 함께 연결되어 있으므로 트라이 스테이트 핀(높음, 낮음, 하이 임피던스)이 필요하며, 서브가 선택되지 않은 경우에는 하이 임피던스 출력이 적용되어야 한다. 트라이 스테이트를 지원하지 않는 서브 장치는 해당 신호로 제어되는 트라이 스테이트 버퍼 칩을 추가하여 멀티드롭 구성에서 사용할 수 있다. 슬레이브당 단일 신호 라인만 트라이 스테이트가 필요하므로, 독립적인 게이트 입력을 가진 4개의 트라이 스테이트 버퍼가 포함된 하나의 일반적인 표준 로직 칩을 사용하여 최대 4개의 서브 장치를 SPI 버스에 인터페이스할 수 있다.
> 주의 사항: 모든 신호는 초기화 메시지를 서브로 보내기 전에 높음(어떤 칩도 선택되지 않음을 나타냄)으로 시작해야 하므로, 초기화되지 않은 다른 서브는 자신에게 주소가 지정되지 않은 메시지를 무시한다. 이는 마스터가 에 범용 입출력(GPIO) 핀(정의되지 않은 상태로 기본 설정될 수 있음)을 사용하고 마스터가 각 장치를 초기화하기 위해 별도의 소프트웨어 라이브러리를 사용하는 경우에 문제가 된다. 한 가지 해결책은 모든 서브의 초기화 코드를 실행하기 전에 에 사용되는 모든 GPIO를 높음 전압을 출력하도록 구성하는 것이다. 또 다른 해결책은 각 에 풀업 저항을 추가하여 모든 신호가 처음에 높게 유지되도록 하는 것이다.
5.2. 데이지 체인 구성
SPI를 구현하는 일부 제품은 데이지 체인 구성으로 연결될 수 있다. 여기서 첫 번째 부품의 출력은 두 번째 부품의 입력에 연결되고, 이어서 후속 부품까지 연결되며, 최종 부품의 출력은 다시 메인 부품의 입력으로 연결된다. 이는 각 부품의 개별 통신 시프트 레지스터를 효과적으로 병합하여 체인을 통해 데이터를 이동시키는 단일의 더 큰 결합된 시프트 레지스터를 형성한다. 이 구성은 각 부품에 대한 개별 라인 대신 메인에서 단일 라인만 필요로 한다.
SPI 전용 부품을 사용하는 것 외에도, 데이지 체인 SPI는 입력을 위한 이산 시프트 레지스터 (예: 병렬 입력 직렬 출력 74xx165) 또는 출력을 위한 (예: 직렬 입력 병렬 출력 74xx595)의 더 많은 핀을 무한정으로 연결할 수 있다. 데이지 체인 SPI와 잠재적으로 상호 운용될 수 있는 다른 응용 분야로는 SGPIO, JTAG, 및 I2C가 있다.
5.3. 확장 구성
멀티드롭 버스 구성에서 각 서브 장치는 자체 칩 선택() 신호를 가지며, 주 장치는 한 번에 하나만 선택한다. MISO, SCLK, MOSI 신호는 각 장치에서 공유된다. 이것이 SPI가 일반적으로 사용되는 방식이다.
서브 장치의 MISO 핀은 함께 연결되어 있으므로 트라이 스테이트 핀(높음, 낮음, 하이 임피던스)이 필요하며, 서브 장치가 선택되지 않은 경우에는 하이 임피던스 출력이 적용되어야 한다. 트라이 스테이트를 지원하지 않는 서브 장치는 해당 신호로 제어되는 트라이 스테이트 버퍼 칩을 추가하여 멀티드롭 구성에서 사용할 수 있다. (서브 장치당 단일 신호 라인만 트라이 스테이트가 필요하므로, 독립적인 게이트 입력을 가진 4개의 트라이 스테이트 버퍼가 포함된 하나의 일반적인 표준 로직 칩을 사용하여 최대 4개의 서브 장치를 SPI 버스에 인터페이스할 수 있다.)
> 주의 사항: 모든 신호는 초기화 메시지를 서브 장치로 보내기 전에 높음(어떤 칩도 선택되지 않음을 나타냄)으로 시작해야 하므로, 초기화되지 않은 다른 서브 장치는 자신에게 주소가 지정되지 않은 메시지를 무시한다. 이는 주 장치가 에 범용 입출력(GPIO) 핀(정의되지 않은 상태로 기본 설정될 수 있음)을 사용하고, 주 장치가 각 장치를 초기화하기 위해 별도의 소프트웨어 라이브러리를 사용하는 경우에 문제가 된다. 한 가지 해결책은 모든 서브 장치의 초기화 코드를 실행하기 전에 에 사용되는 모든 GPIO를 높음 전압을 출력하도록 구성하는 것이다. 또 다른 해결책은 각 에 풀업 저항을 추가하여 모든 신호가 처음에 높게 유지되도록 하는 것이다.
확장기 구성은 칩 선택을 추가하기 위해 SPI 제어 주소 지정 장치(예: 이진 디코더, 디멀티플렉서, 시프트 레지스터)를 사용한다.
예를 들어, 하나의 는 SPI 제어 디멀티플렉서로 전송하여 선택 신호를 제어하는 인덱스 번호를 제어하는 데 사용할 수 있으며, 다른 는 해당 인덱스에 따라 해당 디멀티플렉서를 통해 라우팅되어 원하는 서브 장치를 선택한다.
6. 변형
SPI 구현에는 다양한 프로토콜 변형이 있다. 일부 장치는 송신 전용이고, 다른 장치는 수신 전용이다. 칩 선택 신호는 때때로 활성 로우가 아닌 활성 하이로 설정된다. 일부 장치는 최하위 비트(LSB)를 먼저 보내기도 한다. 신호 레벨은 관련 칩에 따라 완전히 달라진다. 기본 SPI 프로토콜에는 명령 코드가 없지만, 모든 장치는 자체 명령 코드 프로토콜을 정의할 수 있다. 일부 변형은 사소하거나 비공식적인 반면, 다른 변형은 공식적인 정의 문서를 가지며 별개의 관련 프로토콜로 간주될 수 있다.