직렬 주변기기 인터페이스(SPI) 버스는 마스터-슬레이브 방식으로 작동하며, 다양한 주변 장치 간의 직렬 통신을 위한 인터페이스이다. SPI는 SCLK(직렬 클럭), MOSI(마스터 출력, 슬레이브 입력), MISO(마스터 입력, 슬레이브 출력), SS(슬레이브 선택)의 4가지 신호를 사용하며, 클럭 극성(CPOL)과 클럭 위상(CPHA)을 조절하여 통신 방식을 설정한다. SPI는 멀티드롭, 데이지 체인, 확장 등 다양한 버스 토폴로지를 지원하며, QSPI, Microwire, 3선식, 듀얼/쿼드 SPI, eSPI 등 다양한 변형이 존재한다.
더 읽어볼만한 페이지
직렬 버스 - 인피니밴드 인피니밴드는 고성능 컴퓨팅 환경에서 서버, 스토리지, 네트워크 장치 간 고속 데이터 전송을 위한 직렬 통신 기술로, 슈퍼컴퓨터나 데이터 센터에서 주로 사용되지만 이더넷 기반 기술과의 경쟁 및 새로운 컴퓨팅 환경에 대한 적응이라는 과제를 안고 있다.
직렬 버스 - 하이퍼트랜스포트 하이퍼트랜스포트는 고성능 컴퓨터 시스템에서 CPU, 메모리, 칩셋 간의 연결을 고속으로 처리하기 위해 개발된 상호 연결 기술로, AMD CPU와 엔비디아 칩셋 등에 적용되어 시스템 효율성을 향상시키고 다양한 응용 분야에 활용되며 후속 기술의 기반이 되었다.
컴퓨터 버스 - NMEA 0183 NMEA 0183은 선박용 GPS, 자동식별장치(AIS) 등 항해 장비에서 데이터를 송수신하는 데 사용되는 ASCII 기반의 직렬 통신 프로토콜로, RS-422 전기 표준을 사용하며, 문장 형태의 데이터를 통해 정보를 전달하고, 물리 계층, 데이터 링크 계층, 애플리케이션 계층의 3가지 레이어로 구성되어 다양한 소프트웨어에서 지원된다.
컴퓨터 버스 - 인피니밴드 인피니밴드는 고성능 컴퓨팅 환경에서 서버, 스토리지, 네트워크 장치 간 고속 데이터 전송을 위한 직렬 통신 기술로, 슈퍼컴퓨터나 데이터 센터에서 주로 사용되지만 이더넷 기반 기술과의 경쟁 및 새로운 컴퓨팅 환경에 대한 적응이라는 과제를 안고 있다.
주 장치의 MOSI는 서브 장치의 MOSI로 출력된다. 서브 장치의 MISO는 주 장치의 MISO로 출력된다.
각 장치는 직렬 통신을 위해 내부적으로 시프트 레지스터를 사용하며, 이는 함께 칩 간 원형 버퍼를 형성한다.
서브 장치는 장치가 선택되지 않은 경우 MISO 신호가 하이 임피던스 (전기적으로 분리됨)가 되도록 트라이 스테이트 출력을 사용해야 한다.
※MISO, MOSI, SS를 CIPO (컨트롤러 인 주변기기 아웃), COPI (컨트롤러 아웃 주변기기 인), CS (칩 셀렉트)로 바꿔 부르는 움직임도 있다.
하나의 마스터에 여러 슬레이브 장치를 연결할 때, SCK, MISO, MOSI의 3개 선은 공통으로 사용할 수 있다. SS만 슬레이브마다 독립적이지만, 마스터가 슬레이브를 구별할 필요가 없다면 예외이다. 슬레이브 장치가 하나뿐이거나, 구별할 필요가 없는 경우에는 SS를 생략하고 3개 선으로 연결할 수 있다. 이 경우 슬레이브 측 SS를 액티브(대개 LOW) 상태로 상시 연결한다.
3. 통신 개요
SPI 통신은 마스터-슬레이브 모델을 기반으로 하며, 일반적으로 다음 4개의 신호를 사용한다.[5]
MOSI (Master Output, Slave Input): 마스터에서 슬레이브로 데이터를 전송하는 라인.
MISO (Master Input, Slave Output): 슬레이브에서 마스터로 데이터를 전송하는 라인.
SCLK (Serial Clock): 마스터가 생성하는 클럭 신호로, 데이터 전송의 동기화를 담당한다.
(Chip Select): 마스터가 여러 슬레이브 중 통신할 슬레이브를 선택하는 데 사용하는 신호 (액티브 로우).
그림 1: 단일 서브가 있는 일반적인 SPI 연결
통신을 시작하기 위해 마스터는 신호를 로우로 설정하여 특정 슬레이브를 선택한다. 각 SPI 클럭 사이클 동안 전이중(full-duplex) 데이터 전송이 발생한다. 즉, 마스터는 MOSI를 통해 슬레이브로 데이터를 보내고, 동시에 슬레이브는 MISO를 통해 마스터로 데이터를 보낸다.
데이터는 일반적으로 최상위 비트(MSB)부터 전송되며, 각 장치는 내부 시프트 레지스터를 사용하여 직렬 통신을 수행한다. 이 레지스터들은 칩 간에 원형 버퍼를 형성한다. 슬레이브 장치는 선택되지 않았을 때 MISO 신호를 하이 임피던스 상태로 만들어 다른 슬레이브와의 버스 경합을 방지해야 한다.
SPI는 I2C, Microwire 등과 함께 적은 수의 핀으로 주변 장치를 연결하기 위해 제안된 직렬 버스 규격 중 하나이며, 모토로라(현재는 NXP 반도체)가 제창하였다.
3. 1. 클럭 극성(CPOL) 및 위상(CPHA)
모토로라(Motorola)[3][15]는 마스터(Master)가 설정해야 하는 두 가지 옵션으로 CPOL(Clock Polarity, 클럭 극성) 및 CPHA(Clock Phase, 클럭 위상)를 정의했다. 이 두 옵션은 데이터에 대한 클럭의 극성과 위상을 조절하며, 대부분의 공급업체에서도 이 방식을 채택하고 있다.
338x338px
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. 모드 번호
(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 버스는 단일 마스터 장치와 하나 이상의 슬레이브 장치로 작동할 수 있다.[5]
기존의 데이터 버스, 어드레스 버스, 제어 신호에 의한 주변 장치 연결은 적어도 십수 개의 신호를 연결해야 했다. 메인 메모리 등 고속 액세스가 요구되는 장치를 제외하고, 속도를 필요로 하지 않는 장치는 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를 공유할 수 없다.
주 장치의 MOSI는 서브 장치의 MOSI로 출력되고, 서브 장치의 MISO는 주 장치의 MISO로 출력된다. 각 장치는 직렬 통신을 위해 내부적으로 시프트 레지스터를 사용하며, 이는 칩 간 원형 버퍼를 형성한다.
서브 장치는 선택되지 않았을 때 MISO 신호가 하이 임피던스(전기적으로 분리됨) 상태가 되도록 트라이 스테이트 출력을 사용해야 한다. 트라이 스테이트 출력이 없는 서브는 외부 트라이 스테이트 버퍼 없이 다른 서브와 MISO 라인을 공유할 수 없다.
통신을 시작하기 위해 마스터는 칩 선택(CS) 신호를 로우(low)로 설정하여 하위 장치를 선택한다. 아날로그-디지털 변환과 같이 대기 시간이 필요한 경우, 마스터는 클럭 사이클을 시작하기 전에 최소한 해당 기간만큼 기다려야 한다.
각 SPI 클럭 사이클 동안 단일 비트의 전이중 전송이 발생한다. 마스터는 MOSI 라인에서 비트를 보내고, 서브는 MISO 라인에서 비트를 보내며, 각자는 수신 비트를 읽는다. 이 과정은 단방향 데이터 전송만 필요한 경우에도 유지된다.
단일 서브를 사용한 전송은 마스터와 서브의 시프트 레지스터 각 1개로 구성되며, 특정 워드 크기(예: 8비트)를 가진다. 가상 링 토폴로지로 연결된 데이터는 일반적으로 최상위 비트(MSB)부터 먼저 시프트 아웃된다. 클럭 에지에서 마스터와 서브는 모두 비트를 상대방에게 시프트 아웃하고, 다음 클럭 에지에서 각 수신기는 전송된 비트를 샘플링하여 새로운 최하위 비트로 시프트 레지스터에 저장한다. 모든 비트가 시프트 아웃 및 입력된 후, 마스터와 서브는 레지스터 값을 교환한다. 더 많은 데이터를 교환해야 하는 경우 시프트 레지스터를 다시 로드하고 과정을 반복한다. 전송은 클럭 사이클 수에 관계없이 계속될 수 있으며, 완료되면 마스터는 클럭 신호 토글을 중지하고 일반적으로 서브를 비활성화한다.
단일 서브 장치가 사용되는 경우, 서브가 허용하면 CS 핀을 논리 레벨의 로우로 고정할 수 있다. 여러 서브 장치가 있는 경우, 멀티드롭 구성은 각 서브 장치에 대해 마스터로부터 독립적인 CS 신호가 필요하며, 데이지 체인 구성은 단 하나의 CS 신호만 필요하다.
선택되지 않은 버스의 모든 서브는 입력 클럭 및 MOSI 신호를 무시해야 한다. 그리고 MISO에서 버스 경합을 방지하기 위해 선택되지 않은 서브는 3상태 논리 출력을 사용해야 한다. 이미 3상태가 아닌 서브는 이를 보장하기 위해 외부 3상태 버퍼가 필요하다.[5]
마스터는 슬레이브가 지원하는 주파수(일반적으로 수 MHz)의 클럭 신호를 생성한 후, 해당 슬레이브의 SS 라인의 논리 레벨을 0으로 하여 슬레이브를 선택한다. 슬레이브로부터 대기 시간이 요구되는 경우(예: 아날로그-디지털 변환), 마스터는 클럭 신호를 발신하기 전에 최소한 요구되는 시간만큼 기다려야 한다.
SPI의 각 클록 사이클 동안 전이중 데이터 전송이 이루어진다. 마스터는 MOSI 라인에서 1비트를 전송하고 슬레이브는 이를 읽는다. 동시에 슬레이브는 MISO 라인에서 1비트를 전송하고 마스터는 이를 읽는다. 이 과정은 일방향 데이터 전송을 목적으로 하더라도 유지된다.
일반적으로 전송에는 8비트 등 특정 워드 크기의 두 개의 시프트 레지스터가 사용된다(마스터, 슬레이브 각 하나). 이 레지스터들은 가상적인 링 형태로 연결되며, 데이터는 일반적으로 최상위 비트가 먼저 시프트 아웃된다. 클록 에지에서 마스터와 슬레이브는 모두 비트를 시프트 아웃하고 전송 라인상에서 서로에게 출력한다. 다음 클록 에지에서 각 리시버에서 전송 라인으로부터 비트가 샘플링되어 시프트 레지스터의 새로운 최하위 비트로 설정된다. 레지스터의 모든 비트가 시프트 인 및 시프트 아웃된 후에는 마스터와 슬레이브는 레지스터 값을 교환한 상태가 된다. 추가 데이터를 교환해야 할 경우 시프트 레지스터가 리로드되고 이 과정이 반복된다. 전송은 임의의 수의 클록 사이클에 걸쳐 지속될 수 있다. 완료되면 마스터는 클록 신호의 L과 H 전환을 중지하고 일반적으로 슬레이브 선택을 해제한다.
텍사스 인스트루먼트(Texas Instruments)의 TSC2101과 같은 터치스크린 컨트롤러 또는 오디오 코덱은 16비트 워드, 많은 디지털-아날로그 컨버터 또는 아날로그-디지털 컨버터 등은 12비트 워드 등 다른 워드 크기도 존재한다.
SS 라인을 사용하여 활성화되지 않은 버스상의 모든 슬레이브는 입력 클록과 MOSI 신호를 무시해야 하며 MISO를 구동해서는 안 된다(트라이스테이트 출력 필요). 그러나 일부 장치에서 구현하기 위해서는 외부 트라이스테이트 버퍼가 필요하다.
4. 2. 인터럽트
SPI는 인터럽트 사용을 명시적으로 금지하거나 규정하지 않으므로, 선택적으로 구현될 수 있다. 즉, SPI 자체의 표준 범위에는 인터럽트 방식이 포함되지 않는다.[5]
마이크로컨트롤러(주 장치)는 데이터 워드가 수신되거나 수신 FIFO 버퍼에서 오버플로가 발생할 때 자체 인터럽트 신호를 생성하는 하드웨어 지원을 가질 수 있다.[4] 또한, 칩 선택 입력 라인이 낮거나 높게 변경될 때 인터럽트 루틴을 설정할 수도 있다.
SPI 서브(종속 장치)는 때때로 대역 외 신호(별도의 와이어)를 사용하여 메인(주 장치)에 인터럽트 신호를 보낼 수 있다. 예를 들어 다음과 같은 경우가 있다.
주 장치의 MOSI는 서브 장치의 MOSI로 출력되고, 서브 장치의 MISO는 주 장치의 MISO로 출력된다. 각 장치는 직렬 통신을 위해 내부적으로 시프트 레지스터를 사용하며, 이는 칩 간 원형 버퍼를 형성한다. 서브 장치는 장치가 선택되지 않은 경우 MISO 신호가 하이 임피던스(전기적으로 분리됨)가 되도록 트라이 스테이트 출력을 사용해야 한다. 트라이 스테이트 출력이 없는 서브는 외부 트라이 스테이트 버퍼를 사용하지 않고는 다른 서브와 MISO 라인을 공유할 수 없다.
통신을 시작하기 위해 SPI 마스터(주 장치)는 먼저 (칩 선택) 신호를 로우(low)로 당겨 하위 장치(서브)를 선택한다. 아날로그-디지털 변환과 같이 대기 기간이 필요한 경우, 마스터는 클럭 사이클을 시작하기 전에 최소한 해당 기간만큼 기다려야 한다.[5]
각 SPI 클럭 사이클 동안 단일 비트의 전이중 전송이 발생한다. 마스터는 MOSI 라인에서 비트를 보내고, 서브는 MISO 라인에서 비트를 보내며, 각자는 해당 수신 비트를 읽는다. 이 시퀀스는 단방향 데이터 전송만 의도된 경우에도 유지된다.
단일 서브를 사용한 전송은 마스터와 서브의 시프트 레지스터 각각 1개로 구성되며, 둘 다 특정 워드 크기(예: 8비트)를 가진다. 가상 링 토폴로지로 연결되며, 데이터는 일반적으로 최상위 비트(MSB)부터 먼저 시프트 아웃된다. 클럭 에지에서 마스터와 서브는 모두 비트를 상대방에게 시프트 아웃하고, 다음 클럭 에지에서 각 수신기는 전송된 비트를 샘플링하여 새로운 최하위 비트로 시프트 레지스터에 저장한다. 모든 비트가 시프트 아웃되고 입력된 후, 마스터와 서브는 레지스터 값을 교환한다. 더 많은 데이터를 교환해야 하는 경우 시프트 레지스터를 다시 로드하고 프로세스를 반복한다. 완료되면 마스터는 클럭 신호 토글을 중지하고 일반적으로 서브를 비활성화한다.
SPI 버스는 단일 마스터와 하나 이상의 슬레이브 장치로 작동할 수 있다. 슬레이브 장치가 단일이고, 슬레이브 장치가 허용한다면 핀을 논리 레벨의 로우로 고정해도 좋다. 하지만, 어떤 종류의 슬레이브는 신호의 하강 에지를 동작 시작에 필요로 하기 때문에 고정할 수 없는 경우가 있다.
5. 1. 멀티드롭 구성
멀티드롭 SPI 버스
멀티드롭 버스 구성에서 각 서브(슬레이브)는 자체 칩 선택() 신호를 가지며, 주 장치(마스터)는 한 번에 하나만 선택한다. MISO, SCLK 및 MOSI 신호는 각 장치에서 공유된다. 이것이 SPI가 일반적으로 사용되는 방식이다.
서브의 MISO 핀이 함께 연결되어 있으므로 트라이 스테이트 핀(높음, 낮음, 하이 임피던스)이 필요하며, 서브가 선택되지 않은 경우에는 하이 임피던스 출력이 적용되어야 한다. 트라이 스테이트를 지원하지 않는 서브 장치는 해당 신호로 제어되는 트라이 스테이트 버퍼 칩을 추가하여 멀티드롭 구성에서 사용할 수 있다.[5] 슬레이브당 단일 신호 라인만 트라이 스테이트가 필요하므로, 독립적인 게이트 입력을 가진 4개의 트라이 스테이트 버퍼가 포함된 하나의 일반적인 표준 로직 칩을 사용하여 최대 4개의 서브 장치를 SPI 버스에 인터페이스할 수 있다.
> 주의 사항: 모든 신호는 초기화 메시지를 서브로 보내기 전에 높음(어떤 칩도 선택되지 않음을 나타냄)으로 시작해야 하므로, 초기화되지 않은 다른 서브는 자신에게 주소가 지정되지 않은 메시지를 무시한다. 이는 마스터가 에 범용 입출력(GPIO) 핀(정의되지 않은 상태로 기본 설정될 수 있음)을 사용하고 마스터가 각 장치를 초기화하기 위해 별도의 소프트웨어 라이브러리를 사용하는 경우에 문제가 된다. 한 가지 해결책은 ''모든'' 서브의 초기화 코드를 실행하기 ''전에'' 에 사용되는 모든 GPIO를 높음 전압을 출력하도록 구성하는 것이다. 또 다른 해결책은 각 에 풀업 저항을 추가하여 모든 신호가 처음에 높게 유지되도록 하는 것이다.[5]
5. 2. 데이지 체인 구성
데이지 체인 SPI
SPI를 구현하는 일부 제품은 데이지 체인 구성으로 연결될 수 있다. 여기서 첫 번째 부품의 출력은 두 번째 부품의 입력에 연결되고, 이어서 후속 부품까지 연결되며, 최종 부품의 출력은 다시 메인 부품의 입력으로 연결된다. 이는 각 부품의 개별 통신 시프트 레지스터를 효과적으로 병합하여 체인을 통해 데이터를 이동시키는 단일의 더 큰 결합된 시프트 레지스터를 형성한다. 이 구성은 각 부품에 대한 개별 라인 대신 메인에서 단일 라인만 필요로 한다.[6]
SPI 전용 부품을 사용하는 것 외에도, 데이지 체인 SPI는 입력을 위한 이산 시프트 레지스터 (예: 병렬 입력 직렬 출력 74xx165)[7] 또는 출력을 위한 (예: 직렬 입력 병렬 출력 74xx595)[8]의 더 많은 핀을 무한정으로 연결할 수 있다. 데이지 체인 SPI와 잠재적으로 상호 운용될 수 있는 다른 응용 분야로는 SGPIO, JTAG,[9] 및 I2C가 있다.
5. 3. 확장 구성
멀티드롭 버스 구성에서 각 서브 장치는 자체 칩 선택() 신호를 가지며, 주 장치는 한 번에 하나만 선택한다. MISO, SCLK, MOSI 신호는 각 장치에서 공유된다. 이것이 SPI가 일반적으로 사용되는 방식이다.
서브 장치의 MISO 핀은 함께 연결되어 있으므로 트라이 스테이트 핀(높음, 낮음, 하이 임피던스)이 필요하며, 서브 장치가 선택되지 않은 경우에는 하이 임피던스 출력이 적용되어야 한다. 트라이 스테이트를 지원하지 않는 서브 장치는 해당 신호로 제어되는 트라이 스테이트 버퍼 칩을 추가하여 멀티드롭 구성에서 사용할 수 있다.[5] (서브 장치당 단일 신호 라인만 트라이 스테이트가 필요하므로, 독립적인 게이트 입력을 가진 4개의 트라이 스테이트 버퍼가 포함된 하나의 일반적인 표준 로직 칩을 사용하여 최대 4개의 서브 장치를 SPI 버스에 인터페이스할 수 있다.)
> 주의 사항: 모든 신호는 초기화 메시지를 서브 장치로 보내기 전에 높음(어떤 칩도 선택되지 않음을 나타냄)으로 시작해야 하므로, 초기화되지 않은 다른 서브 장치는 자신에게 주소가 지정되지 않은 메시지를 무시한다. 이는 주 장치가 에 범용 입출력(GPIO) 핀(정의되지 않은 상태로 기본 설정될 수 있음)을 사용하고, 주 장치가 각 장치를 초기화하기 위해 별도의 소프트웨어 라이브러리를 사용하는 경우에 문제가 된다. 한 가지 해결책은 ''모든'' 서브 장치의 초기화 코드를 실행하기 ''전에'' 에 사용되는 모든 GPIO를 높음 전압을 출력하도록 구성하는 것이다. 또 다른 해결책은 각 에 풀업 저항을 추가하여 모든 신호가 처음에 높게 유지되도록 하는 것이다.[5]
확장기 구성은 칩 선택을 추가하기 위해 SPI 제어 주소 지정 장치(예: 이진 디코더, 디멀티플렉서, 시프트 레지스터)를 사용한다.
예를 들어, 하나의 는 SPI 제어 디멀티플렉서로 전송하여 선택 신호를 제어하는 인덱스 번호를 제어하는 데 사용할 수 있으며, 다른 는 해당 인덱스에 따라 해당 디멀티플렉서를 통해 라우팅되어 원하는 서브 장치를 선택한다.[10]
6. 변형
SPI 구현에는 다양한 프로토콜 변형이 있다. 일부 장치는 송신 전용이고, 다른 장치는 수신 전용이다. 칩 선택 신호는 때때로 활성 로우가 아닌 활성 하이로 설정된다. 일부 장치는 최하위 비트(LSB)를 먼저 보내기도 한다. 신호 레벨은 관련 칩에 따라 완전히 달라진다. 기본 SPI 프로토콜에는 명령 코드가 없지만, 모든 장치는 자체 명령 코드 프로토콜을 정의할 수 있다. 일부 변형은 사소하거나 비공식적인 반면, 다른 변형은 공식적인 정의 문서를 가지며 별개의 관련 프로토콜로 간주될 수 있다.[5]
참조
[1]
웹사이트
Introduction to SPI Interface
https://www.analog.c[...]
2018
[2]
웹사이트
What is Serial Synchronous Interface (SSI)?
https://digital.ni.c[...]
2015-01-28
[3]
문서
SPI Block Guide v3.06; Motorola/Freescale/NXP; 2003.
https://web.archive.[...] [4]
웹사이트
TMS320x281x Serial Peripheral Interface Reference Guide
https://www.ti.com/l[...]
2002
[5]
문서
Better SPI Bus Design in 3 Steps
https://www.pjrc.com[...] [6]
문서
Maxim-IC application note 3947: "Daisy-Chaining SPI Devices"
https://www.maximint[...] [7]
웹사이트
Gammon Forum : Electronics : Microprocessors : Using a 74HC165 input shift register
https://www.gammon.c[...]
2013-03-23
[8]
웹사이트
Gammon Forum : Electronics : Microprocessors : Using a 74HC595 output shift register as a port-expander
https://www.gammon.c[...]
2012-01-31
[9]
서적
Interfaces
https://books.google[...] [10]
웹사이트
Serial-Control Multiplexer Expands SPI Chip Selects
http://www.farnell.c[...]
2001-07-01
[11]
웹사이트
AVR910 - In-system programming
http://www.atmel.com[...] [12]
서적
components :: motorola :: dataBooks :: 1983 Motorola 8-Bit Microprocessor and Peripheral Data
http://archive.org/d[...] [13]
서적
motorola :: dataBooks :: 1984 Motorola Single-Chip Microcomputer Data
http://archive.org/d[...] [14]
웹사이트
Using the Serial Peripheral Interface to Communicate Between Multiple Microcomputers
http://www.bitsavers[...] [15]
웹사이트
AN991/D: Using the Serial Peripheral Interface to Communicate Between Multiple Microcomputers
https://www.nxp.com/[...]
2004
[16]
문서
SafeSPI.org
http://SafeSPI.org [17]
웹사이트
Transmitting SPI over LVDS Interfaces
https://www.ti.com/l[...]
2021-02-14
[18]
웹사이트
SPI Master Loopback Example
https://developer.no[...]
2021-02-14
[19]
웹사이트
Freescale Semiconductor, Inc. - QSM - Queued Serial Module - Reference Manual
https://www.nxp.com/[...]
1996
[20]
웹사이트
Quad-SPI Brings Fast Parallel Data Transmission
https://resources.pc[...]
2023-01-11
[21]
문서
MICROWIRE Serial Interface
https://www.ti.com/l[...]
National Semiconductor Application Note AN-452
[22]
문서
MICROWIRE/PLUS Serial Interface for COP800 Family
https://www.ti.com/l[...]
National Semiconductor Application Note AN-579
[23]
간행물
W25Q16JV 3V 16M-bit serial flash memory with Dual/Quad SPI
https://www.winbond.[...]
Winbond
2016-08-12
[24]
간행물
D25LQ64 1.8V Uniform Sector Dual and Quad SPI Flash
https://www.sst-ic.c[...]
GigaDevice
2011-02-11
[25]
웹사이트
QuadSPI flash: Quad SPI mode vs. QPI mode
https://community.nx[...]
2014-12
[26]
간행물
SST26VF032B / SST26VF032BA 2.5V/3.0V 32 Mbit Serial Quad I/O (SQI) Flash Memory
http://ww1.microchip[...]
Microchip, Inc.
2017
[27]
웹사이트
Quad Serial Peripheral Interface (QuadSPI) Module Updates
https://www.nxp.com/[...]
Freescale Semiconductor
2012-05
[28]
뉴스
Improving performance using SPI-DDR NOR flash memory
https://www.edn.com/[...]
EDN (magazine)
2011-10-13
[29]
문서
IEEE 1149.1-2013
[30]
보고서
Enhanced Serial Peripheral Interface (eSPI) Interface Base Specification (for Client and Server Platforms)
https://www-ssl.inte[...]
Intel
2016-01
[31]
보고서
Enhanced Serial Peripheral Interface (eSPI) Interface Specification (for Client Platforms)
https://downloadmirr[...]
Intel
2012-05
[32]
웹사이트
Intel® 100 Series Chipset Family PCH Datasheet, Vol. 1
https://www.intel.co[...]
2015-04-15
[33]
웹사이트
USB to SPI converter
https://ftdichip.com[...]
2020-08-02
[34]
문서
SPI Storm – Serial Protocol Host Adapter
https://www.bytepara[...]
Byte Paradigm
[35]
웹사이트
N5391B I²C and SPI Protocol Triggering and Decode for Infiniium scopes
https://www.keysight[...] [36]
웹사이트
SPI; OSHWA
https://www.oshwa.or[...] [37]
PDF
https://www.ti.com/l[...]
2024-08
[38]
웹사이트
Serial Peripheral Interface (SPI) Devices
https://www.nxp.com/[...]
2023-07-22
[39]
웹사이트
Getting Started with Serial Peripheral Interface (SPI)
https://onlinedocs.m[...]
2023-12-21
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.